1:存储选择 机房中没有干净的存储。由于其他存储已经nfs挂载到其他服务器中。而nfs默认挂载会锁定存储。而原库中的172.17.214.50正好只有db1这台服务器用来rman备份数据库用。首先用 fuser –m –v /DBbak 查看哪些进程使用这个目录。发现没有后直接卸载 umount /DBbak,然后重新挂载mount –t nfs –o nolock 172.17.214.50:/vol/a/bak /DBbak。172.17.214.240服务器同样用服务器挂载 mount -t nfs -o nolock 172.17.214.50:/vol/a/bak /oradata/。这样的好处是节省复制备份时间。
2:创建用户,需要和原库的用户id和名称一致需要和原库用户一致。[root@localhost backup]# groupadd -g 1010 oinstall[root@localhost backup]# groupadd -g 1011 dba[root@localhost backup]# useradd -m -g oinstall -G dba -u 500 oracle
3:创建dump目录mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adumpmkdir -p $ORACLE_BASE/admin/$ORACLE_SID/dpdumpmkdir -p $ORACLE_BASE/admin/$ORACLE_SID/hdumpmkdir -p $ORACLE_BASE/admin/$ORACLE_SID/pfilemkdir -p $ORACLE_BASE/admin/$ORACLE_SID/scripts
4: 选择哪个备份呢选择删除表时间之前的备份
5:复制密码文件和pfile文件[oracle@db1 dbs]$ cp orapworcl1 /DBbak/240/back/[oracle@db1 ~]$ cp 240.pfile /DBbak/240/back/240服务器上修改密码文件名称[oracle@node ~]$ cd /oradata/240/back/[oracle@node back]$ ls240.pfile orapworcl1[oracle@node back]$ cp orapworcl1 /home/oracle/u01/app/oracle/product/11.2.0/db_1/dbs/[oracle@node back]$ cd /home/oracle/u01/app/oracle/product/11.2.0/db_1/dbs/[oracle@node dbs]$ lsinit.ora orapworcl1[oracle@node dbs]$ mv orapworcl1 orapworcl[oracle@node dbs]$ lsinit.ora orapworcl[oracle@node dbs]$密码文件必须是特殊名称,且必须放在特殊目录
6:启动SQL> startup nomount pfile=/oradata/240/back/240.pfile;ORA-16032: parameter LOG_ARCHIVE_DEST destination string cannot be translatedORA-07286: sksagdi: cannot obtain device information.Linux-x86_64 Error: 2: No such file or directory把LOG_ARCHIVE_DEST去除之后启动正常SQL> startup nomount pfile=/oradata/240/back/240.pfile;ORACLE instance started. Total System Global Area 4175568896 bytesFixed Size 2234960 bytesVariable Size 1828718000 bytesDatabase Buffers 2332033024 bytesRedo Buffers 12582912 bytes参数文件/oradata/240/back/240.pfile:orcl.__java_pool_size=16777216orcl.__large_pool_size=16777216orcl.__oracle_base='/home/oracle/u01/app/oracle'#ORACLE_BASE set from environmentorcl.__pga_aggregate_target=1orcl.__sga_target=4194304000orcl.__shared_io_pool_size=0orcl.__shared_pool_size=1778384896orcl.__streams_pool_size=16777216*.audit_file_dest='/home/oracle/u01/app/oracle/admin/orcl/adump'*.audit_trail='NONE'*.compatible='11.2.0.0.0'*.control_files='/oradata/240/oradata/control01.ctl'*.db_block_size=8192*.db_domain=''*.db_name='orcl'*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'*.open_cursors=300*.pga_aggregate_target=1*.processes=1500*.remote_login_passwordfile='EXCLUSIVE'*.sessions=1655*.sga_target=4194304000*.undo_tablespace='UNDOTBS1'内存设置大小根据服务器设置
7:还原控制文件RMAN> restore controlfile from '/oradata/backup/oracle/orcl/ctlbackup/CTLBAK_ORCL_20150830_6552_1'; Starting restore at 09-SEP-15using target database control file instead of recovery catalogallocated channel: ORA_DISK_1channel ORA_DISK_1: SID=2186 device type=DISK channel ORA_DISK_1: restoring control filechannel ORA_DISK_1: restore complete, elapsed time: 00:00:07output file name=/oradata/240/oradata/control01.ctlFinished restore at 09-SEP-15启动到mount之后,这时可以看到归档已经开了
8:catalog 全备crosscheck backupset; 扫描由于在原库服务器上挂载目录是/DBbak,必须在240上设置挂载目录不一致。否则在还原的时候会找最新的备份。因为我们不知道表删除的具体时间,最好排除最新的备份。240服务器上挂载目录不一致,这样备份就都无效,我们来手动制定备份集。delete expired backupset;删除失效备份重新扫描之后没有了。catalog backuppiece '/oradata/backup/oracle/orcl/fullbackup/FULLBAK_ORCL_20150830_6537_1';catalog backuppiece '/oradata/backup/oracle/orcl/fullbackup/FULLBAK_ORCL_20150830_6538_1';catalog backuppiece '/oradata/backup/oracle/orcl/fullbackup/FULLBAK_ORCL_20150830_6539_1';catalog backuppiece '/oradata/backup/oracle/orcl/fullbackup/FULLBAK_ORCL_20150830_6540_1';catalog backuppiece '/oradata/backup/oracle/orcl/fullbackup/FULLBAK_ORCL_20150830_6541_1';catalog backuppiece '/oradata/backup/oracle/orcl/fullbackup/FULLBAK_ORCL_20150830_6542_1';catalog backuppiece '/oradata/backup/oracle/orcl/fullbackup/FULLBAK_ORCL_20150830_6543_1';catalog backuppiece '/oradata/backup/oracle/orcl/fullbackup/FULLBAK_ORCL_20150830_6544_1';
9:还原数据文件select file_name,file_id,'set newname for datafile '||file_id||' to '''||replace(file_name,'+DATA/orclrestore/datafile/','/oradata/240/oradata/')||''' ;'from dba_data_files order by file_id;连接到原库run{allocate channel d1 type disk;allocate channel d2 type disk;allocate channel d3 type disk;allocate channel d4 type disk;allocate channel d5 type disk;allocate channel d6 type disk;allocate channel d7 type disk;allocate channel d8 type disk;set newname for datafile 1 to '/oradata/240/oradata/system01.dbf' ;set newname for datafile 2 to '/oradata/240/oradata/sysaux01.dbf' ;。。。。。。。。set newname for datafile 73 to '/oradata/240/oradata/datafile68.dbf' ;restore database; switch datafile all;release channel d1;release channel d2;release channel d3;release channel d4;release channel d5;release channel d6;release channel d7;release channel d8;}有多少个备份就开多少个进程,加快速度
10:catalog归档备份并recover数据库catalog backuppiece '/oradata/backup/oracle/orcl/archbackup/ARCHBAK_ORCL_20150830_6546_1';catalog backuppiece '/oradata/backup/oracle/orcl/archbackup/ARCHBAK_ORCL_20150830_6547_1';catalog backuppiece '/oradata/backup/oracle/orcl/archbackup/ARCHBAK_ORCL_20150830_6548_1';catalog backuppiece '/oradata/backup/oracle/orcl/archbackup/ARCHBAK_ORCL_20150830_6549_1';catalog backuppiece '/oradata/backup/oracle/orcl/archbackup/ARCHBAK_ORCL_20150830_6550_1';catalog backuppiece '/oradata/backup/oracle/orcl/archbackup/ARCHBAK_ORCL_20150830_6551_1';只需要到30号的就行。然后recover database
11:删除多余日志文件select 'alter database drop logfile group '||group#||' ;' from v$logfile;最后会自动留下两组ORA-01567: dropping log 36 would leave less than 2 log files for instance orclMember名称无法确定,只能先增加然后再删除。
12:trace控制文件编辑文件 controlbk1.sqlCREATE CONTROLFILE REUSE DATABASE 'ORCL' RESETLOGS NOARCHIVELOG MAXLOGFILES 40 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 19451LOGFILE GROUP 1 '/oradata/240/oradata/redo01.log' SIZE 20M BLOCKSIZE 512, GROUP 2 '/oradata/240/oradata/redo02.log' SIZE 20M BLOCKSIZE 512DATAFILE '/oradata/240/oradata/system01.dbf', '/oradata/240/oradata/sysaux01.dbf',。。。。。。。。。。。。。。。。 '/oradata/240/oradata/datafile68.dbf'CHARACTER SET ZHS16CGB231280;控制文件创建成功之后,数据库自动会被mount。启动数据库还是报错:ORA-38856: cannot mark instance UNNAMED_INSTANCE_2 (redo thread 2) as enabledDetails: ORA-38856: cannot mark instance UNNAMED_INSTANCE_2 (redo thread 2) as enabled. Oracle bug, 4355382 ORA-38856: FAILED TO OPEN DATABASE WITH RESETLOGS WHEN USING RAC BACKUP, exists in the Oracle 10g release 2.0 that affects backups taken from a RAC database. The problem is related to the number of threads used by the source database and an expectation that the cloned database must have an identical number of threads. 解决办法:给thread 2添加日志组,然后删除。ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 3 '/oradata/240/oradata/redo03.log' SIZE 10M REUSE;ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 4 '/oradata/240/oradata/redo04.log' SIZE 10M REUSE;SQL> alter database open resetlogs;SQL> alter database disable thread 2;SQL> alter database drop logfile group 3;SQL> alter database drop logfile group 4;