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

Oracle 培训笔记 9.3 归档模式备份恢复

2011-09-04 22:37 411 查看
1、数据库置归档模式,设置归档路径

1.1 查询归档状态

SQL> select log_mode from v$database;

LOG_MODE

------------

NOARCHIVELOG

SQL> archive log list;

数据库日志模式 非存档模式

自动存档 禁用

存档终点 USE_DB_RECOVERY_FILE_DEST

最早的联机日志序列 9

当前日志序列 11

1.2 置归档模式

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount

ORACLE 例程已经启动。

Total System Global Area 251658240 bytes

Fixed Size 1248356 bytes

Variable Size 79692700 bytes

Database Buffers 163577856 bytes

Redo Buffers 7139328 bytes

数据库装载完毕。

SQL> alter database archivelog;

SQL> alter database open;

设置非归档:alter database noarchivelog;

1.3 设置归档路径

SQL> show parameter log_archive_dest_

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

log_archive_dest_1 string

log_archive_dest_10 string

log_archive_dest_2 string

log_archive_dest_3 string

log_archive_dest_4 string

log_archive_dest_5 string

log_archive_dest_6 string

log_archive_dest_7 string

log_archive_dest_8 string

log_archive_dest_9 string

SQL> show parameter log_archive_min_succeed_dest

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

log_archive_min_succeed_dest integer 1

SQL> show parameter format

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

log_archive_format string ARC%S_%R.%T

SQL> alter system set log_archive_format='arc%S_%R_%d.%T' scope=spfile;

系统已更改。

设置归档路径

alter system set log_archive_dest_1='location=e:\arc1 mandatory';

alter system set log_archive_dest_2='location=e:\arc2 mandatory';

alter system set log_archive_dest_3='location=e:\arc3 optional';

alter system switch logfile;

使用闪回恢复区

alter system set log_archive_dest_1='';

alter system set log_archive_dest_2='';

alter system set log_archive_dest_3='';

alter system set log_archive_dest_10='location=USE_DB_RECOVERY_FILE_DEST';

1.4 备份数据库

冷备份:关闭数据库,备份数据文件、控制文件、参数文件

2、备份

冷备份

热备份

alter tablespace xxx begin backup;

物理拷贝

alter tablespace xxx end backup;

alter database begin backup;

物理拷贝

alter database end backup;

alter tablespace users begin backup;

3、完全恢复

3.1 模拟数据变化,切换日志

insert into t01 values(40);

commit;

alter system switch logfile;

insert into t01 values(50);

commit;

alter system switch logfile;

insert into t01 values(60);

commit;

alter system switch logfile;

insert into t01 values(70);

commit;

alter system switch logfile;

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

删除数据文件users01.dbf

SQL> startup

ORACLE 例程已经启动。

Total System Global Area 251658240 bytes

Fixed Size 1248356 bytes

Variable Size 79692700 bytes

Database Buffers 163577856 bytes

Redo Buffers 7139328 bytes

数据库装载完毕。

ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件

ORA-01110: 数据文件 4: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\MYDB\USERS01.DBF'

还原数据文件user01.dbf

SQL> select * from v$recover_file;

FILE# ONLINE ONLINE_ ERROR CHANGE# TIME

---------- ------- ------- ----------------------------------------------------------------- ---------- --------------

4 ONLINE ONLINE 213083 03-9月 -11

SQL> select * from v$recovery_log;

THREAD# SEQUENCE# TIME

---------- ---------- --------------

ARCHIVE_NAME

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1 15 03-9月 -11

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYDB\ARCHIVELOG\2011_09_03\O1_MF_1_15_763HHZ1G_.ARC

1 16 03-9月 -11

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYDB\ARCHIVELOG\2011_09_03\O1_MF_1_16_763HHZKL_.ARC

SQL> recover datafile 4;

ORA-00279: 更改 213083 (在 09/03/2011 13:39:09 生成) 对于线程 1 是必需的

ORA-00289: 建议: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYDB\ARCHIVELOG\2011_09_03\O1_MF_1_15_%U_.ARC

ORA-00280: 更改 213083 (用于线程 1) 在序列 #15 中

指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: 无法打开归档日志 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYDB\ARCHIVELOG\2011_09_03\O1_MF_1_15_763HHZ1G_.ARC'

ORA-27041: 无法打开文件

OSD-04002: 无法打开文件

O/S-Error: (OS 2) 系统找不到指定的文件。

SQL>

SQL> recover datafile 4;

ORA-00279: 更改 213083 (在 09/03/2011 13:39:09 生成) 对于线程 1 是必需的

ORA-00289: 建议: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYDB\ARCHIVELOG\2011_09_03\O1_MF_1_15_%U_.ARC

ORA-00280: 更改 213083 (用于线程 1) 在序列 #15 中

指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

d:\1_15_763HHZ1G_.ARC

ORA-00279: 更改 213171 (在 09/03/2011 13:41:18 生成) 对于线程 1 是必需的

ORA-00289: 建议: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYDB\ARCHIVELOG\2011_09_03\O1_MF_1_16_%U_.ARC

ORA-00280: 更改 213171 (用于线程 1) 在序列 #16 中

ORA-00278: 此恢复不再需要日志文件 'd:\1_15_763HHZ1G_.ARC'

指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

d:\O1_MF_1_16_763HHZKL_.ARC

已应用的日志。

完成介质恢复。

SQL> alter database open;

数据库已更改。

3.2 在线恢复数据文件

alter tablespace users offline;

还原数据文件

恢复数据文件

alter tablespace users online;

system、undo表空间必须在mounted状态恢复

3.3 闪回恢复区监控

select * from v$recovery_file_dest;

select * from v$flash_recovery_area_usage;

3.4 控制文件损坏恢复

数据库发生结构性变化时及时备份。(表空间、数据文件增删)

SQL> alter database backup controlfile to 'd:\control.ctl';

1)部分控制文件损坏

复制存在的文件,再打开数据库

2)控制文件全部损坏

情况1:有备份

关闭数据库

删除所有控制文件

还原控制文件

启动数据库到mounted状态

恢复数据库 recover database using backup controlfile;

SQL> recover database using backup controlfile;

ORA-00279: change 205641 generated at 09/03/2011 11:52:37 needed for thread 1

ORA-00289: suggestion :

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYDB\ARCHIVELOG\2011_09_03\O1_MF_1_

15_%U_.ARC

ORA-00280: change 205641 for thread 1 is in sequence #15

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

d:\1_15_763HHZ1G_.ARC

ORA-00279: change 213171 generated at 09/03/2011 13:41:18 needed for thread 1

ORA-00289: suggestion :

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYDB\ARCHIVELOG\2011_09_03\O1_MF_1_

16_%U_.ARC

ORA-00280: change 213171 for thread 1 is in sequence #16

ORA-00278: log file 'd:\1_15_763HHZ1G_.ARC' no longer needed for this recovery

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

d:\O1_MF_1_16_763HHZKL_.ARC

ORA-00279: change 213175 generated at 09/03/2011 13:41:19 needed for thread 1

ORA-00289: suggestion :

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYDB\ARCHIVELOG\2011_09_03\O1_MF_1_

17_%U_.ARC

ORA-00280: change 213175 for thread 1 is in sequence #17

ORA-00278: log file 'd:\O1_MF_1_16_763HHZKL_.ARC' no longer needed for this

recovery

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

E:\oracle\product\10.2.0\oradata\mydb\redo02.log

ORA-00279: change 213180 generated at 09/03/2011 13:41:23 needed for thread 1

ORA-00289: suggestion :

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYDB\ARCHIVELOG\2011_09_03\O1_MF_1_

18_%U_.ARC

ORA-00280: change 213180 for thread 1 is in sequence #18

ORA-00278: log file 'E:\oracle\product\10.2.0\oradata\mydb\redo02.log' no

longer needed for this recovery

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

E:\oracle\product\10.2.0\oradata\mydb\redo03.log

ORA-00279: change 213184 generated at 09/03/2011 13:41:24 needed for thread 1

ORA-00289: suggestion :

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYDB\ARCHIVELOG\2011_09_03\O1_MF_1_

19_%U_.ARC

ORA-00280: change 213184 for thread 1 is in sequence #19

ORA-00278: log file 'E:\oracle\product\10.2.0\oradata\mydb\redo03.log' no

longer needed for this recovery

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

E:\oracle\product\10.2.0\oradata\mydb\redo01.log

Log applied.

Media recovery complete.

打开数据库 alter database open resetlogs;

情况2:没有备份

手动编写控制文件创建脚本(alter database backup controlfile to trace)

CREATE CONTROLFILE REUSE DATABASE "MYDB" RESETLOGS ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\MYDB\REDO01.LOG' SIZE 50M,

GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\MYDB\REDO02.LOG' SIZE 50M,

GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\MYDB\REDO03.LOG' SIZE 50M

-- STANDBY LOGFILE

DATAFILE

'E:\ORACLE\PRODUCT\10.2.0\ORADATA\MYDB\SYSTEM01.DBF',

'E:\ORACLE\PRODUCT\10.2.0\ORADATA\MYDB\UNDOTBS01.DBF',

'E:\ORACLE\PRODUCT\10.2.0\ORADATA\MYDB\SYSAUX01.DBF',

'E:\ORACLE\PRODUCT\10.2.0\ORADATA\MYDB\USERS01.DBF'

CHARACTER SET ZHS16GBK

;

启动数据库到nomount状态

执行上面的创建脚本

打开数据库 alter database open resetlogs;

3.5 日志文件损坏恢复

SQL> shutdown immediate

删除所有在线日志

SQL> startup

ORACLE instance started.

Total System Global Area 251658240 bytes

Fixed Size 1248356 bytes

Variable Size 79692700 bytes

Database Buffers 163577856 bytes

Redo Buffers 7139328 bytes

Database mounted.

ORA-00313: open failed for members of log group 1 of thread 1

ORA-00312: online log 1 thread 1:

'E:\ORACLE\PRODUCT\10.2.0\ORADATA\MYDB\REDO01.LOG'

清非当前日志组,重建

SQL> alter database clear logfile group 1;

SQL> alter database clear logfile group 3;

如果非当前日志组没有完成归档,使用

SQL> alter database clear unarchived logfile group 1;

如果是current状态日志,上述方法不能清除

SQL> recover database until cancel;

打开数据库

SQL> alter database open resetlogs;

recover database until cancel;

(在线日志都损坏,做数据库恢复但是归档日志部分丢失)

4、不完全恢复

4.1 关闭数据库,做数据库全备份

SQL> shutdown immediate

全备份数据库

SQL> startup

4.2 模拟变化,做不完全恢复

SQL> select * from t01;

ID

----------

10

20

30

40

50

60

70

7 rows selected.

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

224410

SQL> insert into t01 values(80);

1 row created.

SQL> commit;

Commit complete.

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

224423

SQL> insert into t01 values(90);

1 row created.

SQL> commit;

Commit complete.

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

224431

SQL> shutdown immediate

还原所有的数据文件

SQL> startup mount

SQL> recover database until change 224423;

基于时间: recover database until time '2011-09-03 15:55:10';

SQL> alter database open resetlogs;

Database altered.

SQL> select * from t01;

ID

----------

10

20

30

40

50

60

70

80

4.3 借助logmnr,实现不完全恢复

参数设置

shutdown immediate

startup mount

alter database force logging;

alter database add supplemental log data;

alter system set utl_file_dir='d:\logmnr' scope=spfile;

shutdown immediate;

startup;

备份数据库

shutdown immediate;

全备份

startup;

模拟变化

insert into t01 values(90);

commit;

alter system switch logfile;

insert into t01 values(100);

commit;

alter system switch logfile;

insert into t01 values(110);

commit;

alter system switch logfile;

insert into t01 values(120);

commit;

alter system switch logfile;

insert into t01 values(130);

commit;

alter system switch logfile;

恢复到数据110前,借助logmnr查

--生成数据字典

begin

dbms_logmnr_d.build(dictionary_filename =>'dict.ora',dictionary_location =>'d:\logmnr');

end;

--增加要挖掘的日志

begin

dbms_logmnr.add_logfile(LogFileName => 'd:\O1_MF_1_2_763QZ2X9_.ARC',Options =>dbms_logmnr.NEW);

dbms_logmnr.add_logfile(LogFileName => 'd:\O1_MF_1_3_763QZ43F_.ARC',Options =>dbms_logmnr.ADDFILE);

end;

select * from v$logmnr_logs;

--挖掘日志

begin

dbms_logmnr.start_logmnr(DictFileName =>'d:\logmnr\dict.ora');

end;

--结束

begin

dbms_logmnr.end_logmnr;

end;

--查看

select * from v$logmnr_contents where table_name='T01'

228625

做不完全恢复

shutdown immediate

还原所有数据文件

startup mount

recover database until change 228625;

alter database open resetlogs;

【注意】每次resetlogs后必须备份数据库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: