问题7:使用RMAN时,怎么样确定数据库的DBID,rmandbid
目的:使用RMAN时,怎么样确定数据库的DBID
可以通过以下的方法确定数据库的DBID
1. 如果数据库是开启的,可以通过下面的一个查询来确定数据库的DBID
SQL> select dbid from v$database;
DBID
----------
269906945
2.如果所有的数据文件都丢失了,不能使用控制文件的自动备份等等,但是你有一个可用的控制文件,那么利用这个旧的控制文件将数据库置于mount状态,通过类似于1中查询即试图v$database查出数据库的DBID,因为动态性能视图在数据库出于mount状态下,就可以查询
3.如果配置了控制文件自动备份,且备份到了本地,不是在闪回恢复区,那么这个控制文件备份集的名字就包含了DBID,如:
c-269906945-20140913-07
此处:
269906945 就是数据库的DBID
如果数据库是10g,使用了闪回恢复区 + 控制文件自动备份,且备份集为默认的目录,不需要设置DBID,直接通过下面的命令就可以从自动备份集中恢复控制文件或参数文件spfie:
RMAN>startup nomount;
RMAN>restore controlfile from autobackup.
4.如果以前在进行rman备份,真个备份的过程的详细内容被记录下来,或者说有备份的日志,那么也很容易找到数据库的DBID,如:
$ rman target /
Recovery Manager: Release 10.2.0.4.0 -Production on Sat Sep 13 12:53:56 2014
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: RADIUS (DBID=269906945)
RMAN> backup database format'/u01/backup/backup_full/full_%d_%T_%s_%p.bak';
Starting backup at 13-SEP-14
using target database control file instead ofrecovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=139 devtype=DISK
channel ORA_DISK_1: starting full datafilebackupset
channel ORA_DISK_1: specifying datafile(s) inbackupset
input datafile fno=00001name=/u01/oradata/radius/system01.dbf
input datafile fno=00003 name=/u01/oradata/radius/sysaux01.dbf
input datafile fno=00005name=/u01/oradata/radius/example01.dbf
input datafile fno=00002name=/u01/oradata/radius/undotbs01.dbf
input datafile fno=00004name=/u01/oradata/radius/users01.dbf
channel ORA_DISK_1: starting piece 1 at13-SEP-14
channel ORA_DISK_1: finished piece 1 at13-SEP-14
piecehandle=/u01/backup/backup_full/full_RADIUS_20140913_50_1.baktag=TAG20140913T125428 comment=NONE
channel ORA_DISK_1: backup set complete,elapsed time: 00:00:55
Finished backup at 13-SEP-14
Starting Control File and SPFILE Autobackupat 13-SEP-14
piece handle=/tmp/c-269906945-20140913-08comment=NONE
Finished Control File and SPFILE Autobackupat 13-SEP-14
/************************************************************/
【说明】
RMAN进行备份的时候,一定要产生日志,既能了解整个的备份完成的情况,同时也记录了很多在以后的恢复中利用到的信息。如:备份集的名字,路径,归档的序号,dbid等等
5.如果使用的是UNIX系统,如果数据库出现问题,但是仍然有一个数据文件还在,可以通过strings命令进行查看,如下:
$strings undotbs01.dbf | grep MAXVALUE
3587267724,MAXVALUE
...etc.
从上面可以看出,DBID是3587267724
6.如果使用了恢复目录catalog,通过RMAN连接到恢复目录数据库,发起 list incarnation命令,来查询DBID
首先必须将目标数据库置于nomount状态,然后在进行DBID的查询
如:
D:\>rman target <user>/<pwd>@mydb rcvcat <user>/<pwd>@rcat
RecoveryManager: Release 8.1.7.4.1 - Production
RMAN-06193:connected to target database (not started)
RMAN-06008:connected to recovery catalog database
RMAN> startup nomount
RMAN-06196:Oracle instance started
TotalSystem Global Area 94980124 bytes
FixedSize 75804 bytes
VariableSize 57585664 bytes
DatabaseBuffers 37240832 bytes
RedoBuffers 77824 bytes
RMAN> list incarnation;
RMAN-03022:compiling command: list
Listof Database Incarnations
DBKey Inc Key DB Name DB ID CUR Reset SCN Reset Time
-------------- -------- ---------------- --- ---------- --------
12 ORCL817 1411146558 YES 282854 03-DEC-02
-----------------------------------------------------------------
--END--
oracle在恢复中常用到DBID,DBID的作用是什么,它和db_name是不是一一对应关系?
oracle在恢复中常用到DBID,DBID的作用是什么,它和db_name是不是一一对应关系?
DBID是不是用来标识db_name的序列号? 请各位高手解释一下!
1 当丢失了控制文件时,进行自动恢复数据时用到DBID.
RMAN> restore controlfile from autobackup;
启动 restore 于 15-2月 -08
使用通道 ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 02/15/2008 00:43:38
RMAN-06495: must explicitly specify DBID with SET DBID command
2 进行rman恢复时,有时也用到DBID.
3 oracle自动控制文件也用DBID做文件名
4 DBID存在于数据文件及控制文件中
下面转一下eygle的《Oracle HowTo:如何获得数据库的DBID》
www.eygle.com/...d.html
在进行数据库恢复的过程中,很多时候我们需要知道Oracle数据库的DBID,通常有以下几种方法可以获得数据库的DBID.
1.查询v$database获得
由于DBID在控制文件和数据文件中都存在记录,所以如果能够mount数据库就可以查询v$database视图获得.
SQL> alter database mount;Database altered.SQL> select dbid from v$database; DBID
----------
3152029224SQL> 2.在nomount状态时
如果数据库配置了自动控制文件备份(Oracle9i),并且名称是缺省的,那么我们可以从自动备份文件获得DBID.
[oracle@jumper dbs]$ cd $ORACLE_HOME/dbs
[oracle@jumper dbs]$ ll c-*
-rw-r----- 1 oracle dba 3375104 Dec 21 11:13 c-3152029224-20051221-00
-rw-r----- 1 oracle dba 3358720 Jan 21 14:03 c-3152029224-20060121-00
-rw-r----- 1 oracle dba 3358720 Jan 21 14:08 c-3152029224-20060121-01这里的3152......余下全文>>
。。。。rman 备份多简单的事!
EXP/IMP 对小库还可以,对大库的话,根本行不通的啊!
要用也是用EXDP/IMDP 啊!逻辑备份只是物理备份的补充啊!
强烈建议用rman
给你个RMAN全备的脚本吧:
connect target 用户名/密码@服务;
crosscheck archivelog all;
crosscheck backup;
delete noprompt expired archivelog all;
delete noprompt obsolete;
delete expired copy;
delete noprompt expired backup;
run {
backup as compressed backupset database format 'S:\rmanbak\full_%d_%T_%t_%s 'tag='fullbak';
backup archivelog all delete all input skip inaccessible format 'S:\rmandatabse\rmanbak\ARC_%U';
backup current controlfile format 'S:\rmandatabse\rmanbak\control\control_bak_%T';
}
然后做个批处理:
rman cmdfile='full_rman.txt' msglog='D:/rman/rmanbat/full_rmanlog%date:~4,10%.log'
最后在windows计划任务定时一调用,多简单的事!
我这里还有增量备份的脚本,就不贴上了!自己学学吧!