rac 恢复到单实例
1、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、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、3:创建dump目录
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/dpdump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/hdump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/pfile
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/scripts
4、4: 选择哪个备份呢
选择删除表时间之前的备份

5、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]$ ls
240.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]$ ls
init.ora orapworcl1
[oracle@node dbs]$ mv orapworcl1 orapworcl
[oracle@node dbs]$ ls
init.ora orapworcl
[oracle@node dbs]$
密码文件必须是特殊名称,且必须放在特殊目录
6、6:启动
SQL> startup nomount pfile=/oradata/240/back/240.pfile;
ORA-16032: parameter LOG_ARCHIVE_DEST destination string cannot be translated
ORA-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 bytes
Fixed Size 2234960 bytes
Variable Size 1828718000 bytes
Database Buffers 2332033024 bytes
Redo Buffers 12582912 bytes
参数文件/oradata/240/back/240.pfile:
orcl.__java_pool_size=16777216
orcl.__large_pool_size=16777216
orcl.__oracle_base='/home/oracle/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=1073741824
orcl.__sga_target=4194304000
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=1778384896
orcl.__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=1073741824
*.processes=1500
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=1655
*.sga_target=4194304000
*.undo_tablespace='UNDOTBS1'
内存设置大小根据服务器设置
7、7:还原控制文件
RMAN> restore controlfile from '/oradata/backup/oracle/orcl/ctlbackup/CTLBAK_ORCL_20150830_6552_1';
Starting restore at 09-SEP-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=2186 device type=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:07
output file name=/oradata/240/oradata/control01.ctl
Finished restore at 09-SEP-15
启动到mount之后,这时可以看到归档已经开了


8、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、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、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、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 orcl
Member名称无法确定,只能先增加然后再删除。



12、12:trace控制文件
编辑文件 controlbk1.sql
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG
MAXLOGFILES 40
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 19451
LOGFILE
GROUP 1 '/oradata/240/oradata/redo01.log' SIZE 20M BLOCKSIZE 512,
GROUP 2 '/oradata/240/oradata/redo02.log' SIZE 20M BLOCKSIZE 512
DATAFILE
'/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 enabled
Details: 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;



