您的位置:首页 > 数据库 > Oracle

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

全库备份

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;

5.5.2表空间备份与恢复

表空间备份

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;

5.5.3表空间备份与恢复

数据文件备份

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;

5.5.4控制文件备份与恢复

控制文件备份

  因为控制文件常需和数据文件一起同时进行恢复,故不常单独对控制文件进行备份,而一般在对数据文件进行备份时利用 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;

  最后重建临时表空间(对于 10gR2以后版本不需重建):

SQL> create temporary tablespace temp tempfile

2 '/u01/oradata/ora10/temp01.dbf' reuse

3 autoextend off;

5.5.5归档文件备份与恢复

归档文件的备份

  不常单独对归档文件进行备份,而一般仅在对全库进行备份时对归档文件进行手工备份,以保证归档文件的一致性。

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; #按条件还原归档日志文件。

5.5.6RMAN脚本

  举例:

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脚本:

rman target sys/oracle@primary catalog rman/rman123\

msglog /home/oracle/rman.log\

#指定日志记录文件位置

#指定脚本文件位置

cmdfile=/home/oracle/rman.sh

5.5.7 RMAN增量备份与恢复

差异备份:

  差异备份对更低级及同级备份之后所有变化的数据备份。

  差异备份所需备份时间短,恢复时间长。

RMAN> backup incremental level 0 database;

累积增量备份:

  累积备份只对更低级备份之后所有变化的数据备份。

  累积备份所需时间长,恢复时间短。

RMAN> backup incremental level 1 cumulative database;

还原:

RMAN> restore database;

6 逻辑备份(export/import

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\'

6.2.2简单导入

$ 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 #是否导入整个文件的数据。

6.3 增量导出导入

  增量导入导出是一种常用的数据备份方法,他只能对整个数据库来实施,并且必须以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

6.3.2导入

$ 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 Flashback

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:该参数定义flashback日志文件存放目录。

  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日志文件

2).授权给用户允许其进行闪回查询

SQL> grant connect,resource to lty;

SQL> grant execute on dbms_flashback to lty;

SQL> grant select any transaction to lty;

7.3 行级闪回操作步骤

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;

2).闪回查询对 test表所做的所有更改所对应的 SCN点

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语句:

SQL>select undo_sql from flashback_transaction_query where xid='0400090003010000'

3).test表进行 row movement

SQL> alter table test enable row movement;

  所有表中插入一行即被分配一永久 rowid,闪回时需对已删除行进行重插入处理,即需为被删行分配新的 rowid,故需允许进行 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');

7.4 表级闪回操作步骤

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;

2).删除测试表并闪回

SQL> drop table test1;

SQL> show recyclebin;

SQL> flashback table test1 to before drop;

SQL> select * from test1;

3).其他操作

其他常用操作:

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;

3) 库级闪回到指定时间点或 SCN号状态

库级闪回到指定时间点:

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

库级闪回到指定SCN号状态:

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 LogMiner

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

  建议使用非 system表空间来存放 logminer信息:

SQL> execute dbms_logmnr_d.set_tablespace('users');

8.3 操作步骤

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);

2) 启动logminer 开始分析

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'));

3) 查看分析结果

SQL> select username,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss'),sql_redo from v$logmnr_contents where table_name='TEST';

4) 结束 logminer分析

SQL> execute dbms_logmnr.end_logmnr;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: