Oracle 10g数据库备份与恢复操作手册
2015-01-27 18:02
537 查看
Oracle 10g数据库备份与恢复操作手册
recover和restore的区别: restore just copy the physical file, recover will consistent the database. restore 是还原,文件级的恢复。就是物理文件还原。 recover 是恢复,数据级的恢复。逻辑上恢复,比如应用归档日志、重做日志,全部同步,保持一致。 用我自己的土话讲就是,用restore先把备份文件拷贝到数据库目录下进行替换,再用recover经过一些处理,数据库就恢复正常了。 1、restore 命令:用于还原已经备份的数据文件。 (1)、restore database 还原所有的数据文件。 (2)、restore tablespace 还原特定表空间的数据文件。 (3)、restore datafile 还原特定的数据文件。 (4)、restore controlfile 还原控制文件。 (5)、restore archivelog 还原归档日志文件。 2、recover 命令:当数据库需要应用归档日志文件恢复数据文件时,使用recover命令。使用该命令数据库系统会自动应用归档的日志文件。 (1)、recover database 恢复所有的数据文件。 (2)、recover tablespace 恢复特定表空间的数据文件。 (3)、recover datafile 恢复特定的数据文件。 restore 只是用备份来还原,recover是用archivelog或者online log 举例说明: 假设我时间点A,做了个备份,时间点B数据库挂了 restore database ;// 这个操作利用时间点A做的备份来还原,返回到时间点A recover database ;//这个操作利用archivelog and online log做recover,从时间点A,推进到时间点B restore 是转储也是還原被损坏文件(RMAN经常用) recover 是恢復 通過redo log & archive log恢復 restore 是还原,文件级的恢复 recovery是恢复,数据级的恢复 View Code
全库备份
全库恢复(也可用于异机恢复)
5.5.2表空间备份与恢复
表空间备份
表空间恢复
5.5.3表空间备份与恢复
数据文件备份
数据文件恢复
5.5.4控制文件备份与恢复
控制文件备份
因为控制文件常需和数据文件一起同时进行恢复,故不常单独对控制文件进行备份,而一般在对数据文件进行备份时利用 autobackup参数对控制文件进行同步备份,以保证数据文件和控制文件的一致性。
控制文件恢复
最后重建临时表空间(对于 10gR2以后版本不需重建):
5.5.5归档文件备份与恢复
归档文件的备份
不常单独对归档文件进行备份,而一般仅在对全库进行备份时对归档文件进行手工备份,以保证归档文件的一致性。
归档文件的还原
5.5.6RMAN脚本
举例:
操作系统调用 RMAN脚本:
5.5.7 RMAN增量备份与恢复
差异备份:
差异备份对更低级及同级备份之后所有变化的数据备份。
差异备份所需备份时间短,恢复时间长。
累积增量备份:
累积备份只对更低级备份之后所有变化的数据备份。
累积备份所需时间长,恢复时间短。
还原:
6 逻辑备份(export/import)
6.1 概述
逻辑备份是将数据库中所有或指定对象导出数据库成为备份文件,或将备份文件数据导入数据库。
Oracle支持三种类型的输出:
表方式(T方式),将指定表的数据导出。
用户方式(U方式),将指定用户的所有对象及数据导出。
全库方式(Full方式),将数据库中的所有对象导出。
6.2 简单导出、导入数据
6.2.1简单导出
6.2.2简单导入
6.3 增量导出导入
增量导入导出是一种常用的数据备份方法,他只能对整个数据库来实施,并且必须以system用户来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为 export.dmp,如果不用缺省文件名则须在命令行中指出。
6.3.1增量导出
包括三种类型:
“完全”增量导出(complete):导出整个数据库:
“增量型”增量导出:导出上一次备份后改变的数据:
“累计型”增量导出:累积型到粗是导出自上次“完全”导出之后数据库中变化的数据:
6.3.2导入
7 Flashback
7.1 概述
Flashback是指将数据库恢复到过去某个时间点或 SCN点的状态,包括行级闪回,表级闪回和库级闪回。
表级闪回是利用回收站机(recyclebin)制。当一张表被 drop掉时,默认情况下并没有真正被清除,而是被放入 recyclebin里;行级闪回和库级闪回原理实际上是对数据库执行的操作做一个反操作,如:向表里插入一条数据,闪回时则删除这一条数据。如果是行级或表级闪回,这些反操作依据的是 undo表空间里未被覆盖的原始数据,如果是库级闪回,则依据的是flashback日志。
7.2 Flashback配置步骤
1).系统配置
以下是库级闪回必须的配置(若不需要用到库级闪回则为可选配置):
db_recovery_file_dest:该参数定义flashback日志文件存放目录。
db_recovery_file_dest_size:该参数定义了flashback日志文件目录最大大小,默认 2G。
启用归档模式和库级闪回功能:
2).授权给用户允许其进行闪回查询
7.3 行级闪回操作步骤
1).创建测试表
2).闪回查询对 test表所做的所有更改所对应的 SCN点
或者:
也可查询指定闪回交易号所对应的闪回 SQL语句:
3).test表进行 row movement
所有表中插入一行即被分配一永久 rowid,闪回时需对已删除行进行重插入处理,即需为被删行分配新的 rowid,故需允许进行 row movement。
4).闪回到指定 SCN号或时间点的状态
闪回到指定SCN号:
闪回到指定时间点:
7.4 表级闪回操作步骤
1).建立测试表
2).删除测试表并闪回
3).其他操作
其他常用操作:
闪回回收站里同名的表:
默认情况下回收站的同名表是先闪回后 drop掉的表:
若要闪回指定的表,可如下操作:
要清除回收站中指定的表,操作类似:
闪回回收站中与系统中同名的表:
注意:
System表空间中的表不支持行级闪回,因为 system表空间有自己独立的 undo segment
且是 manul管理方式。Sys用户也无法使用行级闪回功能。
如果表空间空间不足时,对应表空间的回收站中的对象则按 FIFO规则自动被清除。
7.5 库级闪回操作步骤
1) 按前面提到的库级闪回配置,配置系统
2) 查询可闪回的最早时间和SCN号
3) 库级闪回到指定时间点或 SCN号状态
库级闪回到指定时间点:
库级闪回到指定SCN号状态:
8 LogMiner
8.1 概述
Logminer是用于分析二进制重做日志文件和归档日志文件的工具。可从中分析出误操作执行的具体时间或 SCN号,以便恢复或进行操作审计、分析。
8.2 系统配置
若无法执行以上语句,可先运行以下两个脚本:
建议使用非 system表空间来存放 logminer信息:
8.3 操作步骤
1) 将待分析的日志文件加入日志分析列表
添加当前日志文件:
继续向日志分析列表中添加一个归档日志文件:
从日志分析列表中删除一个日志文件:
2) 启动logminer 开始分析
也可以指定开始和结束时间:
3) 查看分析结果
4) 结束 logminer分析
recover和restore的区别: restore just copy the physical file, recover will consistent the database. restore 是还原,文件级的恢复。就是物理文件还原。 recover 是恢复,数据级的恢复。逻辑上恢复,比如应用归档日志、重做日志,全部同步,保持一致。 用我自己的土话讲就是,用restore先把备份文件拷贝到数据库目录下进行替换,再用recover经过一些处理,数据库就恢复正常了。 1、restore 命令:用于还原已经备份的数据文件。 (1)、restore database 还原所有的数据文件。 (2)、restore tablespace 还原特定表空间的数据文件。 (3)、restore datafile 还原特定的数据文件。 (4)、restore controlfile 还原控制文件。 (5)、restore archivelog 还原归档日志文件。 2、recover 命令:当数据库需要应用归档日志文件恢复数据文件时,使用recover命令。使用该命令数据库系统会自动应用归档的日志文件。 (1)、recover database 恢复所有的数据文件。 (2)、recover tablespace 恢复特定表空间的数据文件。 (3)、recover datafile 恢复特定的数据文件。 restore 只是用备份来还原,recover是用archivelog或者online log 举例说明: 假设我时间点A,做了个备份,时间点B数据库挂了 restore database ;// 这个操作利用时间点A做的备份来还原,返回到时间点A recover database ;//这个操作利用archivelog and online log做recover,从时间点A,推进到时间点B restore 是转储也是還原被损坏文件(RMAN经常用) recover 是恢復 通過redo log & archive log恢復 restore 是还原,文件级的恢复 recovery是恢复,数据级的恢复 View Code
全库备份
RMAN> sql 'alter system archive log current'; RMAN> backup format='/u01/bak/f_%U' tag='full' database; RMAN> list backupset of database; RMAN> list backupset of controlfile; RMAN> list backupset of spfile; #列出指定内容的备份集 |
$rm /u01/oradata/* $rm /u01/db_1/dbs/spfileora10.ora #模拟故障 $ rman RMAN> connect target sys/oracle@ora10 RMAN> connect catalog rman/rman123; RMAN> set dbid 719569885 #这一步可选,非必须。 RMAN> startup nomount; RMAN> restore spfile from autobackup 或'/u01/bak/F_02PV661P_1_1'; RMAN> startup nomount force; #以恢复的spfile文件将数据库加载到 nomount状态。 RMAN> restore controlfile from autobackup或'/01/bak/F_01PV6602_1_1'; RMAN> alter database mount; RMAN> restore database; RMAN> recover database; #忽略报错。 RMAN> alter database open resetlogs; |
表空间备份
RMAN> backup tablespace users; RMAN> list backup of tablespace users; |
RMAN> shutdown immediate RMAN> startup mount; RMAN> restore tablespace users; RMAN> recover tablespace users; RMAN> alter database open; |
数据文件备份
RMAN> backup datafile 3; RMAN> list backup of datafile 3; |
RMAN> shutdown immediate RMAN> startup mount; RMAN> restore datafile 3; RMAN> recover datafile 3; RMAN> alter database open; |
控制文件备份
因为控制文件常需和数据文件一起同时进行恢复,故不常单独对控制文件进行备份,而一般在对数据文件进行备份时利用 autobackup参数对控制文件进行同步备份,以保证数据文件和控制文件的一致性。
RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON; RMAN> backup current controlfile; RMAN> list backup of controlfile; #单独备份控制文件。 #查看控制文件备份信息。 RMAN> backup database include current controlfile; #备库同时备份控制文件。 |
RMAN> startup nomount; RMAN> restore controlfile from autobackup; RMAN> alter database mount; RMAN> recover database; RMAN> alter database open resetlogs; |
SQL> create temporary tablespace temp tempfile 2 '/u01/oradata/ora10/temp01.dbf' reuse 3 autoextend off; |
归档文件的备份
不常单独对归档文件进行备份,而一般仅在对全库进行备份时对归档文件进行手工备份,以保证归档文件的一致性。
RMAN> backup archivelog all; #备份归档文件。 RMAN> list backup of archivelog all; #查看归档文件备份信息。 RMAN> backup database plus archivelog; #备份数据库同时备份归档文件。这条命令 在备份归档日志文件前会自动执行一次 alter system archive log current。 RMAN> backup archivelog all delete all input; #备份归档文件完成后,删除目标数据 库上的归档文件。 |
RMAN> restore archivelog all; #还原所有归档日志文件。 RMAN> restore archivelog from scn/sequence/time; #按条件还原归档日志文件。 |
举例:
run{ allocate channel d1 device type disk; backup as compressed backupset incremental level=0 format='/u01/bak/inc0_%d_%U' tag='inc0' channel=d1 database; sql "alter system switch logfile"; backup as compressed backupset format='/u01/bak/arch_%d_%U' tag='arch' channel=d1 archivelog all delete input; backup as compressed backupset format='/u01/bak/sctl.ctl' tag='ctl' channel=d1 current controlfile; release channel d1;} |
rman target sys/oracle@primary catalog rman/rman123\ msglog /home/oracle/rman.log\ #指定日志记录文件位置 #指定脚本文件位置 cmdfile=/home/oracle/rman.sh |
差异备份:
差异备份对更低级及同级备份之后所有变化的数据备份。
差异备份所需备份时间短,恢复时间长。
RMAN> backup incremental level 0 database; |
累积备份只对更低级备份之后所有变化的数据备份。
累积备份所需时间长,恢复时间短。
RMAN> backup incremental level 1 cumulative database; |
RMAN> restore database; |
6.1 概述
逻辑备份是将数据库中所有或指定对象导出数据库成为备份文件,或将备份文件数据导入数据库。
Oracle支持三种类型的输出:
表方式(T方式),将指定表的数据导出。
用户方式(U方式),将指定用户的所有对象及数据导出。
全库方式(Full方式),将数据库中的所有对象导出。
6.2 简单导出、导入数据
6.2.1简单导出
$ exp lty/lty123 Enter array fetch buffer size: 4096 > #选择缓冲区大小 Export file: expdat.dmp > lty.test.dmp #导出文件名 (2)U(sers), or (3)T(ables): (2)U > t Export table data (yes/no): yes > #选择导出类型 #是否导出表数据,若为no则只导出表结 构 Compress extents (yes/no): yes > #是否压缩 Table(T) or Partition(T:P) to be exported: (RETURN to quit) > test #要导出的表名或表分区 . . exporting table TEST 10 rows exported Table(T) or Partition(T:P) to be exported: (RETURN to quit) > #是否继续导出,退出则按回车 如果要导出全库或 system表空间则须以 sys用户登录,登录方式如下: $ exp \'sys/oracle as sysdba\' |
$ imp scott/tiger Import file: expdat.dmp > lty.test.dmp #选择要导入的文件名 Enter insert buffer size (minimum is 8192) 30720> #选择缓冲区大小 List contents of import file only (yes/no): no > #是否只列出导入数据文件的内容 Ignore create error due to object existence (yes/no): no > #是否忽略在对象创建时由于对象存在而发生的错误,若yes则导入数据到对象(无论对象是否存在, 若存在则继续在对象中添加数据,比如:如果表存在并且已有数据,则继续向表中插入导入的数据(约 束仍然起作用);若不存在,则先创建对象后再往里导入数据);若 no则对象存在就会跳过该对象的 导入。 Import grants (yes/no): yes > #是否导入权限。 Import table data (yes/no): yes > #是否导入表数据。 Import entire export file (yes/no): no > yes #是否导入整个文件的数据。 |
增量导入导出是一种常用的数据备份方法,他只能对整个数据库来实施,并且必须以system用户来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为 export.dmp,如果不用缺省文件名则须在命令行中指出。
6.3.1增量导出
包括三种类型:
“完全”增量导出(complete):导出整个数据库:
$ exp system/oracle inctype=complete file=full_101205.dmp |
$ exp system/manager inctype=incremental file=inc_101205.dmp |
$ exp system/manager inctype=cumulative file=cum_101205.dmp |
$ imp system/oracle inctype=restore full=y file=full_101205.dmp $ imp system/oracle inctype=restore full=y file=cum_101205.dmp $ imp system/oracle inctype=restore full=y file=inc_101205.dmp |
7.1 概述
Flashback是指将数据库恢复到过去某个时间点或 SCN点的状态,包括行级闪回,表级闪回和库级闪回。
表级闪回是利用回收站机(recyclebin)制。当一张表被 drop掉时,默认情况下并没有真正被清除,而是被放入 recyclebin里;行级闪回和库级闪回原理实际上是对数据库执行的操作做一个反操作,如:向表里插入一条数据,闪回时则删除这一条数据。如果是行级或表级闪回,这些反操作依据的是 undo表空间里未被覆盖的原始数据,如果是库级闪回,则依据的是flashback日志。
7.2 Flashback配置步骤
1).系统配置
SQL> alter system set undo_management='auto' scope=spfile; #重启生效。 SQL> alter system set undo_retention=9000; #配置闪回可回溯时间,默认900秒。 SQL> show parameter undo NAME TYPE VALUE ------------------------------------ undo_management string AUTO undo_retention integer 9000 undo_tablespace string UNDOTBS1 |
SQL> show parameter db_recover NAME TYPE VALUE ---------------------------------------- -------------------- --------------------------- db_recovery_file_dest string /u01/flash_recovery_area db_recovery_file_dest_size big integer 2G |
db_recovery_file_dest_size:该参数定义了flashback日志文件目录最大大小,默认 2G。
SQL> show parameter flash SQL> show parameter db_flash NAME TYPE VALUE ---------------------- ----------- --------- db_flashback_retention_target integer 1440 #定义闪回数据保存时间, 单位分钟,默认1天。 |
SQL> startup mount SQL> alter database archivelog; SQL> alter database flashback on; SQL> select name,log_mode,flashback_on from v$database; NAME LOG_MODE FLASHBACK_ON ---------------- ------------------- ---------------------------- ORA10 ARCHIVELOG YES |
$ps -ef | grep rvwr #rvwr进程定期将已变化的数据块写入flashback日志文件 $ls –l /u01/flash_recovery_area/ORA10/flashback #查看生成的flashback日志文件 |
SQL> grant connect,resource to lty; SQL> grant execute on dbms_flashback to lty; SQL> grant select any transaction to lty; |
1).创建测试表
SQL> connect lty/lty123 #sys用户不支持行级闪回。 SQL> create table test(id int); SQL> insert into test values (111); SQL> commit; SQL> insert into test values (222); SQL> commit; SQL> insert into test values (333); SQL> commit; SQL> update test set id=444 where id=333; SQL> commit; SQL> delete from test where id=222; SQL> commit; |
SQL> select versions_startscn, versions_endscn, versions_xid, versions_operation from test versions between timestamp minvalue and maxvalue; |
SQL>select versions_startscn,versions_endscn,versions_xid,versions_operation from test versions between scn 602840 and 602880; |
SQL>select undo_sql from flashback_transaction_query where xid='0400090003010000' |
SQL> alter table test enable row movement; |
4).闪回到指定 SCN号或时间点的状态
闪回到指定SCN号:
SQL>flashback table test to scn 602857; Flashback complete. SQL>select * from test; ID ------------------------ 111 222 333 SQL>rollback; Rollbak complete. SQL>select * from test; ID ------------------------ 111 222 333 |
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; SQL> flashback table test to timestamp to_date('2010-12-20 16:55:30','yyyy-mm-dd hh24-mi:ss'); |
1).建立测试表
SQL> create table test1(a int) tablespace users; SQL> insert into test1 values(1); SQL> insert into test1 values(2); SQL> insert into test1 values(3); SQL> commit; SQL> select * from test1; |
SQL> drop table test1; SQL> show recyclebin; SQL> flashback table test1 to before drop; SQL> select * from test1; |
其他常用操作:
SQL> drop table test1 purge; #永久删除一个表(不放入回收站) SQL> purge table test1; #清除回收站中指定表,如果回收站中有同名表,则清除先被drop掉的表。 SQL> purge recyclebin; #清空回收站 |
默认情况下回收站的同名表是先闪回后 drop掉的表:
SQL> show recyclebin; SQL> flashback table test to before drop; SQL> show recyclebin; |
SQL> show recyclebin; SQL> flashback table "BIN$l9GDQZr46nngQKjACkgNhw==$0" to before drop; SQL> show recyclebin; |
SQL> purge table "BIN$l9GDQZr46nngQKjACkgNhw==$0"; |
SQL> show recyclebin; ............... SQL> flashback table test to before drop; Flashback table test to before drop * ERROR at line 1: ORA-38312:oraginal name is used by an existing object SQL> flashback table test to before drop rname to test2; |
System表空间中的表不支持行级闪回,因为 system表空间有自己独立的 undo segment
且是 manul管理方式。Sys用户也无法使用行级闪回功能。
如果表空间空间不足时,对应表空间的回收站中的对象则按 FIFO规则自动被清除。
7.5 库级闪回操作步骤
1) 按前面提到的库级闪回配置,配置系统
2) 查询可闪回的最早时间和SCN号
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; SQL> select oldest_flashback_scn,oldest_flashback_time from v$flashback_database_log; |
库级闪回到指定时间点:
SQL> select * from test; B -------------------- 1 SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI;SS') ---------------------------------------- 2010-12-21 09:54:41 SQL> drop table test purge; SQL> shutdown immediate SQL> startup mount; Database mounted. SQL>flashback database to timetamp to_date('2010-12-21 09:54:41 ',''yyyy-mm-dd hh24:mi:ss''); Flashback complete. SQL> alter database open open resetlogs; Database altered. SQL> select * from test; B -------------------- 1 |
SQL> select * from test; B -------------------- 1 SQL> select current_scn from v$database; CURRENT_SCN ---------------------------------------- 642820 SQL> truncate table test; Table truncated. SQL> select * from test; no rows selected SQL> shutdown immediate SQL> startup mount; SQL> flashback database to scn 642820; Flashback complete. SQL> alter database open resetlogs; Database altered. SQL> slect * from test; B -------------------- 1 |
8.1 概述
Logminer是用于分析二进制重做日志文件和归档日志文件的工具。可从中分析出误操作执行的具体时间或 SCN号,以便恢复或进行操作审计、分析。
8.2 系统配置
SQL> alter database add supplemental log data; Database altered. SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database; SUPPLEME -------- YES SQL>execute dbms_logmnr_d.build(options=>dbms_logmnr_d.store_in_redo_logs); |
SQL> @?/rdbms/admin/dbmslmd.sql SQL> @?/rdbms/admin/dbmslm.sql |
SQL> execute dbms_logmnr_d.set_tablespace('users'); |
1) 将待分析的日志文件加入日志分析列表
添加当前日志文件:
SQL>execute dbms_logmnr.add_logfile(logfilename=>'/u01/oradata/ora10/redo02.log',options=>dbms_logmnr.new); SQL>select group#,sequence#,status from v$log; GROUP# SEQUENCE# STATUS ---------------------------- ---------------------------- --------------------------- 1 2 ACTIVE 2 4 CURRENT 3 3 ACTIVE SQL>execute dbms_logmnr.add_logfile(logfilename=>'/u01/oradata/ora10/redo01.dbf'); |
SQL>execute dbms_logmnr.add_logfile(logfilename=>'/u01/oradata/ora10/arch/ora10_1_2.a rc',options=>dbms_logmnr.addfile); |
SQL>execute dbms_logmnr.add_logfile(logfilename=>'/u01/oradata/ora10/arch/ora10_1_2.a rc',options=>dbms_logmnr.removefile); |
SQL>execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog); |
SQL>execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog,starttime=>to_timestamp('2010-12-21 11:00:00','yyyy-mm-dd hh24:mi:ss'),endtime=>to_timestamp('2010-12-21 11:00:30','yyyy-mm-ddhh24:mi:ss')); |
SQL> select username,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss'),sql_redo from v$logmnr_contents where table_name='TEST'; |
SQL> execute dbms_logmnr.end_logmnr; |
相关文章推荐
- Oracle技术之调整RMAN备份与恢复操作的性能(一)
- 一个通过数据库镜像实现SPS 2003门户快速备份与恢复的操作手册
- 在Linux下ORACLE异机数据库备份恢复操作
- Oracle®10g数据库备份和恢复快速入门指南
- Oracle 恢复误操作的数据,备份记录一下.
- Oracle技术之调整RMAN备份与恢复操作的性能(三)
- 一个通过数据库镜像实现SPS 2003门户快速备份与恢复的操作手册
- oracle 11g 手动备份和恢复(摘自官方手册)
- [置顶] [实验-视频过程]oracle热备份-整个数据库-备份和恢复操作演示
- [置顶] [实验-视频过程]oracle热备份-单个表空间-备份和恢复操作演示
- NBU对Oracle备份及恢复手册
- Oracle技术之调整RMAN备份与恢复操作的性能(二)
- Oracle常用备份与恢复操作
- 思科CallManager服务器备份与恢复操作手册
- oracle数据备份和恢复以及日志操作
- 在ORACLE中备份和恢复使用的动态视图和字典视图
- Oracle备份与恢复案例
- Oracle 备份与恢复
- C#操作ACCESS数据库(创建,压缩,备份,恢复)
- Oracle如何工作的Oracle备份与恢复