暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle rac asm数据库恢复到单实例数据库

原创 feng 2022-06-01
305




环境:

数据库版本:10201

1.源端数据库:oracle 10g RAC ASM datbase

2.目标数据库:oracle 10g single datbase


1参数文件的恢复


1.1.恢复参数文件

[oracle@ora10g ~]$ rman target /


Recovery Manager: Release 10.2.0.1.0 - Production on Mon Mar 11 00:17:30 2013


Copyright (c) 1982, 2005, Oracle. All rights reserved.


connected to target database (not started)


RMAN> startup nomount;


startup failed: ORA-01078: failure in processing system parameters

LRM-00109: could not open parameter file '/u01/oracle/product/10.2/dbs/initoradb.ora'


starting Oracle instance without parameter file for retrival of spfile

Oracle instance started


Total System Global Area 159383552 bytes


Fixed Size 1218244 bytes

Variable Size 58722620 bytes

Database Buffers 92274688 bytes

Redo Buffers 7168000 bytes


RMAN> restore spfile to pfile "/u01/oracle/yd.ora" from "/u01/rmanbak/c-2562551067-20130310-00";


Starting restore at 11-MAR-13

using channel ORA_DISK_1


channel ORA_DISK_1: autobackup found: /u01/rmanbak/c-2562551067-20130310-00

channel ORA_DISK_1: SPFILE restore from autobackup complete

Finished restore at 11-MAR-13


RMAN>


1.2.修改参数文件

more yd.ora


*.audit_file_dest='/u01/oracle/admin/oradb/adump'

*.background_dump_dest='/u01/oracle/admin/oradb/bdump'

*.compatible='10.2.0.1.0'

*.control_files='/u01/oracle/oradata/oradb/control01.ctl','/u01/oracle/oradata/oradb/control02.ctl','/u01/oracle/oradata/oradb/control03.ctl'

*.core_dump_dest='/u01/oracle/admin/oradb/cdump'

*.db_block_size=8192

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='oradb'

*.job_queue_processes=10

*.open_cursors=300

*.pga_aggregate_target=54371840

*.processes=150

*.remote_login_passwordfile='exclusive'

*.sga_target=185212672

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u01/oracle/admin/oradb/udump'


1.3.创建相关目录

[oracle@ora10g admin]$ mkdir -p /u01/oracle/admin/oradb/udump

[oracle@ora10g admin]$ mkdir -p /u01/oracle/admin/oradb/cdump

[oracle@ora10g admin]$ mkdir -p /u01/oracle/admin/oradb/bdump

[oracle@ora10g admin]$ mkdir -p /u01/oracle/admin/oradb/adump

[oracle@ora10g admin]$ mkdir -p /u01/oracle/admin/oradb/pfile

[oracle@ora10g admin]$ mkdir -p /u01/oracle/oradb


1.4.创建spfile文件

[oracle@ora10g oracle]$ sqlplus "/as sysdba"


SQL*Plus: Release 10.2.0.1.0 - Production on Mon Mar 11 00:25:10 2013


Copyright (c) 1982, 2005, Oracle. All rights reserved.



Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options


SQL> create spfile from pfile='/u01/oracle/yd.ora';


File created.


SQL>

SQL> create pfile from spfile;


File created.


SQL>


2.恢复控制文件

2.1.从备份集中恢复controlfile


[oracle@ora10g oracle]$ sqlplus "/as sysdba"


SQL*Plus: Release 10.2.0.1.0 - Production on Mon Mar 11 00:26:12 2013


Copyright (c) 1982, 2005, Oracle. All rights reserved.


Connected to an idle instance.


SQL> startup nomount;

ORACLE instance started.


Total System Global Area 188743680 bytes

Fixed Size 1218412 bytes

Variable Size 62916756 bytes

Database Buffers 117440512 bytes

Redo Buffers 7168000 bytes

SQL>

SQL>


oracle@ora10g ~]$ rman target /


Recovery Manager: Release 10.2.0.1.0 - Production on Mon Mar 11 00:26:36 2013


Copyright (c) 1982, 2005, Oracle. All rights reserved.


connected to target database: oradb (not mounted)


RMAN> set dbid=2562551067


executing command: SET DBID


RMAN>


restore controlfile from '/u01/rmanbak/c-2562551067-20130310-00';


RMAN> restore controlfile from '/u01/rmanbak/c-2562551067-20130310-00';


Starting restore at 11-MAR-13

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=155 devtype=DISK


channel ORA_DISK_1: restoring control file

channel ORA_DISK_1: restore complete, elapsed time: 00:00:03

output filename=/u01/oracle/oradata/oradb/control01.ctl

output filename=/u01/oracle/oradata/oradb/control02.ctl

output filename=/u01/oracle/oradata/oradb/control03.ctl

Finished restore at 11-MAR-13


RMAN> alter database mount;


database mounted

released channel: ORA_DISK_1



2.2.注册rman备份集到控制文件


catalog start with '/u01/rmanbak';


RMAN> catalog start with '/u01/rmanbak';


searching for all files that match the pattern /u01/rmanbak


List of Files Unknown to the Database

=====================================

File Name: /u01/rmanbak/full_05o46e43_ORADB_20130310

File Name: /u01/rmanbak/arch_03o46e3u_ORADB_20130310

File Name: /u01/rmanbak/arch_08o46e50_ORADB_20130310

File Name: /u01/rmanbak/c-2562551067-20130310-00

File Name: /u01/rmanbak/full_06o46e4i_ORADB_20130310

File Name: /u01/rmanbak/full_04o46e44_ORADB_20130310

File Name: /u01/rmanbak/yd.ora

File Name: /u01/rmanbak/arch_07o46e51_ORADB_20130310

File Name: /u01/rmanbak/arch_02o46e3s_ORADB_20130310

File Name: /u01/rmanbak/arch_01o46e3n_ORADB_20130310

File Name: /u01/rmanbak/rman2.tar

File Name: /u01/rmanbak/rman1.tar


Do you really want to catalog the above files (enter YES or NO)? yes

cataloging files...

cataloging done


List of Cataloged Files

=======================

File Name: /u01/rmanbak/full_05o46e43_ORADB_20130310

File Name: /u01/rmanbak/arch_03o46e3u_ORADB_20130310

File Name: /u01/rmanbak/arch_08o46e50_ORADB_20130310

File Name: /u01/rmanbak/c-2562551067-20130310-00

File Name: /u01/rmanbak/full_06o46e4i_ORADB_20130310

File Name: /u01/rmanbak/full_04o46e44_ORADB_20130310

File Name: /u01/rmanbak/arch_07o46e51_ORADB_20130310

File Name: /u01/rmanbak/arch_02o46e3s_ORADB_20130310

File Name: /u01/rmanbak/arch_01o46e3n_ORADB_20130310


List of Files Which Where Not Cataloged

=======================================

File Name: /u01/rmanbak/yd.ora

RMAN-07517: Reason: The file header is corrupted

File Name: /u01/rmanbak/rman2.tar

RMAN-07517: Reason: The file header is corrupted

File Name: /u01/rmanbak/rman1.tar

RMAN-07517: Reason: The file header is corrupted



ist of Backup Sets

===================


。。。。。




3.查看控制文件内容


set line 100

col NAME for a80

col MEMBER for a80

select file#,status,name from v$datafile

union all

select group#,status,member from v$logfile

union all

select file#,status,name from v$tempfile;



SQL> set line 100

SQL> col NAME for a80

SQL> col MEMBER for a80

SQL> select file#,status,name from v$datafile

2 union all

3 select group#,status,member from v$logfile

4 union all

5 select file#,status,name from v$tempfile;


FILE# STATUS NAME

---------- ------- --------------------------------------------------------------------------------

1 SYSTEM +ASMDG/oradb/datafile/system.256.809286221

2 ONLINE +ASMDG/oradb/datafile/undotbs1.258.809286223

3 ONLINE +ASMDG/oradb/datafile/sysaux.257.809286223

4 ONLINE +ASMDG/oradb/datafile/users.259.809286223

5 ONLINE +ASMDG/oradb/datafile/undotbs2.264.809286357

6 ONLINE +ASMDG/oradb/datafile/ts1.268.809708305

7 ONLINE +ASMDG/oradb/datafile/yd.269.809708359

2 +ASMDG/oradb/onlinelog/group_2.262.809286305

1 +ASMDG/oradb/onlinelog/group_1.261.809286303

3 +ASMDG/oradb/onlinelog/group_3.265.809286383

4 +ASMDG/oradb/onlinelog/group_4.266.809286385

1 ONLINE +ASMDG/oradb/tempfile/temp.263.809286315


12 rows selected.


4.数据库恢复


4.1.restore数据文件和临时数据文件


run{

set newname for datafile 1 to '/u01/oracle/oradata/oradb/system01.dbf';

set newname for datafile 2 to '/u01/oracle/oradata/oradb/undotbs1.dbf';

set newname for datafile 3 to '/u01/oracle/oradata/oradb/sysaux01.dbf';

set newname for datafile 4 to '/u01/oracle/oradata/oradb/users01.dbf';

set newname for datafile 5 to '/u01/oracle/oradata/oradb/undotbs02.dbf';

set newname for datafile 6 to '/u01/oracle/oradata/oradb/ts1.dbf';

set newname for datafile 7 to '/u01/oracle/oradata/oradb/yd.dbf';

set newname for tempfile 1 to '/u01/oracle/oradata/oradb/temp01.dbf';

restore database;

switch datafile all;

switch tempfile all;

}



RMAN>


RMAN> run{

2> set newname for datafile 1 to '/u01/oracle/oradata/oradb/system01.dbf';

3> set newname for datafile 2 to '/u01/oracle/oradata/oradb/undotbs1.dbf';

4> set newname for datafile 3 to '/u01/oracle/oradata/oradb/sysaux01.dbf';

5> set newname for datafile 4 to '/u01/oracle/oradata/oradb/users01.dbf';

6> set newname for datafile 5 to '/u01/oracle/oradata/oradb/undotbs02.dbf';

7> set newname for datafile 6 to '/u01/oracle/oradata/oradb/ts1.dbf';

8> set newname for datafile 7 to '/u01/oracle/oradata/oradb/yd.dbf';

9> set newname for tempfile 1 to '/u01/oracle/oradata/oradb/temp01.dbf';

10> restore database;

11> switch datafile all;

12> switch tempfile all;

13> }


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


Starting restore at 11-MAR-13

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=155 devtype=DISK


channel ORA_DISK_1: starting datafile backupset restore

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

restoring datafile 00002 to /u01/oracle/oradata/oradb/undotbs1.dbf

restoring datafile 00003 to /u01/oracle/oradata/oradb/sysaux01.dbf

restoring datafile 00006 to /u01/oracle/oradata/oradb/ts1.dbf

restoring datafile 00007 to /u01/oracle/oradata/oradb/yd.dbf

channel ORA_DISK_1: reading from backup piece /oracle/rmanbak/full_05o46e43_ORADB_20130310

channel ORA_DISK_1: restored backup piece 1

failover to piece handle=/u01/rmanbak/full_05o46e43_ORADB_20130310 tag=TAG20130310T155547

channel ORA_DISK_1: restore complete, elapsed time: 00:00:25

channel ORA_DISK_1: starting datafile backupset restore

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

restoring datafile 00001 to /u01/oracle/oradata/oradb/system01.dbf

restoring datafile 00004 to /u01/oracle/oradata/oradb/users01.dbf

restoring datafile 00005 to /u01/oracle/oradata/oradb/undotbs02.dbf

channel ORA_DISK_1: reading from backup piece /oracle/rmanbak/full_04o46e44_ORADB_20130310

channel ORA_DISK_1: restored backup piece 1

failover to piece handle=/u01/rmanbak/full_04o46e44_ORADB_20130310 tag=TAG20130310T155547

channel ORA_DISK_1: restore complete, elapsed time: 00:00:35

Finished restore at 11-MAR-13


datafile 1 switched to datafile copy

input datafile copy recid=8 stamp=809742972 filename=/u01/oracle/oradata/oradb/system01.dbf

datafile 2 switched to datafile copy

input datafile copy recid=9 stamp=809742973 filename=/u01/oracle/oradata/oradb/undotbs1.dbf

datafile 3 switched to datafile copy

input datafile copy recid=10 stamp=809742973 filename=/u01/oracle/oradata/oradb/sysaux01.dbf

datafile 4 switched to datafile copy

input datafile copy recid=11 stamp=809742973 filename=/u01/oracle/oradata/oradb/users01.dbf

datafile 5 switched to datafile copy

input datafile copy recid=12 stamp=809742973 filename=/u01/oracle/oradata/oradb/undotbs02.dbf

datafile 6 switched to datafile copy

input datafile copy recid=13 stamp=809742973 filename=/u01/oracle/oradata/oradb/ts1.dbf

datafile 7 switched to datafile copy

input datafile copy recid=14 stamp=809742973 filename=/u01/oracle/oradata/oradb/yd.dbf


renamed temporary file 1 to /u01/oracle/oradata/oradb/temp01.dbf in control file


RMAN>




SQL> select name from v$datafile;


NAME

--------------------------------------------------------------------------------

/u01/oracle/oradata/oradb/system01.dbf

/u01/oracle/oradata/oradb/undotbs1.dbf

/u01/oracle/oradata/oradb/sysaux01.dbf

/u01/oracle/oradata/oradb/users01.dbf

/u01/oracle/oradata/oradb/undotbs02.dbf

/u01/oracle/oradata/oradb/ts1.dbf

/u01/oracle/oradata/oradb/yd.dbf


7 rows selected.


SQL>

SQL>

SQL> select name from v$tempfile;


NAME

--------------------------------------------------------------------------------

/u01/oracle/oradata/oradb/temp01.dbf


SQL>



4.2.修改redo file的文件名


SQL> select GROUP#,MEMBER from v$logfile;


GROUP# MEMBER

---------- --------------------------------------------------------------------------------

2 +ASMDG/oradb/onlinelog/group_2.262.809286305

1 +ASMDG/oradb/onlinelog/group_1.261.809286303

3 +ASMDG/oradb/onlinelog/group_3.265.809286383

4 +ASMDG/oradb/onlinelog/group_4.266.809286385



SQL> alter database rename file '+ASMDG/oradb/onlinelog/group_1.261.809286303' to


'/u01/oracle/oradata/oradb/redo01.log';


Database altered.


SQL> alter database rename file '+ASMDG/oradb/onlinelog/group_2.262.809286305' to


'/u01/oracle/oradata/oradb/redo02.log';


Database altered.


SQL> alter database rename file '+ASMDG/oradb/onlinelog/group_3.265.809286383' to


'/u01/oracle/oradata/oradb/redo03.log';


Database altered.


SQL> alter database rename file '+ASMDG/oradb/onlinelog/group_4.266.809286385' to


'/u01/oracle/oradata/oradb/redo04.log';


Database altered.


4.3. recover数据库


RMAN> recover database;


Starting recover at 11-MAR-13

using channel ORA_DISK_1


starting media recovery


channel ORA_DISK_1: starting archive log restore to default destination

channel ORA_DISK_1: restoring archive log

archive log thread=1 sequence=10

channel ORA_DISK_1: reading from backup piece /oracle/rmanbak/arch_07o46e51_ORADB_20130310

channel ORA_DISK_1: restored backup piece 1

failover to piece handle=/u01/rmanbak/arch_07o46e51_ORADB_20130310 tag=TAG20130310T155616

channel ORA_DISK_1: restore complete, elapsed time: 00:00:01

archive log filename=/u01/oracle/product/10.2/dbs/arch1_10_809286303.dbf thread=1 sequence=10

channel ORA_DISK_1: starting archive log restore to default destination

channel ORA_DISK_1: restoring archive log

archive log thread=2 sequence=9

channel ORA_DISK_1: reading from backup piece /oracle/rmanbak/arch_08o46e50_ORADB_20130310

channel ORA_DISK_1: restored backup piece 1

failover to piece handle=/u01/rmanbak/arch_08o46e50_ORADB_20130310 tag=TAG20130310T155616

channel ORA_DISK_1: restore complete, elapsed time: 00:00:01

archive log filename=/u01/oracle/product/10.2/dbs/arch2_9_809286303.dbf thread=2 sequence=9

unable to find archive log

archive log thread=1 sequence=11

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of recover command at 03/11/2013 00:39:45

RMAN-06054: media recovery requesting unknown log: thread 1 seq 11 lowscn 509191


RMAN>




set line 1000

select group#,thread#,sequence#,archived,status from v$log;


SQL> set line 1000

SQL> select group#,thread#,sequence#,archived,status from v$log;


GROUP# THREAD# SEQUENCE# ARC STATUS

---------- ---------- ---------- --- ----------------

1 1 10 YES INACTIVE

2 1 11 NO CURRENT

3 2 9 YES INACTIVE

4 2 10 NO CURRENT

4.4.

使用resetlogs打开数据库


RMAN> alter database open resetlogs;


database opened


RMAN>


5.修正temp文件


SQL> col PROPERTY_NAME for a30

SQL> col DESCRIPTION for a50

SQL> col PROPERTY_VALUE for a20

SQL> select * from database_properties where property_value='TEMP';


PROPERTY_NAME PROPERTY_VALUE DESCRIPTION

------------------------------ -------------------- --------------------------------------------------

DEFAULT_TEMP_TABLESPACE TEMP Name of default temporary tablespace


SQL> select * from database_properties where property_value='USERS';


PROPERTY_NAME PROPERTY_VALUE DESCRIPTION

------------------------------ -------------------- --------------------------------------------------

DEFAULT_PERMANENT_TABLESPACE USERS Name of default permanent tablespace



col FILE_NAME for a40

select tablespace_name,file_name,bytes/1024/1024 sizeM,AUTOEXTENSIBLE from dba_temp_files;


SQL> select tablespace_name,file_name,bytes/1024/1024 sizeM,AUTOEXTENSIBLE from dba_temp_files;


TABLESPACE_NAME FILE_NAME SIZEM AUT

------------------------------ ---------------------------------------- ---------- ---

TEMP /u01/oracle/oradata/oradb/temp01.dbf 20 YES



6.修正redo日志

SQL> select THREAD#, STATUS, ENABLED from v$thread;


THREAD# STATUS ENABLED

---------- ------ --------

1 OPEN PUBLIC

2 CLOSED PUBLIC


SQL>

SQL>

SQL> alter database disable thread 2;


Database altered.


SQL>

SQL> select THREAD#, STATUS, ENABLED from v$thread;


THREAD# STATUS ENABLED

---------- ------ --------

1 OPEN PUBLIC

2 CLOSED DISABLED



SQL> select group#,thread#,sequence#,archived,status from v$log;


GROUP# THREAD# SEQUENCE# ARC STATUS

---------- ---------- ---------- --- ----------------

1 1 0 YES UNUSED

2 1 1 NO CURRENT

3 2 0 YES UNUSED

4 2 1 NO INACTIVE


SQL>

SQL> alter database drop logfile group 3;


Database altered.


SQL> alter database drop logfile group 4;

alter database drop logfile group 4

*

ERROR at line 1:

ORA-00350: log 4 of instance oradb2 (thread 2) needs to be archived

ORA-00312: online log 4 thread 2: '/u01/oracle/oradata/oradb/redo04.log'



SQL> alter database clear unarchived logfile group 4;


Database altered.


SQL> alter database drop logfile group 4;


Database altered.


SQL> alter database add logfile group 3 '/u01/oracle/oradata/oradb/redo03.log' size 50m;


Database altered.


SQL> set linesize 300

SQL> l

1 SELECT v$logfile.member, v$logfile.group#, v$log.status,v$log.ARCHIVED, v$log.bytes/1024/1024 ,v$log.thread#

2 FROM v$log, v$logfile

3 WHERE v$log.group# = v$logfile.group#

4* ORDER BY v$log.thread#,v$logfile.group#

SQL> /


MEMBER GROUP# STATUS ARC V$LOG.BYTES/1024/1024 THREAD#

---------------------------------------- ---------- ---------------- --- --------------------- ----------

/u01/oracle/oradata/oradb/redo01.log 1 UNUSED YES 50 1

/u01/oracle/oradata/oradb/redo02.log 2 CURRENT NO 50 1

/u01/oracle/oradata/oradb/redo03.log 3 UNUSED NO 50 1



SQL> archive log list;

Database log mode Archive Mode

Automatic archival Enabled

Archive destination /u01/oracle/product/10.2/dbs/arch

Oldest online log sequence 0

Next log sequence to archive 1

Current log sequence 1

SQL>

SQL>

SQL> alter system set log_archive_dest_1='location=/u01/oracle/archivelog';


System altered.


切换归档验证redo日志文件的可用性。



7.修正undo

SQL>

SQL> select tablespace_name from dba_tablespaces where contents='UNDO';


TABLESPACE_NAME

------------------------------

UNDOTBS1

UNDOTBS2


SQL>

SQL> show parameter undo;


NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

undo_management string AUTO

undo_retention integer 900

undo_tablespace string UNDOTBS1

SQL>

SQL>

SQL> drop tablespace UNDOTBS2 including contents and datafiles;


Tablespace dropped.


SQL> select tablespace_name from dba_tablespaces where contents='UNDO';


TABLESPACE_NAME

------------------------------

UNDOTBS1


8.验证

SQL> col name format a50

SQL> select file#,status,fuzzy,checkpoint_change#,name from v$datafile_header


FILE# STATUS FUZ CHECKPOINT_CHANGE# NAME

---------- ------- --- ------------------ --------------------------------------------------

1 ONLINE YES 509682 /u01/oracle/oradata/oradb/system01.dbf

2 ONLINE YES 509682 /u01/oracle/oradata/oradb/undotbs1.dbf

3 ONLINE YES 509682 /u01/oracle/oradata/oradb/sysaux01.dbf

4 ONLINE YES 509682 /u01/oracle/oradata/oradb/users01.dbf

6 ONLINE YES 509682 /u01/oracle/oradata/oradb/ts1.dbf

7 ONLINE YES 509682 /u01/oracle/oradata/oradb/yd.dbf


6 rows selected.



SQL> select file#,status,checkpoint_change#,last_change#,name from v$datafile;


FILE# STATUS CHECKPOINT_CHANGE# LAST_CHANGE# NAME

---------- ------- ------------------ ------------ --------------------------------------------------

1 SYSTEM 509682 /u01/oracle/oradata/oradb/system01.dbf

2 ONLINE 509682 /u01/oracle/oradata/oradb/undotbs1.dbf

3 ONLINE 509682 /u01/oracle/oradata/oradb/sysaux01.dbf

4 ONLINE 509682 /u01/oracle/oradata/oradb/users01.dbf

6 ONLINE 509682 /u01/oracle/oradata/oradb/ts1.dbf

7 ONLINE 509682 /u01/oracle/oradata/oradb/yd.dbf


6 rows selected.



SQL> conn test/test

Connected.

SQL>

SQL> select count(*) from test;


COUNT(*)

----------

49781


SQL> conn yd/yd

Connected.

SQL> select count(*) from t1;


COUNT(*)

----------

14

=========

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论