Nologging在提高性能的同时,会给恢复带来一定的影响。下面通过两个案例来说明它是怎么影响恢复的。
第一个案例要验证在先发生nologging操作,再备份数据文件的情况下,是否可以完全恢复数据。
[@more@] 1. 建表
CREATE TABLE SUK.PLOGGING
( A NUMBER,
B NUMBER
)
PARTITION BY LIST (A)
(PARTITION P1 VALUES (1) TABLESPACE SUK ,
PARTITION P2 VALUES (2) TABLESPACE SUK ) ;
CREATE TABLE SUK.PNOLOGGING
( C NUMBER,
D NUMBER
)
PARTITION BY LIST (C)
(PARTITION P1 VALUES (1) TABLESPACE SUK ,
PARTITION P2 VALUES (2) TABLESPACE SUK ) ;
2. 用普通的方式写入数据
SQL> insert into plogging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> insert into pnologging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> commit;
Commit complete
3. 对其中一个表用普通方式写入数据,另一个表用nologging方式写入数据
SQL> insert into plogging select 1,1 from dba_tables;
963 rows inserted
SQL> insert /*+ append */ into pnologging select 1,1 from dba_tables;
963 rows inserted
SQL> commit;
Commit complete
4. 此时备份表所在的表空间
RMAN> backup tablespace suk;
启动 backup 于 21-11月-10
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=135 devtype=DISK
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00007 name=E:ORACLEPRODUCT10.2.0ORADATASUK.DBF
通道 ORA_DISK_1: 正在启动段 1 于 21-11月-10
通道 ORA_DISK_1: 已完成段 1 于 21-11月-10
段句柄=E:ORACLEPRODUCT10.2.0DB_1DATABASECLTJEFM_1_1 标记=TAG20101121T2206
46 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:07
完成 backup 于 21-11月-10
5. 备份完成后继续用普通方式往表写入数据
SQL> insert into plogging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> insert into pnologging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> commit;
Commit complete
SQL> delete from test where rownum<=1000;
1000 rows deleted
SQL> commit;
Commit complete
SQL> select count(1) from test;
COUNT(1)
----------
9000
SQL> select count(1) from plogging;
COUNT(1)
----------
21963
SQL> select count(1) from pnologging;
COUNT(1)
----------
21963
6. 此时模拟数据库故障,恢复表空间suk
RMAN> restore tablespace suk;
启动 restore 于 21-11月-10
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00007恢复到E:ORACLEPRODUCT10.2.0ORADATASUK.DBF
通道 ORA_DISK_1: 正在读取备份段 E:ORACLEPRODUCT10.2.0DB_1DATABASECLTJEFM_
1_1
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:ORACLEPRODUCT10.2.0DB_1DATABASECLTJEFM_1_1 标记 = TAG20101121T
220646
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:07
完成 restore 于 21-11月-10
RMAN> recover tablespace suk;
启动 recover 于 21-11月-10
使用通道 ORA_DISK_1
正在开始介质的恢复
介质恢复完成, 用时: 00:00:04
7. 验证数据
SQL> select count(1) from test;
COUNT(1)
----------
9000
SQL> select count(1) from plogging;
COUNT(1)
----------
21963
SQL> select count(1) from pnologging;
COUNT(1)
----------
21963
数据已经得到完全恢复。
结论:
一个表,发生nologging操作后再备份,且后续无nologging操作,则基于nologging后的备份可以完全恢复该表的数据。
第一个案例要验证在先发生nologging操作,再备份数据文件的情况下,是否可以完全恢复数据。
[@more@] 1. 建表
CREATE TABLE SUK.PLOGGING
( A NUMBER,
B NUMBER
)
PARTITION BY LIST (A)
(PARTITION P1 VALUES (1) TABLESPACE SUK ,
PARTITION P2 VALUES (2) TABLESPACE SUK ) ;
CREATE TABLE SUK.PNOLOGGING
( C NUMBER,
D NUMBER
)
PARTITION BY LIST (C)
(PARTITION P1 VALUES (1) TABLESPACE SUK ,
PARTITION P2 VALUES (2) TABLESPACE SUK ) ;
2. 用普通的方式写入数据
SQL> insert into plogging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> insert into pnologging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> commit;
Commit complete
3. 对其中一个表用普通方式写入数据,另一个表用nologging方式写入数据
SQL> insert into plogging select 1,1 from dba_tables;
963 rows inserted
SQL> insert /*+ append */ into pnologging select 1,1 from dba_tables;
963 rows inserted
SQL> commit;
Commit complete
4. 此时备份表所在的表空间
RMAN> backup tablespace suk;
启动 backup 于 21-11月-10
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=135 devtype=DISK
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00007 name=E:ORACLEPRODUCT10.2.0ORADATASUK.DBF
通道 ORA_DISK_1: 正在启动段 1 于 21-11月-10
通道 ORA_DISK_1: 已完成段 1 于 21-11月-10
段句柄=E:ORACLEPRODUCT10.2.0DB_1DATABASECLTJEFM_1_1 标记=TAG20101121T2206
46 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:07
完成 backup 于 21-11月-10
5. 备份完成后继续用普通方式往表写入数据
SQL> insert into plogging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> insert into pnologging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> commit;
Commit complete
SQL> delete from test where rownum<=1000;
1000 rows deleted
SQL> commit;
Commit complete
SQL> select count(1) from test;
COUNT(1)
----------
9000
SQL> select count(1) from plogging;
COUNT(1)
----------
21963
SQL> select count(1) from pnologging;
COUNT(1)
----------
21963
6. 此时模拟数据库故障,恢复表空间suk
RMAN> restore tablespace suk;
启动 restore 于 21-11月-10
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00007恢复到E:ORACLEPRODUCT10.2.0ORADATASUK.DBF
通道 ORA_DISK_1: 正在读取备份段 E:ORACLEPRODUCT10.2.0DB_1DATABASECLTJEFM_
1_1
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:ORACLEPRODUCT10.2.0DB_1DATABASECLTJEFM_1_1 标记 = TAG20101121T
220646
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:07
完成 restore 于 21-11月-10
RMAN> recover tablespace suk;
启动 recover 于 21-11月-10
使用通道 ORA_DISK_1
正在开始介质的恢复
介质恢复完成, 用时: 00:00:04
7. 验证数据
SQL> select count(1) from test;
COUNT(1)
----------
9000
SQL> select count(1) from plogging;
COUNT(1)
----------
21963
SQL> select count(1) from pnologging;
COUNT(1)
----------
21963
数据已经得到完全恢复。
结论:
一个表,发生nologging操作后再备份,且后续无nologging操作,则基于nologging后的备份可以完全恢复该表的数据。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/231499/viewspace-1041838/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/231499/viewspace-1041838/