rac 恢复到单实例

2025-11-20 11:19:38

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/。这样的好处是节省复制备份时间。

rac 恢复到单实例

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

rac 恢复到单实例

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: 选择哪个备份呢

选择删除表时间之前的备份

rac 恢复到单实例

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之后,这时可以看到归档已经开了

rac 恢复到单实例

rac 恢复到单实例

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';

rac 恢复到单实例

rac 恢复到单实例

rac 恢复到单实例

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;

}

有多少个备份就开多少个进程,加快速度

rac 恢复到单实例

rac 恢复到单实例

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 

rac 恢复到单实例

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

rac 恢复到单实例

rac 恢复到单实例

rac 恢复到单实例

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;

rac 恢复到单实例

rac 恢复到单实例

rac 恢复到单实例

rac 恢复到单实例

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢