[20161003]如何知道数据库的dbid.txt

[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.应该还有其他方法,我仅仅知道这些。

时间: 2024-09-20 22:40:37

[20161003]如何知道数据库的dbid.txt的相关文章

[20161214]如何确定dbid.txt

[20161214]如何确定dbid.txt --如何确定数据库的dbid,我曾经写过一篇blog,链接:http://blog.itpub.net/267265/viewspace-2125849/ --实际上还有1种非常武断的方法,直接使用strings扫sysaux表空间对应的数据文件,就可以知道: 例子如下: SYS@book> @&r/ver1 PORT_STRING                    VERSION        BANNER ----------------

[20121108]关于克隆数据库的问题.txt

[20121108]关于克隆数据库的问题.txt 前几天在克隆数据库生产系统数据库时,遇到一个非常奇怪的问题,记录一下: 克隆的机器口令文件,以及spfile以前都存在,实际上很简单,先停止旧数据库,然后改安装目录名(害怕还要使用!),再安装数据库: startup nomount;SQL> startup nomountORACLE instance started. Total System Global Area 1.2885E+10 bytesFixed Size            

c++ 写一个查询系统 ,不用数据库,从txt中读取数据,求大神指点啊 ...

问题描述 c++ 写一个查询系统 ,不用数据库,从txt中读取数据,求大神指点啊 ... 解决方案 你首先的规范text 文档的数据格式 ,然后通过文件流从文件中读取数据 解决方案二: 直接用ifstream读入,然后getline一行行读取,然后可以用sscanf格式化提取(因为你是用,分隔的) 可以把数据都存储下来(存在结构体数组或者vector都行) 之后再实现查找的功能

[20170515]检查数据库scn脚本.txt

[20170515]检查数据库scn脚本.txt --//简单写一个脚本检查数据库各个scn的大小: column TABLESPACE_NAME format a20 SELECT b.file#       ,b.name       ,c.STATUS       ,c.FUZZY       ,a.checkpoint_change# "数据库记录的scn"       ,b.checkpoint_change# "控制文件记录的开始scn"       ,

[20150408]只读表空间以及数据库恢复2.txt

[20150408]只读表空间以及数据库恢复2.txt --昨天检查时发现1个小问题,就是有1个表空间设置只读,也许某个时间打开变成读写,又设置会只读,而备份仅仅在第1次设置只读时做过1次, --按照道理如果使用原来的备份恢复会存在问题的,自己测试1下,顺便看看有什么变通的方法解决这个问题. 1.建立测试环境: SCOTT@test> @ &r/ver1 PORT_STRING                    VERSION        BANNER ----------------

[20150408]只读表空间以及数据库恢复4.txt

[20150408]只读表空间以及数据库恢复4.txt 参考链接: http://blog.itpub.net/267265/viewspace-1544583/ http://blog.itpub.net/267265/viewspace-1548059/ http://blog.itpub.net/267265/viewspace-1548967/ --上午做了测试,通过新建控制文件的方式来恢复,实际上更常用的方式使用bbed,修改数据文件块1,保持与控制文件的记录一致. --通过对比来看看

[20150408]只读表空间以及数据库恢复3.txt

[20150408]只读表空间以及数据库恢复3.txt --昨天检查时发现1个小问题,就是有1个表空间设置只读,也许某个时间打开变成读写,又设置会只读,而备份仅仅在第1次设置只读时做过1次, --按照道理如果使用原来的备份恢复会存在问题的,自己测试1下,我上午已经测试了可以使用以前的做了来恢复,但是这里存在一些小问题, --我在第2次打开读写时,没有任何ddl,dml操作对这个表空间,如果存在这些操作会出现什么情况呢? --继续上午的测试. 1.建立测试环境: SCOTT@test> @ &

[20160619]NULL在数据库的存储.txt

[20160619]NULL在数据库的存储.txt --简单探究NULL在数据库的存储.这也是别人前几天问的问题,我自己学习oracle这么久,也没有仔细观察过. 1.环境: SCOTT@test01p> @ ver1 PORT_STRING                    VERSION        BANNER                                                                               CON_ID --

[20121214]数据库错误记录.txt

[20121214]数据库错误记录.txt --自己参照许多文档,写了一个检测数据库错误的例子:--以sys用户登录,建立表CREATE TABLE SYS.ERROR_LOG(  IP_ADDRESS       VARCHAR2(30 BYTE),  USERNAME         VARCHAR2(30 BYTE),  INSTANCE_NUMBER  NUMBER(2),  THEDATE          DATE,  ERRORMSG         VARCHAR2(4000 B