[20161003]如何知道数据库的dbid.txt
--别人问的问题,实际上数据恢复我自己都很少需要知道它。实际上方法很多。
--自己做一些测试。
1.环境:
SYS@test> select * from v$version where rownum=1;
BANNER CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0
2.方法1:
--如果能找到控制文件,启动到mount模式。
--控制文件其实无处不在,如果你做rman备份。
SYS@test> startup mount
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size 2402152 bytes
Variable Size 788531352 bytes
Database Buffers 452984832 bytes
Redo Buffers 8744960 bytes
Database mounted.
D:\tools\rlwrap>rman target /
rman target /
Recovery Manager: Release 12.1.0.1.0 - Production on Tue Oct 4 21:02:45 2016
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
connected to target database: TEST (DBID=2119378787, not open)
RMAN> show SNAPSHOT CONTROLFILE name;
RMAN configuration parameters for database with db_unique_name TEST are:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:\APP\ORACLE\PRODUCT\12.1.0\DBHOME_1\DATABASE\SNCFTEST.ORA'; # default
--也可以执行如下转储:
SYS@test> alter session set events 'immediate trace name controlf level 3';
Session altered.
3.方法2:
--如果你没有控制文件,你做过rman备份,看看备份时留下的日志,其实也能找到dbid。
4.方法3:
--找一个数据文件当然最好system数据文件,做1个转储就能知道dbid。
--实际上你可以把这个文件拷贝到别的机器,使用别的机器做转储:
SYS@test> alter system dump datafile 'D:\app\oracle\oradata\test\SYSTEM01.DBF' block 1 ;
System altered.
--//注意在mount下,datfile后不能跟数字,而是使用文件名。
--//检查转储:
Start dump data block from file D:\APP\ORACLE\ORADATA\TEST\SYSTEM01.DBF minblk 1 maxblk 1
V10 STYLE FILE HEADER:
Compatibility Vsn = 202375168=0xc100000
Db ID=2119378787=0x7e532763, Db Name='TEST'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Activation ID=0=0x0
Control Seq=266950=0x412c6, File size=112640=0x1b800
File Number=1, Blksiz=8192, File Type=3 DATA
Dump all the blocks in range:
End dump data block from file D:\APP\ORACLE\ORADATA\TEST\SYSTEM01.DBF minblk 2 maxblk 1
5.方法4,使用bbed:
BBED> info
File# Name Size(blks)
----- ---- ----------
1 D:\APP\ORACLE\ORADATA\TEST\SYSTEM01.DBF 0
2 D:\APP\ORACLE\ORADATA\TEST\PDBSEED\SYSTEM01.DBF 0
3 D:\APP\ORACLE\ORADATA\TEST\SYSAUX01.DBF 0
4 D:\APP\ORACLE\ORADATA\TEST\PDBSEED\SYSAUX01.DBF 0
5 D:\APP\ORACLE\ORADATA\TEST\UNDOTBS01.DBF 0
6 D:\APP\ORACLE\ORADATA\TEST\USERS01.DBF 0
7 D:\APP\ORACLE\ORADATA\TEST\TEST01P\SYSTEM01.DBF 0
8 D:\APP\ORACLE\ORADATA\TEST\TEST01P\SYSAUX01.DBF 0
9 D:\APP\ORACLE\ORADATA\TEST\TEST01P\SAMPLE_SCHEMA_USERS01.DBF 0
10 D:\APP\ORACLE\ORADATA\TEST\TEST01P\EXAMPLE01.DBF 0
15 D:\APP\ORACLE\ORADATA\TEST\TEST01P\LFREE01.DBF 0
BBED> set dba 1,2
DBA 0x00400002 (4194306 1,2)
--//注,我使用windows版本的bbed,无法识别数据文件的第1块,出现偏差,实际上正常使用set dba 1,1.
BBED> p /d kcvfh.kcvfhhdr.kccfhdbi
ub4 kccfhdbi @28 2119378787
BBED> p /x kcvfh.kcvfhhdr.kccfhdbi
ub4 kccfhdbi @28 0x7e532763
6.应该还有其他方法,我仅仅知道这些。
--别人问的问题,实际上数据恢复我自己都很少需要知道它。实际上方法很多。
--自己做一些测试。
1.环境:
SYS@test> select * from v$version where rownum=1;
BANNER CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0
2.方法1:
--如果能找到控制文件,启动到mount模式。
--控制文件其实无处不在,如果你做rman备份。
SYS@test> startup mount
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size 2402152 bytes
Variable Size 788531352 bytes
Database Buffers 452984832 bytes
Redo Buffers 8744960 bytes
Database mounted.
D:\tools\rlwrap>rman target /
rman target /
Recovery Manager: Release 12.1.0.1.0 - Production on Tue Oct 4 21:02:45 2016
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
connected to target database: TEST (DBID=2119378787, not open)
RMAN> show SNAPSHOT CONTROLFILE name;
RMAN configuration parameters for database with db_unique_name TEST are:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:\APP\ORACLE\PRODUCT\12.1.0\DBHOME_1\DATABASE\SNCFTEST.ORA'; # default
--也可以执行如下转储:
SYS@test> alter session set events 'immediate trace name controlf level 3';
Session altered.
3.方法2:
--如果你没有控制文件,你做过rman备份,看看备份时留下的日志,其实也能找到dbid。
4.方法3:
--找一个数据文件当然最好system数据文件,做1个转储就能知道dbid。
--实际上你可以把这个文件拷贝到别的机器,使用别的机器做转储:
SYS@test> alter system dump datafile 'D:\app\oracle\oradata\test\SYSTEM01.DBF' block 1 ;
System altered.
--//注意在mount下,datfile后不能跟数字,而是使用文件名。
--//检查转储:
Start dump data block from file D:\APP\ORACLE\ORADATA\TEST\SYSTEM01.DBF minblk 1 maxblk 1
V10 STYLE FILE HEADER:
Compatibility Vsn = 202375168=0xc100000
Db ID=2119378787=0x7e532763, Db Name='TEST'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Activation ID=0=0x0
Control Seq=266950=0x412c6, File size=112640=0x1b800
File Number=1, Blksiz=8192, File Type=3 DATA
Dump all the blocks in range:
End dump data block from file D:\APP\ORACLE\ORADATA\TEST\SYSTEM01.DBF minblk 2 maxblk 1
5.方法4,使用bbed:
BBED> info
File# Name Size(blks)
----- ---- ----------
1 D:\APP\ORACLE\ORADATA\TEST\SYSTEM01.DBF 0
2 D:\APP\ORACLE\ORADATA\TEST\PDBSEED\SYSTEM01.DBF 0
3 D:\APP\ORACLE\ORADATA\TEST\SYSAUX01.DBF 0
4 D:\APP\ORACLE\ORADATA\TEST\PDBSEED\SYSAUX01.DBF 0
5 D:\APP\ORACLE\ORADATA\TEST\UNDOTBS01.DBF 0
6 D:\APP\ORACLE\ORADATA\TEST\USERS01.DBF 0
7 D:\APP\ORACLE\ORADATA\TEST\TEST01P\SYSTEM01.DBF 0
8 D:\APP\ORACLE\ORADATA\TEST\TEST01P\SYSAUX01.DBF 0
9 D:\APP\ORACLE\ORADATA\TEST\TEST01P\SAMPLE_SCHEMA_USERS01.DBF 0
10 D:\APP\ORACLE\ORADATA\TEST\TEST01P\EXAMPLE01.DBF 0
15 D:\APP\ORACLE\ORADATA\TEST\TEST01P\LFREE01.DBF 0
BBED> set dba 1,2
DBA 0x00400002 (4194306 1,2)
--//注,我使用windows版本的bbed,无法识别数据文件的第1块,出现偏差,实际上正常使用set dba 1,1.
BBED> p /d kcvfh.kcvfhhdr.kccfhdbi
ub4 kccfhdbi @28 2119378787
BBED> p /x kcvfh.kcvfhhdr.kccfhdbi
ub4 kccfhdbi @28 0x7e532763
6.应该还有其他方法,我仅仅知道这些。