RAC的异机恢复

129 篇文章 7 订阅

  • 环境
    OS: CentOS 6.10
    双节点RAC环境:节点1-rac1,节点2-rac2
    数据库:oradb,实例1-oradb1,实例2-oradb2

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
Oracle Clusterware version on node [rac1] is [11.2.0.4.0]

  • 背景
    在/backup目录下有备份片,但对需要恢复的数据库的信息都是未知。
    在这里插入图片描述
  • 当前数据库的信息
SQL> select status,instance_name from v$instance;

STATUS       INSTANCE_NAME
------------ ----------------
OPEN       oradb1

SQL> create pfile='/backup/initoradb1' from spfile;

File created.

SQL> show parameter pfile;

NAME             TYPE  VALUE
------------------------------------ ----------- ------------------------------
spfile             string  +DATA/oradb/spfileoradb.ora
SQL> show parameter spfile;

NAME             TYPE  VALUE
------------------------------------ ----------- ------------------------------
spfile             string  +DATA/oradb/spfileoradb.ora


[oracle@rac1 backup]$ cat initoradb1.ora
oradb1.__db_cache_size=3321888768
oradb2.__db_cache_size=3321888768
oradb1.__java_pool_size=50331648
oradb2.__java_pool_size=50331648
oradb1.__large_pool_size=67108864
oradb2.__large_pool_size=67108864
oradb2.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
oradb1.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
oradb1.__pga_aggregate_target=49895440384
oradb2.__pga_aggregate_target=49895440384
oradb1.__sga_target=4294967296
oradb2.__sga_target=4294967296
oradb1.__shared_io_pool_size=0
oradb2.__shared_io_pool_size=0
oradb1.__shared_pool_size=805306368
oradb2.__shared_pool_size=805306368
oradb1.__streams_pool_size=0
oradb2.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/oradb/adump'
*.audit_trail='db'
*.cluster_database=TRUE
*.compatible='11.2.0.4.0'
*.control_files='+DATA/oradb/controlfile/current.256.1009379023','+FRA/oradb/controlfile/current.256.1009379023'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain=''
*.db_name='oradb'
*.db_recovery_file_dest='+FRA'
*.db_recovery_file_dest_size=8589934592
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=oradbXDB)'
oradb1.instance_number=1
oradb2.instance_number=2
*.log_archive_dest_1='location=+fra/oradb/archivelog/'
*.open_cursors=300
*.pga_aggregate_target=49884954624
*.processes=500
*.remote_listener='rac-cluster-scan:1521'
*.remote_login_passwordfile='exclusive'
*.sessions=555
*.sga_target=4293918720
oradb2.thread=2
oradb1.thread=1
oradb1.undo_tablespace='UNDOTBS1'
oradb2.undo_tablespace='UNDOTBS2'

恢复步骤

1 用“假”pfile拉起数据库至nomount

伪造一个pfile,临时把数据库拉起来, 因为不知道需要回复的数据库名,因此暂用当前实例名。

  • ”伪造“的pfile内容
*.compatible='11.2.0.4.0'
*.control_files='+DATA/oradb/controlfile/current.256.1009379023','+FRA/oradb/controlfile/current.256.1009379023'
*.db_name='oradb'
  • 将数据库启动至nomount
SQL> startup nomount pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initoradb.ora';
ORACLE instance started.

Total System Global Area  885342208 bytes
Fixed Size        2258040 bytes
Variable Size     658508680 bytes
Database Buffers    201326592 bytes
Redo Buffers       23248896 bytes

2 恢复spfile

  • 恢复真正我们需要的spfile
rman target /

RMAN> restore spfile to '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfileoradb.ora' from '/backup/c-1817212596-20190527-01';

Starting restore at 2019-05-29 09:36:36
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=2171 device type=DISK

channel ORA_DISK_1: restoring spfile from AUTOBACKUP /backup/c-1817212596-20190527-01
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 2019-05-29 09:36:39

spfile的backup的地址:
/backup/c-1817212596-20190527-01
注意,这个spfile记录的是以前的数据库的信息

3 从spfile创建pfile

sqlplus / as sysdba
  • 从spfile创建一个pfile
SQL> create pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initracpdb.ora' from spfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfileracpdb.ora';

File created.
  • 关闭数据库并退出
SQL> shutdown immediate;
SQL> exit

4 修改相应的参数

  • 有了真的参数文件我们需要根据新服务器的实际情况,修改相应的参数

如果对参数文件中记录的文件位置不更改,要保证参数文件里的路径都要存在。
注意,没有的路径都要创建上,注意权限!
如果想给控制文件等修改位置,就在参数文件的相应部分进行修改。

[oracle@rac1 dbs]$ strings spfileracpdb.ora
racpdb1.__db_cache_size=24293408768
racpdb2.__db_cache_size=23622320128
racpdb1.__java_pool_size=939524096
racpdb2.__java_pool_size=939524096
racpdb1.__large_pool_size=1073741824
racpdb2.__large_pool_size=1073741824
racpdb1.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
racpdb2.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
racpdb1.__pga_aggregate_target=21340618752
racpdb2.__pga_aggregate_target=21340618752
racpdb1.__sga_target=39728447488
racpdb2
.__sga_target=39728447488
racpdb2.__shared_io_pool_size=0
racpdb1.__shared_io_pool_size=536870912
racpdb1.__shared_pool_size=12348030976
racpdb2.__shared_pool_size=13421772800
racpdb1.__streams_pool_size=134217728
racpdb2.__streams_pool_size=268435456
*.audit_file_dest='/u01/app/oracle/admin/racpdb/adump'
*.audit_sys_operations=FALSE
*.audit_trail='NONE'
*.cluster_database=true
*.compatible='11.2.0.4.0'
*.control_files='+DATA/racpdb/controlfile/current.260.927307061','+FRA/racpdb/con
trolfile/current.256.927307061'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_create_online_log_dest_1='+DATA'
*.db_create_online_log_dest_2='+FRA'
*.db_domain=''
*.db_name='racpdb'
*.db_recovery_file_dest='+FRA'
*.db_recovery_file_dest_size=193273528320
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=racpdbXDB)'
racpdb2.instance_number=2
racpdb1.instance_number=1
*.job_queue_processes=1000
*.log_archive_format='%t_%s_%r.dbf'
*.memory_max_target=6
1001957376
*.memory_target=61001957376
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.processes=5000
*.remote_listener=1521
*.remote_login_passwordfile='exclusive'
*.sessions=2755
racpdb2.thread=2
racpdb1.thread=1
*.undo_retention=7200
*.undo_tablespace='undo1'
racpdb1.undo_tablespace='UNDO1'
racpdb2.undo_tablespace='UNDO2'

5 将数据库启动到nomount

找到刚刚从spfile里创建的pfile的位置,通过pfile启动nomount
注意$ORACLE_SID已经更改,在启动前需要声明新的ORACLE_SID
数据库:racpdb,实例1-racpdb1,实例2-racpdb2

$ export ORACLE_SID=racpdb1
$ sqlplus / as sysdba

SQL>  startup nomount pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initracpdb.ora';

SQL> exit

6 恢复控制文件

[oracle@rac1 ~]$ rman target /

Recovery Manager: Release 11.2.0.4.0 - Production on Wed May 29 10:17:35 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: RACPDB (not mounted)

RMAN> restore controlfile from '/backup/c-1817212596-20190527-01';

Starting restore at 2019-05-29 10:17:39
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=6438 instance=racpdb1 device type=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=+DATA/racpdb/controlfile/current.271.1009534661
output file name=+FRA/racpdb/controlfile/current.265.1009534661
Finished restore at 2019-05-29 10:17:41

7 将数据库启动至mount

RMAN> alter database mount;

database mounted
released channel: ORA_DISK_1

8 通知控制文件备份片的位置

  • 如果备份片的位置发生了变化(与源库路径不一样),需要告诉控制文件,新的路径
    因为,目标端存储备份片的地址和源端不同,但是控制文件记录的信息是源端存储备份片的位置,所以通知控制文件地址改啦
RMAN> catalog start with '/backup/';

searching for all files that match the pattern /backup/

List of Files Unknown to the Database
=====================================
File Name: /backup/5fu2hto2_1_1
File Name: /backup/initoradb1.ora
File Name: /backup/5hu2hto3_1_1
File Name: /backup/5gu2hto3_1_1
File Name: /backup/c-1817212596-20190527-01
File Name: /backup/5eu2hto2_1_1
File Name: /backup/5nu2i8ci_1_1
File Name: /backup/5mu2i8ci_1_1
File Name: /backup/5iu2i2ah_1_1
File Name: /backup/5ju2i2ah_1_1

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

List of Cataloged Files
=======================
File Name: /backup/5fu2hto2_1_1
File Name: /backup/5hu2hto3_1_1
File Name: /backup/5gu2hto3_1_1
File Name: /backup/c-1817212596-20190527-01
File Name: /backup/5eu2hto2_1_1
File Name: /backup/5nu2i8ci_1_1
File Name: /backup/5mu2i8ci_1_1
File Name: /backup/5iu2i2ah_1_1
File Name: /backup/5ju2i2ah_1_1

List of Files Which Where Not Cataloged
=======================================
File Name: /backup/initoradb1.ora
  RMAN-07517: Reason: The file header is corrupted

9 恢复数据文件

  • 数据库启动至mount状态时,就读了控制文件里的信息,可以读出数据文件的路径。
SQL>  select file#,name from v$datafile;

FILE# NAME
----- --------------------------------------------------
    1 +DATA/racpdb/datafile/system.256.927306959
    2 +DATA/racpdb/datafile/sysaux.257.927306961
    3 +DATA/racpdb/datafile/egrantproclob.007.dbf
    4 +DATA/racpdb/datafile/users.259.927306961
    5 +DATA/racpdb/datafile/egrantproclob.008.dbf
    6 +DATA/racpdb/datafile/egrantdatas.001.dbf
    7 +DATA/racpdb/datafile/egrantdatas.002.dbf
    8 +DATA/racpdb/datafile/egrantdatas.003.dbf
    9 +DATA/racpdb/datafile/egrantdatas.004.dbf
   10 +DATA/racpdb/datafile/egrantdatas.005.dbf
   11 +DATA/racpdb/datafile/egrantproclob.009.dbf
   12 +DATA/racpdb/datafile/egrantdatas.006.dbf
   13 +DATA/racpdb/datafile/egrantdatas.007.dbf
   14 +DATA/racpdb/datafile/egrantdatas.008.dbf
   15 +DATA/racpdb/datafile/egrantproclob.010.dbf
   16 +DATA/racpdb/datafile/egrantproclob.011.dbf
   17 +DATA/racpdb/datafile/egrantproclob.001.dbf
   18 +DATA/racpdb/datafile/egrantproclob.002.dbf
   19 +DATA/racpdb/datafile/egrantproclob.003.dbf
   20 +DATA/racpdb/datafile/egrantproclob.004.dbf
   21 +DATA/racpdb/datafile/egrantproclob.005
   22 +DATA/racpdb/datafile/egrantproclob.006.dbf
   23 +DATA/racpdb/datafile/egrantdatas.009.dbf
   24 +DATA/racpdb/datafile/undo01.dbf
   25 +DATA/racpdb/datafile/undo02.dbf
   26 +DATA/racpdb/datafile/egrantproclob.012.dbf
   27 +DATA/egrantproclob.013.dbf

27 rows selected.
  • 参数文件里也记录了数据文件的路径
*.db_create_file_dest='+DATA'

如果与源库存储数据文件的磁盘路径是一样的就不需要修改,可以直接使用restore database;进行恢复。如果路径不同,则需要通过set newname对路径进行修改

RMAN> restore database;

Starting restore at 2019-05-29 11:04:09
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
using channel ORA_DISK_4

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00003 to +DATA/racpdb/datafile/egrantproclob.007.dbf
channel ORA_DISK_1: restoring datafile 00004 to +DATA/racpdb/datafile/users.259.927306961
channel ORA_DISK_1: restoring datafile 00008 to +DATA/racpdb/datafile/egrantdatas.003.dbf
channel ORA_DISK_1: restoring datafile 00012 to +DATA/racpdb/datafile/egrantdatas.006.dbf
channel ORA_DISK_1: restoring datafile 00019 to +DATA/racpdb/datafile/egrantproclob.003.dbf
channel ORA_DISK_1: restoring datafile 00023 to +DATA/racpdb/datafile/egrantdatas.009.dbf
channel ORA_DISK_1: restoring datafile 00026 to +DATA/racpdb/datafile/egrantproclob.012.dbf
channel ORA_DISK_1: reading from backup piece /backup/5eu2hto2_1_1
channel ORA_DISK_2: starting datafile backup set restore
channel ORA_DISK_2: specifying datafile(s) to restore from backup set
channel ORA_DISK_2: restoring datafile 00001 to +DATA/racpdb/datafile/system.256.927306959
channel ORA_DISK_2: restoring datafile 00006 to +DATA/racpdb/datafile/egrantdatas.001.dbf
channel ORA_DISK_2: restoring datafile 00010 to +DATA/racpdb/datafile/egrantdatas.005.dbf
channel ORA_DISK_2: restoring datafile 00017 to +DATA/racpdb/datafile/egrantproclob.001.dbf
channel ORA_DISK_2: restoring datafile 00021 to +DATA/racpdb/datafile/egrantproclob.005
channel ORA_DISK_2: restoring datafile 00024 to +DATA/racpdb/datafile/undo01.dbf
channel ORA_DISK_2: restoring datafile 00027 to +DATA/egrantproclob.013.dbf
channel ORA_DISK_2: reading from backup piece /backup/5hu2hto3_1_1
channel ORA_DISK_3: starting datafile backup set restore
channel ORA_DISK_3: specifying datafile(s) to restore from backup set
channel ORA_DISK_3: restoring datafile 00005 to +DATA/racpdb/datafile/egrantproclob.008.dbf
channel ORA_DISK_3: restoring datafile 00009 to +DATA/racpdb/datafile/egrantdatas.004.dbf
channel ORA_DISK_3: restoring datafile 00014 to +DATA/racpdb/datafile/egrantdatas.008.dbf
channel ORA_DISK_3: restoring datafile 00015 to +DATA/racpdb/datafile/egrantproclob.010.dbf
channel ORA_DISK_3: restoring datafile 00016 to +DATA/racpdb/datafile/egrantproclob.011.dbf
channel ORA_DISK_3: restoring datafile 00020 to +DATA/racpdb/datafile/egrantproclob.004.dbf
channel ORA_DISK_3: restoring datafile 00025 to +DATA/racpdb/datafile/undo02.dbf
channel ORA_DISK_3: reading from backup piece /backup/5fu2hto2_1_1
channel ORA_DISK_4: starting datafile backup set restore
channel ORA_DISK_4: specifying datafile(s) to restore from backup set
channel ORA_DISK_4: restoring datafile 00002 to +DATA/racpdb/datafile/sysaux.257.927306961
channel ORA_DISK_4: restoring datafile 00007 to +DATA/racpdb/datafile/egrantdatas.002.dbf
channel ORA_DISK_4: restoring datafile 00011 to +DATA/racpdb/datafile/egrantproclob.009.dbf
channel ORA_DISK_4: restoring datafile 00013 to +DATA/racpdb/datafile/egrantdatas.007.dbf
channel ORA_DISK_4: restoring datafile 00018 to +DATA/racpdb/datafile/egrantproclob.002.dbf
channel ORA_DISK_4: restoring datafile 00022 to +DATA/racpdb/datafile/egrantproclob.006.dbf
channel ORA_DISK_4: reading from backup piece /backup/5gu2hto3_1_1
channel ORA_DISK_1: piece handle=/backup/5eu2hto2_1_1 tag=FULLBACKUP_RACPDB__052619100007
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 01:52:39
channel ORA_DISK_2: piece handle=/backup/5hu2hto3_1_1 tag=FULLBACKUP_RACPDB__052619100007
channel ORA_DISK_2: restored backup piece 1
channel ORA_DISK_2: restore complete, elapsed time: 01:58:59
channel ORA_DISK_3: piece handle=/backup/5fu2hto2_1_1 tag=FULLBACKUP_RACPDB__052619100007
channel ORA_DISK_3: restored backup piece 1
channel ORA_DISK_3: restore complete, elapsed time: 02:00:59
channel ORA_DISK_4: piece handle=/backup/5gu2hto3_1_1 tag=FULLBACKUP_RACPDB__052619100007
channel ORA_DISK_4: restored backup piece 1
channel ORA_DISK_4: restore complete, elapsed time: 02:04:29
Finished restore at 2019-05-29 13:08:41
  • 去相应路径下查看
ASMCMD> ls
EGRANTDATAS.272.1009537453
EGRANTDATAS.275.1009537453
EGRANTDATAS.276.1009537511
EGRANTDATAS.278.1009537511
EGRANTDATAS.279.1009537511
EGRANTDATAS.283.1009537575
EGRANTDATAS.290.1009537719
EGRANTDATAS.297.1009537805
EGRANTDATAS.298.1009537815
EGRANTPROCLOB.273.1009537453
EGRANTPROCLOB.274.1009537453
EGRANTPROCLOB.277.1009537511
EGRANTPROCLOB.280.1009537575
EGRANTPROCLOB.281.1009537575
EGRANTPROCLOB.282.1009537575
EGRANTPROCLOB.284.1009537645
EGRANTPROCLOB.285.1009537645
EGRANTPROCLOB.286.1009537645
EGRANTPROCLOB.287.1009537645
EGRANTPROCLOB.288.1009537719
EGRANTPROCLOB.295.1009537799
EGRANTPROCLOB.296.1009537801
SYSAUX.292.1009537773
SYSTEM.289.1009537719
UNDO1.293.1009537775
UNDO2.294.1009537779
USERS.291.1009537719
egrantdatas.001.dbf
egrantdatas.002.dbf
egrantdatas.003.dbf
egrantdatas.004.dbf
egrantdatas.005.dbf
egrantdatas.006.dbf
egrantdatas.007.dbf
egrantdatas.008.dbf
egrantdatas.009.dbf
egrantproclob.001.dbf
egrantproclob.002.dbf
egrantproclob.003.dbf
egrantproclob.004.dbf
egrantproclob.005
egrantproclob.006.dbf
egrantproclob.007.dbf
egrantproclob.008.dbf
egrantproclob.009.dbf
egrantproclob.010.dbf
egrantproclob.011.dbf
egrantproclob.012.dbf
undo01.dbf
undo02.dbf
  • 尝试开库
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ??


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:

这里有三个问题需要解决
1.出现了问号,需要设置NLS_LANG环境变量
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
2.不能直接用alter database open;命令,因为是不完全恢复,因此需要通过alter database open resetlogs;打开。
3.通过alter database open resetlogs;开库时出现报错
ORA-01152: 文件 1 没有从过旧的备份中还原
ORA-01110: 数据文件 1: ‘+DATA/racpdb/datafile/system.289.1009537719’
解决办法:
需要对数据进行recover

RMAN> recover database;

Starting recover at 2019-05-29 14:51:41
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=7380 instance=racpdb1 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=1 instance=racpdb1 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=158 instance=racpdb1 device type=DISK
allocated channel: ORA_DISK_4
channel ORA_DISK_4: SID=316 instance=racpdb1 device type=DISK

starting media recovery

channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=2 sequence=21314
channel ORA_DISK_1: reading from backup piece /backup/5iu2i2ah_1_1
channel ORA_DISK_2: starting archived log restore to default destination
channel ORA_DISK_2: restoring archived log
archived log thread=1 sequence=27063
channel ORA_DISK_2: reading from backup piece /backup/5ju2i2ah_1_1
channel ORA_DISK_3: starting archived log restore to default destination
channel ORA_DISK_3: restoring archived log
archived log thread=1 sequence=27064
channel ORA_DISK_3: reading from backup piece /backup/5mu2i8ci_1_1
channel ORA_DISK_4: starting archived log restore to default destination
channel ORA_DISK_4: restoring archived log
archived log thread=2 sequence=21315
channel ORA_DISK_4: reading from backup piece /backup/5nu2i8ci_1_1
channel ORA_DISK_1: piece handle=/backup/5iu2i2ah_1_1 tag=ARCBACKUP_RACPDB_0_052619111803
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_DISK_2: piece handle=/backup/5ju2i2ah_1_1 tag=ARCBACKUP_RACPDB_0_052619111803
channel ORA_DISK_2: restored backup piece 1
channel ORA_DISK_2: restore complete, elapsed time: 00:00:03
archived log file name=+FRA/racpdb/archivelog/2019_05_29/thread_1_seq_27063.264.1009551115 thread=1 sequence=27063
archived log file name=+FRA/racpdb/archivelog/2019_05_29/thread_2_seq_21314.262.1009551115 thread=2 sequence=21314
channel default: deleting archived log(s)
archived log file name=+FRA/racpdb/archivelog/2019_05_29/thread_1_seq_27063.264.1009551115 RECID=46832 STAMP=1009551115
channel ORA_DISK_4: piece handle=/backup/5nu2i8ci_1_1 tag=FULLBACKUP_RACPDB__052619100007
channel ORA_DISK_4: restored backup piece 1
channel ORA_DISK_4: restore complete, elapsed time: 00:00:04
channel ORA_DISK_3: piece handle=/backup/5mu2i8ci_1_1 tag=FULLBACKUP_RACPDB__052619100007
channel ORA_DISK_3: restored backup piece 1
channel ORA_DISK_3: restore complete, elapsed time: 00:00:08
archived log file name=+FRA/racpdb/archivelog/2019_05_29/thread_1_seq_27064.263.1009551115 thread=1 sequence=27064
channel default: deleting archived log(s)
archived log file name=+FRA/racpdb/archivelog/2019_05_29/thread_2_seq_21314.262.1009551115 RECID=46833 STAMP=1009551116
archived log file name=+FRA/racpdb/archivelog/2019_05_29/thread_2_seq_21315.266.1009551115 thread=2 sequence=21315
channel default: deleting archived log(s)
archived log file name=+FRA/racpdb/archivelog/2019_05_29/thread_2_seq_21315.266.1009551115 RECID=46834 STAMP=1009551116
unable to find archived log
archived log thread=2 sequence=21316
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 05/29/2019 14:52:06
RMAN-06054: media recovery requesting unknown archived log for thread 2 with sequence 21316 and starting SCN of 2674576144

解决:直接恢复到SCN点2674576144

RMAN> recover database until scn 2674576144;

Starting recover at 2019-05-29 14:55:09
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
using channel ORA_DISK_4

starting media recovery
media recovery complete, elapsed time: 00:00:04

Finished recover at 2019-05-29 14:55:16

RMAN> exit


Recovery Manager complete.

10 打开数据库

[oracle@rac1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Wed May 29 14:55:28 2019

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> alter database open resetlogs;

Database altered.

至此,节点1的数据库已经恢复

11 节点2的恢复

把pfile从节点1 scp到节点二,然后通过pfile启动至nomount,创建spfile,打开数据库。

注意,spfile里的路径都要存在。控制文件等位置或相应部分进行修改。

12 添加注册信息

  • 添加数据库
su - oracle

[oracle@rac2 ~]$ srvctl add database -d racpdb -o /u01/app/oracle/product/11.2.0/dbhome_1 -p /u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfileracpdb.ora
  • 添加实例
[oracle@rac2 ~]$ srvctl add instance -d racpdb -i racpdb1 -n rac1
[oracle@rac2 ~]$ srvctl add instance -d racpdb -i racpdb2 -n rac2

其中,各项参数代表

-d db_unique_name 
-o oracle_home;
-p spfile_path
-i instance_name
-n node_name
  • 如果要删除一个实例或数据库
    srvctl remove instance -d racdb -i racdb1
    srvctl remove database -d racdb -i racdb1

  • 查看数据库配置

[grid@rac2 ~]$ srvctl config database -d racpdb
数据库唯一名称: racpdb
数据库名:
Oracle 主目录: /u01/app/oracle/product/11.2.0/dbhome_1
Oracle 用户: oracle
Spfile: /u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfileracpdb.ora
域:
启动选项: open
停止选项: immediate
数据库角色: PRIMARY
管理策略: AUTOMATIC
服务器池: racpdb
数据库实例: racpdb1,racpdb2
磁盘组:
装载点路径:
服务:
类型: RAC
数据库是管理员管理的

13 启动两个节点的数据库

[grid@rac2 ~]$ crs_stat -t|grep db   
ora.oradb.db   ora....se.type OFFLINE   OFFLINE               
ora.racpdb.db  ora....se.type OFFLINE   OFFLINE               
[grid@rac2 ~]$ srvctl status database -d racpdb
实例 racpdb1 没有在 rac1 节点上运行
实例 racpdb2 没有在 rac2 节点上运行

#	虽然添加了database信息,但是database的状态是错误的
# crs_stat显示db没有online,实际db是启动的
# 重新启动
[grid@rac2 ~]$ srvctl start database -d racpdb
[grid@rac2 ~]$ srvctl status database -d racpdb
实例 racpdb1 正在节点 rac1 上运行
实例 racpdb2 正在节点 rac2 上运行

问题集锦

1 在启动INSTANCE的时候报ORA-00845错误
[grid@rac2 ~]$ srvctl start database -d racpdb
PRCR-1079 : 无法启动资源 ora.racpdb.db
CRS-5017: The resource action "ora.racpdb.db start" encountered the following error:
ORA-00845: MEMORY_TARGET not supported on this system
. For details refer to "(:CLSN00107:)" in "/u01/app/11.2.0/grid/log/rac2/agent/crsd/oraagent_oracle/oraagent_oracle.log".

CRS-5017: The resource action "ora.racpdb.db start" encountered the following error:
ORA-00845: MEMORY_TARGET not supported on this system
. For details refer to "(:CLSN00107:)" in "/u01/app/11.2.0/grid/log/rac1/agent/crsd/oraagent_oracle/oraagent_oracle.log".

CRS-2674: Start of 'ora.racpdb.db' on 'rac2' failed
CRS-2674: Start of 'ora.racpdb.db' on 'rac1' failed
CRS-2632: There are no more servers to try to place resource 'ora.racpdb.db' on that would satisfy its placement policy
  • 官方解释
    Starting with Oracle Database 11g, the Automatic Memory Management feature requires more shared memory (/dev/shm)and file descriptors. The size of the shared memory should be at least the greater of MEMORY_MAX_TARGET and MEMORY_TARGET for each Oracle instance on the computer. If MEMORY_MAX_TARGET or MEMORY_TARGET is set to a non zero value, and an incorrect size is assigned to the shared memory, it will result in an ORA-00845 error at startup.

究其原因就是Linux系统的shm的大小比SGA设置的小造成的。
简单来说就是 MEMORY_MAX_TARGET 的设置不能超过 /dev/shm 的大小。

查看参数文件找到SGA的大小
*.memory_target=61001957376

通过df -h查看shm的大小

  • 两种解决办法

1.调整sga的大小,这个明显不是我们所希望的

2.调整shm的大小,这样相对简单,具体操作如下
可以通过重新挂载来修改其大小
mount -o remount,size=60G /dev/shm

也可以通过重启使这个配置生效
vi /etc/fstab
修改如下行的设置
tmpfs /dev/shm tmpfs defaults 0 0
改成
tmpfs /dev/shm tmpfs defaults,size=60G 0 0
保存退出
重新mount下shm使其生效
mount -o remount /dev/shm
通过df可以查看下,没有问题就可以启动数据库了!

2 ORA-01078、ORA-01565:spfile损坏
[grid@rac2 ~]$ srvctl start database -d racpdb
PRCC-1014 : racpdb 已在运行
PRCR-1004 : 资源 ora.racpdb.db 已在运行
PRCR-1079 : 无法启动资源 ora.racpdb.db
CRS-5017: The resource action "ora.racpdb.db start" encountered the following error:
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfileracpdb.ora'
ORA-27046: file size is not a multiple of logical block size
Additional information: 1
. For details refer to "(:CLSN00107:)" in "/u01/app/11.2.0/grid/log/rac2/agent/crsd/oraagent_oracle/oraagent_oracle.log".

CRS-2674: Start of 'ora.racpdb.db' on 'rac2' failed
CRS-2528: Unable to place an instance of 'ora.racpdb.db' as all possible servers are occupied by the resource

但是用pfile却可以重新启动。

解决办法:
用pfile启动,从pfile重新创建spfile。

SQL> startup pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initracpdb.ora';
ORACLE instance started.

Total System Global Area 6.0796E+10 bytes
Fixed Size        2268072 bytes
Variable Size    2.9931E+10 bytes
Database Buffers   3.0736E+10 bytes
Redo Buffers      127741952 bytes
Database mounted.
Database opened.
SQL> show parameter control_

NAME             TYPE  VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time      integer   7
control_files          string  +DATA/racpdb/controlfile/curre
             nt.271.1009534661, +FRA/racpdb
             /controlfile/current.265.10095
             34661
control_management_pack_access       string  DIAGNOSTIC+TUNING
SQL> create spfile from pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initracpdb.ora';

File created.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 6.0796E+10 bytes
Fixed Size        2268072 bytes
Variable Size    2.9931E+10 bytes
Database Buffers   3.0736E+10 bytes
Redo Buffers      127741952 bytes
Database mounted.
Database opened.

启动正常。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值