在用户管理的备份(一)中(详见:Oracle—用户管理的备份)对用户管理备份几种情况进行了说明;接下来说明几种特别情况和DBverify的使用。
一.如果在表空间在备份模式下,主机发生了异常关闭,会出现什么情况?
打开第一个会话窗口,以sys用户登录,把表空间users置于备份模式。
SQL> alter tablespace users begin backup;
Tablespace altered.
打开第二个会话窗口,以sys用户登录,用shutdown abort命令模拟断电。
SQL> shutdown abort;
ORACLE instance shut down.
在第一个会话窗口,重新启动。
SQL> startup
ORACLE instance started.
Total System Global Area 146472960 bytes
Fixed Size 1335080 bytes
Variable Size 92274904 bytes
Database Buffers 50331648 bytes
Redo Buffers 2531328 bytes
Database mounted.
ORA-10873: file 4 needs to be either taken out of backup mode or media
recovered
ORA-01110: data file 4: '/u01/oradata/wilson/users01.dbf'
可以看到数据库打不开,只能处于mount状态;
解决办法:
SQL> select * from v$backup;(v$backup可以看到哪些文件置于备份状态)
FILE# STATUS CHANGE# TIME
---------- ------------------ --------- ---------
1 UNKNOWN ERROR 2794785 23-AUG-13
2 UNKNOWN ERROR 2794785 23-AUG-13
3 UNKNOWN ERROR 2794785 23-AUG-13
4 ACTIVE 2805598 23-AUG-13
5 NOT ACTIVE 2794785 23-AUG-13
6 NOT ACTIVE 2794785 23-AUG-13
7 NOT ACTIVE 2794785 23-AUG-13
8 NOT ACTIVE 2794785 23-AUG-13
9 NOT ACTIVE 2794785 23-AUG-13
10 NOT ACTIVE 2794785 23-AUG-13
11 NOT ACTIVE 2794785 23-AUG-13
11 rows selected.
可以看到文件4是active的,它处于备份状态,为了正常启动,必须关闭备份状态;
SQL> alter database end backup;
Database altered.
这样就可以把所有表空间的备份状态关闭。
也可以用alter database datafile 4 end backup;
再查看视图,可以看到所有的文件已经在非备份状态了;
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ---------
1 NOT ACTIVE 2794785 23-AUG-13
2 NOT ACTIVE 2794785 23-AUG-13
3 NOT ACTIVE 2794785 23-AUG-13
4 NOT ACTIVE 2805598 23-AUG-13
5 NOT ACTIVE 2794785 23-AUG-13
6 NOT ACTIVE 2794785 23-AUG-13
7 NOT ACTIVE 2794785 23-AUG-13
8 NOT ACTIVE 2794785 23-AUG-13
9 NOT ACTIVE 2794785 23-AUG-13
10 NOT ACTIVE 2794785 23-AUG-13
11 NOT ACTIVE 2794785 23-AUG-13
11 rows selected.
打开数据库,
SQL> alter database open;
Database altered.
二.只读表空间备份
把example表空间改为只读表空间,
SQL> alter tablespace example read only;
Tablespace altered.
然后用!cp命令把它复制到别的地方即可,但是有个问题就是在把example改为只读表空间时,控制文件发生了改变,所以要备份控制文件!
1.只读表空间只要备份一次就可以了,因为它不能被修改。
2.当把只读表空间改为可读可写表空间时,是否一定要备份?不用备份,保存好归档日志文件即可,不过最好备份。
3.当控制文件发生改变时必须备份。
三.当大量的数据导入或者导出时,把数据库置于nologging下,这样就尽可能的不产生redo log信息,提高性能,等到操作完成后备份一下即可。
四.DBverify
1. 它可以用来检查数据文件的块是否损坏,无论是数据文件是在online状态还是off状态或者是备份的数据文件都可以检查,不能检查联机重做日志文件和控制文件的块。
在操作系统下,输入dbv可以看到有关参数,
[oracle@oracle11g ~]$ dbv
DBVERIFY: Release 11.2.0.1.0 - Production on Fri Aug 23 12:32:17 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Keyword Description (Default)
------------ ------------------ ----------------------
FILE File to Verify (NONE)
START Start Block (First Block of File)
END End Block (Last Block of File)
BLOCKSIZE Logical Block Size (8192)
LOGFILE Output Log (NONE)
FEEDBACK Display Progress (0)
PARFILE Parameter File (NONE)
USERID Username/Password (NONE)
SEGMENT_ID Segment ID (tsn.relfile.block) (NONE)
HIGH_SCN Highest Block SCN To Verify (NONE)
(scn_wrap.scn_base OR scn)
检查数据文件system01.dbf,feedback=100表示检查每100个数据块就打上一个点;默认情况下,检查从一个块开始到最后一个结束;使用logfile可以把检查的结果信息放到一个文件中。 如下:
如[oracle@oracle11g wilson]$ dbv file=system01.dbf feedback=100
DBVERIFY: Release 11.2.0.1.0 - Production on Fri Aug 23 12:37:43 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : FILE = /u01/oradata/wilson/system01.dbf
................................................................................
................................................................................
.
DBVERIFY - Verification complete
Total Pages Examined : 97280
Total Pages Processed (Data) : 66872
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 12537
Total Pages Failing (Index): 0
Total Pages Processed (Other): 3343
Total Pages Processed (Seg) : 1
Total Pages Failing (Seg) : 0
Total Pages Empty : 14528
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 2828302 (0.2828302)
2.它也可以来用来检查数据文件的一个表或者索引。
在p1用户下有一张表fruit,
SQL> select * from p1.fruit;
NAME
--------------------------------
two apple
在表sys_dba_segs中找到 Segment ID (tsn.relfile.block) 的数值;
SQL> select segment_name,tablespace_id,header_file,header_block from sys_dba_segs where owner='P1';
SEGMENT_NAME TABLESPACE_ID HEADER_FILE HEADER_BLOCK
--------------- --------------- - ----------- ------------
FRUIT 4 4 810
然后在操作系统下,使用查到的数值,就可以查到某一个表了。
[oracle@oracle11g ~]$ dbv userid=p1/p1_12345 segment_id=4.4.810
DBVERIFY: Release 11.2.0.1.0 - Production on Fri Aug 23 13:25:50 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : SEGMENT_ID = 4.4.810
DBVERIFY - Verification complete
Total Pages Examined : 8
Total Pages Processed (Data) : 5
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing (Index): 0
Total Pages Processed (Other): 2
Total Pages Processed (Seg) : 1
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 2798211 (0.2798211)