[20160718]关于dbv使用问题.txt
1.环境:
SYS@book> @ &r/ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
$ dbv help=y
DBVERIFY: Release 11.2.0.4.0 - Production on Tue Jul 19 08:40:16 2016
Copyright (c) 1982, 2011, 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)
--如果要检查asm里面的数据文件必须要使用USERID参数,偶然发现一个特殊的情况,输入口令错误一点问题都没有。
$ dbv file=+g0/xxxxx/DATAFILE/USERS.14423.772746091
DBVERIFY: Release 10.2.0.4.0 - Production on Tue Jul 19 08:42:37 2016
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBV-00008: USERID must be specified for OSM files
$ dbv file=+g0/xxxxx/DATAFILE/USERS.14423.772746091 userid=aaaaaaa/aaaaaaaaaaaaaaaa
DBVERIFY: Release 10.2.0.4.0 - Production on Tue Jul 19 08:43:50 2016
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBVERIFY - Verification starting : FILE = +g0/xxxxx/DATAFILE/USERS.14423.772746091
DBVERIFY - Verification complete
Total Pages Examined : 8192
Total Pages Processed (Data) : 28
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 5
Total Pages Failing (Index): 0
Total Pages Processed (Other): 8142
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 17
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Highest block SCN : 0 (0.0)
---//很明显我没有这个用户。
2.分析:
$ strace -f -e open -o /tmp/aa dbv file=+g0/xxxxx/DATAFILE/USERS.14423.772746091 userid=aaaaaaa/aaaaaaaaaaaaaaaa
--你可以发现如下内容:
667 open("/u01/app/oracle/product/10.2.0/rac_db/dbs/orapwxxxxx", O_RDONLY) = 11
667 open("/u01/app/oracle/product/10.2.0/rac_db/dbs/orapwxxxxx", O_RDWR|O_SYNC) = 11
--实际上使用中打开口令文件。但是我改名口令文件也一样可以登录。实际上即使没有口令文件,在本机可以使用sqlplus / as sysdba登录。
--仔细检查可以发现还会打开类似的文件:
735 open("/u01/app/oracle/admin/xxxxx/adump/ora_735.aud", O_RDWR|O_CREAT|O_APPEND, 0660) = 11
--检查1个大文件看看:
$ dbv file=+g0/xxxxx/DATAFILE/xxxxx_32K.11485.772749347 BLOCKSIZE=32768 userid=aaa/aaa
..
$ pstree -p
...
|-tmux(32731)-+-bash(306)---pstree(956)
| `-bash(867)---dbv(948)---oracle(949)
--可以发现还启动oracle进程。
$ tail -f /u01/app/oracle/admin/xxxxx/adump/ora_949.aud
Tue Jul 19 09:05:37 2016
LENGTH : '137'
ACTION :[7] 'CONNECT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/1'
STATUS:[1] '0'
--从这里可以发现实际上dbv的连接用户是sys。
SELECT b.spid
,a.username
,a.program
,a.sql_id
,a.module
FROM v$session a, v$process b
WHERE spid = 949 AND a.paddr = b.addr
SYS@xxxxx> /
SPID USERNAME PROGRAM SQL_ID MODULE
------ -------------------- ------------------------------ ------------- ------------------------------
1089 SYS dbverify@xxxxxdg2 (TNS V1-V3) c4g0sp9sau3g1 dbverify@xxxxxdg2 (TNS V1-V3)
SYS@xxxxx> @ &r/sqlid c4g0sp9sau3g1
SQL_ID SQLTEXT
------------- --------------------------------------------------------------------------
c4g0sp9sau3g1 begin sys.dbms_dbverify.dbv2(:file, :start, :end, :blkz, :o, :e, :s); end;
--从这个可以看出你还可以使用包sys.dbms_dbverify.dbv2来验证数据文件的完整性。
--如果你使用dbv检查数据文件。
$ dbv file=/u01/app/oracle/oradata/dbcn1/datafile/portal_his16.dbf
...
$ pstree
....
|-tmux(44384)-+-bash(44385)---dbv(45214)
| |-bash(44424)---pstree(45219)
| `-bash(44462)
--可以发现这里dbv就没有连接数据库实例。
SYS@book> @ &r/desc_proc sys dbms_dbverify dbv2
INPUT OWNER PACKAGE_NAME OBJECT_NAME
sample : @desc_proc sys dbms_stats gather_%_stats
OWNER PACKAGE_NAME OBJECT_NAME SEQUENCE ARGUMENT_NAME DATA_TYPE IN_OUT DATA_TYPE DEFAULTED
---------- -------------------- ----------- -------- -------------------- -------------------- --------- -------------------- ----------
SYS DBMS_DBVERIFY DBV2 1 FNAME VARCHAR2 IN VARCHAR2 N
2 START_BLK BINARY_INTEGER IN BINARY_INTEGER N
3 END_BLK BINARY_INTEGER IN BINARY_INTEGER N
4 BLOCKSIZE BINARY_INTEGER IN BINARY_INTEGER N
5 OUTPUT VARCHAR2 IN/OUT VARCHAR2 N
6 ERROR VARCHAR2 IN/OUT VARCHAR2 N
7 STATS VARCHAR2 IN/OUT VARCHAR2 N
7 rows selected.