oracle10g数据备份 1.用sql/plus
developer,选中要备份的数据表,右击选择”Export data”
2.在弹出的对话框中最后选择要保持数据库表信息的路径 3.点击“export” ok!
导入oracle10g数据备份 1.在sql/plus
developer中选择菜单栏的“tools”单击 2.选择“import tables”
3.在弹出的对话框中填写好“import file”路径 4.单击“import” ok

一不小心听说了oracle
数据库快照,这个词我当初一听就楞了,不知道这个是什么玩意,然后花了点时间研究了下,以下是我通过网络学习总结的

方法一、使用SQL*Loader这个是用的较多的方法,前提必须oracle数据中目的表已经存在。大体步骤如下:1、将excel文件另存为一个新文件比如文件名为text.txt,文件类型选文本文件,这里选择类型为csv也行,但是在写后面的control.ctl时要将字段终止符改为’,'(fields
terminated by ‘,’),假设保存到c盘根目录。2
、如果没有存在的表结构,则创建,假设表为test,有两列为dm,ms。3、用记事本创建SQL*Loader控制文件,网上说的文件名后缀为ctl,其实我自己发现就用txt后缀也行。比如命名为control.ctl,内容如下:
load data –控制文件标识 infile ‘c:\text.txt’
–要输入的数据文件名为test.txt append into table test
–向表test中追加记录 fields terminated by X’09’
–字段终止于X’09’,是一个制表符
–定义列对应顺序备注:数据导入的方式上例中用的append,有以下几种:insert,为缺省方式,在数据装载开始时要求表为空;append,在表中追加新记录;replace,删除旧记录,替换成新装载的记录;truncate,同replace。4、在命令行提示符下使用SQL*Loader命令实现数据的输入。sqlldr
userid=system/manager control=’c:\control.ctl’

(exp.exe和imp.exe在oracle安装目录下bin目录中。使用步骤如下:运行—输入cmd—cd命令转

数据库安全配置中,需要做相关的安全加固工作。以确认数据库的安全,但是,有些时候,操作不当或者数据库业务账号修改密码后,而程序的连接数据库的配置封装在jar里,如果jar内的连接数据库的配置信息没有做相应的修改的话。就会对数据库的此业务账号造成严重的后果。

快照主要是用于分布式数据库,我们有数据库A,A中有个表a,我们在数据库B中要使用数据库A中a表的数据,这时候我们就可以在数据库B中创建数据库A的快照,这样可以提高我们的效率。

我来举个例子1.导出地区表的test.csv文件“01”,”市区””02″,”柯桥””03″,”钱清””04″,”皋埠””05″,”漓渚””06″,”齐贤””08″,”袍江””09″,”平水””12″,”东浦”….2.编辑sqlldr导出控制文件test.ctl内容如下:load
datainfile ‘e:\test.csv’replace into table testfields terminated by ‘,’
optionally enclosed by ‘”‘trailing
nullcols3.在cmd中执行:E:\>sqlldr userid=xxx/yyy@dbxx
control=e:\test.ctl log=e:\log.txt bad=e:\bad.txtSQL*Loader: Release
8.1.7.0.0 – Production on 星期三 7月 20 21:28:06 2005 Copyright 2000
Oracle Corporation. All rights reserved.达到提交点,逻辑记录计数48

到exp.exe和imp.exe所在的目录,按实际情况输入下面语句即可。)
exp导出:
1 将数据库db完全导出,用户名dbuser 密码dbuser_db
导出到E:\090614dbback.dmp中
   exp dbuser/dbuser_db@db file=E:\090614dbback.dmp full=y

因此,真正了解Oracle安全数据库用户的状态,就显得尤为重要了。下面我们就看一下oracle数据库中的多种用户状态。

我理解快照就是对表的复制,定时的将a表复制到b表

方法二、利用PLSQL Developer使用PLSQL
Developer工具,这个可是大名鼎鼎的Oracle
DBA最常使用的工具。在单个文件不大的情况下,并且目的表结构已经存在的情况下——对于excel而言肯定不会超过了,因为excel文件的最大行为65536——
可以全选数据COPY ,然后用PLSQL Developer工具。 1 在PLSQL Developer的sql
window里输入select * from test for update; 2 按F8执行 3 打开锁,
再按一下加号.
鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后COMMIT提交即可。还有很多第三方工具,Toad,PL/SQL
Developer,SQL Navigator等等。

2 将数据库中dbuser用户的表导出
   exp dbuser/dbuser_db@db file=E:\090614userback.dmp owner=(dbuser)
3 将数据库中的表表1,部门表_数据库导出
   exp dbuser/dbuser_db@db file=E:\090614tableback.dmp
tables=(表1,部门表_数据库)

ORACLE数据库用户有多种状态,可查看视图USER_ASTATUS_MAP。

注意:用快照创建的表是只读的

方法三 、使用其它数据转移工具作中转站。我使用的是Sql Server
2000。先将excel表导入sqlserver数据库中,然后再从Sql
server导入到oracle中。这两部操作都简单,如果不会随便查个帮助就可以了。这里有两个自己的经验:一、是注意excel文件的版本和格式要与导入到sql
server时的数据源匹配。
如果导入到sql server时的数据源选Microsoft Excel
97-2000的话,而excel文件的版本为Micaosoft Excel 5.0/95
工作簿,则有可能出问题。关于如何看Excle文件格式,你打开excel文件,选择另存为,即可看到像Micaosoft
Excel 5.0/95 工作簿或者是Microsoft Office Excle
工作簿等等其它的保存类型。二、就是由Sqlserver导入到oracle中时,记得将在oracle中的表名全部用大写。因为oracle的表名都是大写的,而sql的表可能是大小混写的,所以导入后在oracle里查不到该表,比如这个Products表在oracle里查询就应该写成select
* from scott.”Products”;

imp导入:(先建立一个数据库,不一定与备份前同名;再建立表空间,并且建立用户,这几个名字

SQL> col status for a30SQL> select * from user_astatus_map; STATUS# STATUS---------- ------------------------------ 0 OPEN 1 EXPIRED 2 EXPIRED 4 LOCKED 8 LOCKED 5 EXPIRED & LOCKED 6 EXPIRED & LOCKED 9 EXPIRED & LOCKED 10 EXPIRED & LOCKED9 rows selected.

创建快照的方法

需要与原来一样):
1 将E:\090614back.dmp
中的数据导入db数据库中(ignore=y如果表已经存在不会报错)。
   imp dbuser/dbuser_db@db file=E:\090614dbback.dmp full=y ignore=y

通过上面的查询我们可以看到在Oracle中account总共有9种不同的状态,对应dba_users视图中的account_status字段。

1、先需要在A数据库中建立表a的快照日志

2 将E:\090614tableback.dmp中的表表1,部门表_数据库 导入
 imp dbuser/dbuser_db@db  file=E:\090614tableback.dmp 
tables=(表1,部门表_数据库)

下面我分别就每种状态的含义和出现的情况做个简单的说明,以便于今后的系统管理和维护。分析上面的9种状态不难看出,其实独立的状态只有OPEN、EXPIRED、LOCKED、EXPIRED
5种形式。其他4种不过是前面几种形式的组合而已。

只有先建立表a的快照日志,才能在快照中执行快速刷新

ignore=y

或者也可以这样理解:

Create snapshot log on a;

以上的9种状态可以分为两大类:

2、在数据库B下建立到数据库A用户的数据库链link

1、基本状态(前五种为基本状态:0 OPEN、1 EXPIRED、2 EXPIRED、4 LOCKED;

a)只有建立了到A数据库下的表a中获取数据

2、组合状态(后四种为组合状态:5 EXPIRED & LOCKED、6 EXPIRED & LOCKED、9
EXPIRED & LOCKED、10 EXPIRED;

Create database link link_test

后四种的组合状态可通过状态号STATUS#获得其状态的两个组合。掌握前五种即可。

Connect toA数据库用户名identified byA数据库密码 using ‘数据库名’

具体详细解释请参考如下:

此图为用pl/sql建立link的视图

OPEN:
这个是大家最常见的,就是表示这个是可用的,没有任何限制的帐户LOCKED:
表示这个帐户被DBA锁定. 一般通过alter user username account
lock;EXPIRED:
表示该帐户被设置为口令到期,要求用户在下次logon的时候修改口令(系统会在该account被设置为expire后的第一次登陆是提示你修改密码)EXPIRED:
当设置了grace以后(第一次成功登录后到口令到期后有多少天时间可改变口令,在这段时间内,帐户被提醒修改口令并可以正常登陆,account_status显示为EXPIRED:
这种状态表示失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定,需要注意的是,在Oracle
10g中,默认的DEFAULT值是10次.

3、在数据库B下建立a表的快照

EXPIRED & LOCKED: 表示此账户被设置为口令到期且被锁定。EXPIRED &
LOCKED:
当account_stutus为EXPIRED的时候,用户又尝试失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定EXPIRED
& LOCKED: 当设置了account
expire后,用户又失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定EXPIRED
& LOCKED: 用户account_status为EXPIRED后,又被DBA 手工锁定帐户后的状态

Create snapshot t_a——>将来在数据B中对于a表快照显示的表名

下面通过实例操作来说明:

REFRESH COMPLETE START WITH SYSDATE+1/24*60*60 NEXT SYSDATE+1/24*60

本人对oracle数据库的profile文件进行如下安全设置:(其中的FAILED_LOGIN_ATTEMPTS
6是对用户尝试失败的登录最大次数的限制,这里只允许最多尝试失败6次)

as select * from a@link_test

SQL>ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 6 PASSWORD_LIFE_TIME 60 PASSWORD_REUSE_TIME 60 PASSWORD_REUSE_MAX 5 PASSWORD_VERIFY_FUNCTION verify_function_11g PASSWORD_LOCK_TIME 1/24 PASSWORD_GRACE_TIME 90;

SYSDATE+1/24*60*60:表示设定oracle自动在1秒钟执行刷新,NEXT
SYSDATE+1/24*60

通过以下语句查询当前用户的状态:

表示以后每个1分钟自动刷新一次

SQL> select username,account_status from dba_users;USERNAME ACCOUNT_STATUS------------------------------ --------------------------------DBA_USER OPENDBSNMP OPENSYSMAN OPENSCOTT OPENFLOWS_FILES EXPIRED & LOCKEDMDSYS EXPIRED & LOCKEDWMSYS EXPIRED & LOCKEDORDDATA EXPIRED & LOCKEDCTXSYS EXPIRED & LOCKEDANONYMOUS EXPIRED & LOCKED

说明:REFRESH是刷新方法刷新方式有:COMPLETE两种,而START
WITH是说明开始执行的时间。Next是下次执行的时间而AS以后是构成快照的查询方法。

接下来使用账号dba_user和scott,以错误的密码尝试连接数库6次以上后,再查看数据库用户状态:

刷新方法

SQL> select username,account_status from dba_users;USERNAME ACCOUNT_STATUS------------------------------ --------------------------------DBA_USER EXPIRED & LOCKEDDBSNMP OPENSYSMAN OPENSCOTT EXPIRED & LOCKEDFLOWS_FILES EXPIRED & LOCKEDMDSYS EXPIRED & LOCKEDWMSYS EXPIRED & LOCKEDORDDATA EXPIRED & LOCKEDCTXSYS EXPIRED & LOCKEDANONYMOUS EXPIRED & LOCKED

快照的刷新有两种方式:快速刷新和完全刷新。快速刷新需要快照的主表先有快照日志存在;完全刷新时oracle执行快照查询,将结果放入快照。快速刷新比完全刷新快,因为快速刷新将主数据库的数据经网络发送到快照的数据少,仅需传送主表中修改过的数据,而完全刷新要传送快照查询的全部结果。

事实证明,当用户DBA_USER和SCOTT为EXPIRED的时候,用户又尝试失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定.

4、修改快照

如果这两个用户为生产现网的业务账户的话,管理员不能及时发现问题或报警的话,将会造成业务中断等严重的后果。

Alter snapshot t_a refresh fastStart with sysdate+1/2880 next sysdate+1

此sql语句意思:设定oracle自动在30秒后进行第一次快速刷新,以后,每隔1天快速刷新一次

5、查看快照最后刷新的日期SELECT NAME,LAST_REFRESH FROM
ALL_SNAPSHOT_REFRESH_TIMES

6、手动刷新快照在命令界面执行:EXEC
DBMS_SNAPSHOT.REFRESH;第一个参数是要刷新的快照名第二个参数是刷新的方式,F—-FAST,
C—COMPLETE

7、说明

a)建立快照日志时oracle数据库为我们建立了一个基于a的触发器

tlog$_a和快照日志表mlog$_a;

网上朋友说在建立快照时建立了一些表,视图之类的,但是我只找到了表,其他的没有找到,希望得到大家的帮助。

总结的如果有什么问题请大家多多指出,共同进步。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图