前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ASM的备份集在文件系统上恢复测试常见问题

ASM的备份集在文件系统上恢复测试常见问题

作者头像
Alfred Zhao
发布于 2019-05-24 12:09:42
发布于 2019-05-24 12:09:42
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

背景:最近时常有客户咨询这类问题,其实很简单一个操作,但由于每个人的理解差异,也容易出现各种问题或者误解,本文主要总结下这个过程以及常遇到的问题处理。 环境:Site A(Oracle RAC 11.2.0.4) + Site B(Single Instance DB 11.2.0.4,只安装了DB软件) 需求:使用Site A的备份,恢复数据到Site B环境。

1.备份数据库和控制文件

一般使用ASM的场景是RAC,当然也有单机使用ASM的环境(Standalone)。这些都不重要,即使是使用的文件系统,备份数据库的方法也都是一样的。 首先备份Site A的数据库,然后备份Site A最新的控制文件,示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--备份数据库:
RMAN> backup as compressed backupset database format '/public/hotback/primary_db_%d_%T_%s.bak';

--备份控制文件:
RMAN> backup current controlfile format '/public/hotback/primary_ctl.bak';

2.恢复数据库

现在我们有了Site A的数据库和控制文件的备份文件,传输到Site B端,使得Site B可以有权限看到这些备份集。 我这里的备份集是在我的NAS存储上,可以在Site B直接看到这些备份集。

我们想一下,目前Site B是只有11.2.0.4的数据库软件,没有任何库,现在需要将Site A的备份导入到Site B中,那么我们至少需要有参数文件,控制文件,数据文件。

  • 参数文件,可以考虑从Site A中备份一个并修改,也可以自己手工写一个,目的是把数据库先启动到nomount状态;
  • 控制文件,在数据库已经nomount的基础上,根据备份集恢复出控制文件,并确认可以mount数据库;
  • 数据文件,在数据库已经mount的基础上,设定要恢复数据文件的目录,根据备份集恢复数据库,最终确认可以open数据库。

思路就是这么简单,但是实际做的时候,我们来看下具体会有哪些常见的问题和误解,导致操作遇到问题。

恢复数据库大体步骤:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--1.参数文件,nomount
vi /tmp/pfile.ora11204
db_name=jingyu

sqlplus / as sysdba
startup nomount pfile='/tmp/pfile.ora11204';

--2.控制文件,mount
rman target /
restore controlfile from '/public/hotback/primary_ctl.bak';
alter database mount;

--3.数据文件,open
run {
    set newname for database to '/u01/oradata/%U';
    restore database;
    switch database to copy;
}

常见问题1:数据库mount报错ORA-00201

现象如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RMAN> alter database mount;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 09/01/2017 11:07:34
ORA-00201: control file version 11.2.0.4.0 incompatible with ORACLE version 11.2.0.0.0
ORA-00202: control file: '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/cntrljingyu.dbf'

这个问题报错提示很明显,就是说控制文件的版本11.2.0.4.0 和Oracle的版本11.2.0.0.0 不兼容,解决也很简单,在手工创建的参数文件中加入参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compatible=11.2.0.4

这样就可以解决这个报错。

常见问题2:数据库mount报错ORA-01103

现象如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RMAN> alter database mount;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 09/01/2017 11:18:14
ORA-01103: database name 'JYZHAO' in control file is not 'JINGYU'

这个问题更明显,是数据库的db_name定义有问题,和要恢复的数据库的db_name不一致,只需要修正参数文件的db_name参数即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db_name=jyzhao

这样就可以解决这个报错。

常见问题3:数据库mount成功后数据文件的路径是ASM磁盘的路径

现象如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
+DATA1/jyzhao/datafile/system.256.919998779
+DATA1/jyzhao/datafile/sysaux.257.919998781
+DATA1/jyzhao/datafile/undotbs1.258.919998783
+DATA1/jyzhao/datafile/users.259.919998789
+DATA1/jyzhao/datafile/undotbs2.264.919999419
+DATA1/jyzhao/datafile/dbs_d_jingyu.268.947072261
+DATA1/jyzhao/datafile/dbs_i_jingyu.270.947072263
+DATA1/jyzhao/datafile/test.271.947072293
+DATA1/jyzhao/datafile/test2.272.947072883
+DATA1/jyzhao/datafile/dbadata.275.952933837

10 rows selected.

这本来是天经地义的一件事,因为之前的数据库是在ASM环境,控制文件也是之前环境备份出来的,记录的肯定是ASM的路径无疑。 但是很多新手这里由于理解不到位,不理解,甚至直接继续去尝试从备份集中restore数据库,那自然会报错,以为这些ASM的路径,在新的环境根本就不存在。

那么正确的做法是,规划好新的环境存放数据文件的目录,分配好权限,然后恢复前需要使用set newname来指定新的目录,注意是在run块中操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--很多时候需要将备份集catalog进新的环境,我这里由于是环境特殊,路径没变,所以不需要。
--catalog start with '/public/hotback/';

--restore数据库
run {
    set newname for database to '/u01/oradata/%U';
    restore database;
}

--切换数据库到copy备份
switch database to copy;

实际操作过程如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RMAN> run {
2>      set newname for database to '/u01/oradata/%U';
3>      restore database;
4> }

executing command: SET NEWNAME

Starting restore at 2017-09-01 11:24:54
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=171 device type=DISK

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 00001 to /u01/oradata/data_D-JYZHAO_TS-SYSTEM_FNO-1
channel ORA_DISK_1: restoring datafile 00002 to /u01/oradata/data_D-JYZHAO_TS-SYSAUX_FNO-2
channel ORA_DISK_1: restoring datafile 00003 to /u01/oradata/data_D-JYZHAO_TS-UNDOTBS1_FNO-3
channel ORA_DISK_1: restoring datafile 00004 to /u01/oradata/data_D-JYZHAO_TS-USERS_FNO-4
channel ORA_DISK_1: restoring datafile 00005 to /u01/oradata/data_D-JYZHAO_TS-UNDOTBS2_FNO-5
channel ORA_DISK_1: restoring datafile 00006 to /u01/oradata/data_D-JYZHAO_TS-DBS_D_JINGYU_FNO-6
channel ORA_DISK_1: restoring datafile 00007 to /u01/oradata/data_D-JYZHAO_TS-DBS_I_JINGYU_FNO-7
channel ORA_DISK_1: restoring datafile 00008 to /u01/oradata/data_D-JYZHAO_TS-TEST_FNO-8
channel ORA_DISK_1: restoring datafile 00009 to /u01/oradata/data_D-JYZHAO_TS-TEST2_FNO-9
channel ORA_DISK_1: restoring datafile 00011 to /u01/oradata/data_D-JYZHAO_TS-DBADATA_FNO-11
channel ORA_DISK_1: reading from backup piece /public/hotback/primary_db_JYZHAO_20170901_246.bak
channel ORA_DISK_1: piece handle=/public/hotback/primary_db_JYZHAO_20170901_246.bak tag=TAG20170901T225631
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:15:15
Finished restore at 2017-09-01 11:40:10

RMAN> list copy of database;

List of Datafile Copies
=======================

Key     File S Completion Time     Ckp SCN    Ckp Time           
------- ---- - ------------------- ---------- -------------------
8       1    A 2017-09-01 11:32:57 16152838   2017-09-01 22:56:31
        Name: /u01/oradata/data_D-JYZHAO_TS-SYSTEM_FNO-1

9       2    A 2017-09-01 11:36:01 16152838   2017-09-01 22:56:31
        Name: /u01/oradata/data_D-JYZHAO_TS-SYSAUX_FNO-2

7       3    A 2017-09-01 11:26:30 16152838   2017-09-01 22:56:31
        Name: /u01/oradata/data_D-JYZHAO_TS-UNDOTBS1_FNO-3

4       4    A 2017-09-01 11:25:27 16152838   2017-09-01 22:56:31
        Name: /u01/oradata/data_D-JYZHAO_TS-USERS_FNO-4

6       5    A 2017-09-01 11:26:14 16152838   2017-09-01 22:56:31
        Name: /u01/oradata/data_D-JYZHAO_TS-UNDOTBS2_FNO-5

5       6    A 2017-09-01 11:25:32 16152838   2017-09-01 22:56:31
        Name: /u01/oradata/data_D-JYZHAO_TS-DBS_D_JINGYU_FNO-6

2       7    A 2017-09-01 11:25:17 16152838   2017-09-01 22:56:31
        Name: /u01/oradata/data_D-JYZHAO_TS-DBS_I_JINGYU_FNO-7

3       8    A 2017-09-01 11:25:20 16152838   2017-09-01 22:56:31
        Name: /u01/oradata/data_D-JYZHAO_TS-TEST_FNO-8

1       9    A 2017-09-01 11:24:57 16152838   2017-09-01 22:56:31
        Name: /u01/oradata/data_D-JYZHAO_TS-TEST2_FNO-9

10      11   A 2017-09-01 11:38:09 16152838   2017-09-01 22:56:31
        Name: /u01/oradata/data_D-JYZHAO_TS-DBADATA_FNO-11


RMAN> switch database to copy;

datafile 1 switched to datafile copy "/u01/oradata/data_D-JYZHAO_TS-SYSTEM_FNO-1"
datafile 2 switched to datafile copy "/u01/oradata/data_D-JYZHAO_TS-SYSAUX_FNO-2"
datafile 3 switched to datafile copy "/u01/oradata/data_D-JYZHAO_TS-UNDOTBS1_FNO-3"
datafile 4 switched to datafile copy "/u01/oradata/data_D-JYZHAO_TS-USERS_FNO-4"
datafile 5 switched to datafile copy "/u01/oradata/data_D-JYZHAO_TS-UNDOTBS2_FNO-5"
datafile 6 switched to datafile copy "/u01/oradata/data_D-JYZHAO_TS-DBS_D_JINGYU_FNO-6"
datafile 7 switched to datafile copy "/u01/oradata/data_D-JYZHAO_TS-DBS_I_JINGYU_FNO-7"
datafile 8 switched to datafile copy "/u01/oradata/data_D-JYZHAO_TS-TEST_FNO-8"
datafile 9 switched to datafile copy "/u01/oradata/data_D-JYZHAO_TS-TEST2_FNO-9"
datafile 11 switched to datafile copy "/u01/oradata/data_D-JYZHAO_TS-DBADATA_FNO-11"

RMAN>  list copy of database;

specification does not match any datafile copy in the repository

RMAN> 

switch database to copy前后,查询v$datafile的内容对比如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> /

NAME
--------------------------------------------------------------------------------
+DATA1/jyzhao/datafile/system.256.919998779
+DATA1/jyzhao/datafile/sysaux.257.919998781
+DATA1/jyzhao/datafile/undotbs1.258.919998783
+DATA1/jyzhao/datafile/users.259.919998789
+DATA1/jyzhao/datafile/undotbs2.264.919999419
+DATA1/jyzhao/datafile/dbs_d_jingyu.268.947072261
+DATA1/jyzhao/datafile/dbs_i_jingyu.270.947072263
+DATA1/jyzhao/datafile/test.271.947072293
+DATA1/jyzhao/datafile/test2.272.947072883
+DATA1/jyzhao/datafile/dbadata.275.952933837

10 rows selected.

SQL> /

NAME
--------------------------------------------------------------------------------
/u01/oradata/data_D-JYZHAO_TS-SYSTEM_FNO-1
/u01/oradata/data_D-JYZHAO_TS-SYSAUX_FNO-2
/u01/oradata/data_D-JYZHAO_TS-UNDOTBS1_FNO-3
/u01/oradata/data_D-JYZHAO_TS-USERS_FNO-4
/u01/oradata/data_D-JYZHAO_TS-UNDOTBS2_FNO-5
/u01/oradata/data_D-JYZHAO_TS-DBS_D_JINGYU_FNO-6
/u01/oradata/data_D-JYZHAO_TS-DBS_I_JINGYU_FNO-7
/u01/oradata/data_D-JYZHAO_TS-TEST_FNO-8
/u01/oradata/data_D-JYZHAO_TS-TEST2_FNO-9
/u01/oradata/data_D-JYZHAO_TS-DBADATA_FNO-11

10 rows selected.

常见问题4:数据库open不成功

查询控制文件和数据文件头记录的检查点信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
col checkpoint_change# for 999999999999
select checkpoint_change# from v$database;
select checkpoint_change# from v$datafile;
select checkpoint_change# from v$datafile_header;

查询结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
          16113160

SQL> select checkpoint_change# from v$datafile;

CHECKPOINT_CHANGE#
------------------
          16152838
          16152838
          16152838
          16152838
          16152838
          16152838
          16152838
          16152838
          16152838
          16152838

10 rows selected.

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
          16152838
          16152838
          16152838
          16152838
          16152838
          16152838
          16152838
          16152838
          16152838
          16152838

10 rows selected.

SQL> select current_scn||'' from v$database;

CURRENT_SCN||''
----------------------------------------
0

此时数据库直接open肯定是不成功的,会报错如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL>  alter database open;
 alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

因为之前的备份只有数据库,没有完整的归档,最终做的是不完全恢复,开库必须要指定resetlogs,在尝试resetlogs之前,我们来看下redo的信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                                                 IS_
---------- ------- ------- ---------------------------------------------------------------------- ---
         2         ONLINE  +DATA1/jyzhao/onlinelog/group_2.262.919999045                          NO
         2         ONLINE  +FRA1/jyzhao/onlinelog/group_2.258.919999049                           YES
         1         ONLINE  +DATA1/jyzhao/onlinelog/group_1.261.919999039                          NO
         1         ONLINE  +FRA1/jyzhao/onlinelog/group_1.257.919999041                           YES
         3         ONLINE  +DATA1/jyzhao/onlinelog/group_3.265.919999607                          NO
         3         ONLINE  +FRA1/jyzhao/onlinelog/group_3.259.919999611                           YES
         4         ONLINE  +DATA1/jyzhao/onlinelog/group_4.266.919999613                          NO
         4         ONLINE  +FRA1/jyzhao/onlinelog/group_4.260.919999615                           YES
        11         STANDBY +FRA1/jyzhao/standbylog/standby_group_11.log                           NO
        12         STANDBY +FRA1/jyzhao/standbylog/standby_group_12.log                           NO
        13         STANDBY +FRA1/jyzhao/standbylog/standby_group_13.log                           NO

    GROUP# STATUS  TYPE    MEMBER                                                                 IS_
---------- ------- ------- ---------------------------------------------------------------------- ---
        21         STANDBY +FRA1/jyzhao/standbylog/standby_group_21.log                           NO
        22         STANDBY +FRA1/jyzhao/standbylog/standby_group_22.log                           NO
        23         STANDBY +FRA1/jyzhao/standbylog/standby_group_23.log                           NO

14 rows selected.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME          NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------------- ------------ -------------------
         1          1       1094   52428800        512          2 YES INACTIVE              16128216 2017-09-01 22:02:05     16136911 2017-09-01 22:12:09
         2          1       1095   52428800        512          2 NO  CURRENT               16136911 2017-09-01 22:12:09   2.8147E+14
         3          2        872   52428800        512          2 NO  CURRENT               16113160 2017-09-01 21:32:38   2.8147E+14
         4          2        871   52428800        512          2 YES INACTIVE              16073483 2017-09-01 20:42:15     16113160 2017-09-01 21:32:38

这些redo日志路径还定义在ASM磁盘组上,显然是不合我们要求的,所以我们需要在新的文件系统路径下创建新的redo日志文件,并删除ASM的那些日志文件,同时我们现在的环境是单实例,不再需要thread 2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alter database add logfile group 5 '/u01/oradata/redo01.log' size 50M;
alter database add logfile group 6 '/u01/oradata/redo02.log' size 50M;
alter database add logfile group 7 '/u01/oradata/redo03.log' size 50M;

alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;
alter database drop logfile group 4;

alter database drop logfile group 11;
alter database drop logfile group 12;
alter database drop logfile group 13;
alter database drop logfile group 21;
alter database drop logfile group 22;
alter database drop logfile group 23;

alter database disable thread 2;

实际操作发现下面这些操作无法成功,报错主要是ORA-01623,ORA-01567,ORA-01109:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> alter database drop logfile group 2;
alter database drop logfile group 2
*
ERROR at line 1:
ORA-01623: log 2 is current log for instance jyzhao (thread 1) - cannot drop
ORA-00312: online log 2 thread 1: '+DATA1/jyzhao/onlinelog/group_2.262.919999045'
ORA-00312: online log 2 thread 1: '+FRA1/jyzhao/onlinelog/group_2.258.919999049'


SQL> alter database drop logfile group 3;
alter database drop logfile group 3
*
ERROR at line 1:
ORA-01623: log 3 is current log for instance jyzhao2 (thread 2) - cannot drop
ORA-00312: online log 3 thread 2: '+DATA1/jyzhao/onlinelog/group_3.265.919999607'
ORA-00312: online log 3 thread 2: '+FRA1/jyzhao/onlinelog/group_3.259.919999611'


SQL> alter database drop logfile group 4;
alter database drop logfile group 4
*
ERROR at line 1:
ORA-01567: dropping log 4 would leave less than 2 log files for instance jyzhao2 (thread 2)
ORA-00312: online log 4 thread 2: '+DATA1/jyzhao/onlinelog/group_4.266.919999613'
ORA-00312: online log 4 thread 2: '+FRA1/jyzhao/onlinelog/group_4.260.919999615'


SQL> alter database disable thread 2;
alter database disable thread 2
*
ERROR at line 1:
ORA-01109: database not open

其实这些报错提示都特别明显,要么是当前日志不能删除,要么是不能少于2组日志,要么是数据库没有open。

此时的现状是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL>  select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                                                 IS_
---------- ------- ------- ---------------------------------------------------------------------- ---
         2         ONLINE  +DATA1/jyzhao/onlinelog/group_2.262.919999045                          NO
         2         ONLINE  +FRA1/jyzhao/onlinelog/group_2.258.919999049                           YES
         3         ONLINE  +DATA1/jyzhao/onlinelog/group_3.265.919999607                          NO
         3         ONLINE  +FRA1/jyzhao/onlinelog/group_3.259.919999611                           YES
         4         ONLINE  +DATA1/jyzhao/onlinelog/group_4.266.919999613                          NO
         4         ONLINE  +FRA1/jyzhao/onlinelog/group_4.260.919999615                           YES
         5         ONLINE  /u01/oradata/redo01.log                                                NO
         6         ONLINE  /u01/oradata/redo02.log                                                NO
         7         ONLINE  /u01/oradata/redo03.log                                                NO

9 rows selected.


SQL> SELECT * FROM V$LOGFILE;

    GROUP# STATUS  TYPE    MEMBER                                                                 IS_
---------- ------- ------- ---------------------------------------------------------------------- ---
         2 INVALID ONLINE  +data1                                                                 NO
         2 INVALID ONLINE  +fra1                                                                  YES
         3 INVALID ONLINE  +data1                                                                 NO
         3 INVALID ONLINE  +fra1                                                                  YES
         4 INVALID ONLINE  +data1                                                                 NO
         4 INVALID ONLINE  +fra1                                                                  YES
         5         ONLINE  /u01/oradata/redo01.log                                                NO
         6         ONLINE  /u01/oradata/redo02.log                                                NO
         7         ONLINE  /u01/oradata/redo03.log                                                NO

9 rows selected.

SQL> SELECT * FROM V$LOG;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME          NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------------- ------------ -------------------
         6          1          0   52428800        512          1 YES UNUSED                       0                                0
         2          1          0   52428800        512          2 NO  CLEARING_CURRENT      16136911 2017-09-01 22:12:09   2.8147E+14
         7          1          0   52428800        512          1 YES UNUSED                       0                                0
         5          1          0   52428800        512          1 YES UNUSED                       0                                0
         3          2          0   52428800        512          2 NO  CLEARING_CURRENT      16113160 2017-09-01 21:32:38   2.8147E+14
         4          2          0   52428800        512          2 YES CLEARING              16073483 2017-09-01 20:42:15     16113160 2017-09-01 21:32:38

6 rows selected.

利用重建控制文件删除那些无用的redo路径:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> alter database backup controlfile to trace as '/tmp/control.bak0901';

Database altered.

SQL> create spfile from pfile='/tmp/pfile.ora11204';

File created.
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup nomount

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "JYZHAO" NORESETLOGS FORCE LOGGING ARCHIVELOG
    MAXLOGFILES 192
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 32
    MAXLOGHISTORY 1168
LOGFILE
  GROUP 5 '/u01/oradata/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 6 '/u01/oradata/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 7 '/u01/oradata/redo03.log'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/u01/oradata/data_D-JYZHAO_TS-SYSTEM_FNO-1',
  '/u01/oradata/data_D-JYZHAO_TS-SYSAUX_FNO-2',
  '/u01/oradata/data_D-JYZHAO_TS-UNDOTBS1_FNO-3',
  '/u01/oradata/data_D-JYZHAO_TS-USERS_FNO-4',
  '/u01/oradata/data_D-JYZHAO_TS-UNDOTBS2_FNO-5',
  '/u01/oradata/data_D-JYZHAO_TS-DBS_D_JINGYU_FNO-6',
  '/u01/oradata/data_D-JYZHAO_TS-DBS_I_JINGYU_FNO-7',
  '/u01/oradata/data_D-JYZHAO_TS-TEST_FNO-8',
  '/u01/oradata/data_D-JYZHAO_TS-TEST2_FNO-9',
  '/u01/oradata/data_D-JYZHAO_TS-DBADATA_FNO-11'
CHARACTER SET ZHS16GBK
;

CREATE CONTROLFILE REUSE DATABASE "JYZHAO" NORESETLOGS FORCE LOGGING ARCHIVELOG
*
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01192: must have at least one enabled thread

报错ORA-01503,ORA-01192。

根据报错,再次重建控制文件(注意关键字变化),创建成功:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE CONTROLFILE set DATABASE "JYZHAO" RESETLOGS FORCE LOGGING ARCHIVELOG
    MAXLOGFILES 192
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 32
    MAXLOGHISTORY 1168
LOGFILE
  GROUP 5 '/u01/oradata/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 6 '/u01/oradata/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 7 '/u01/oradata/redo03.log'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/u01/oradata/data_D-JYZHAO_TS-SYSTEM_FNO-1',
  '/u01/oradata/data_D-JYZHAO_TS-SYSAUX_FNO-2',
  '/u01/oradata/data_D-JYZHAO_TS-UNDOTBS1_FNO-3',
  '/u01/oradata/data_D-JYZHAO_TS-USERS_FNO-4',
  '/u01/oradata/data_D-JYZHAO_TS-UNDOTBS2_FNO-5',
  '/u01/oradata/data_D-JYZHAO_TS-DBS_D_JINGYU_FNO-6',
  '/u01/oradata/data_D-JYZHAO_TS-DBS_I_JINGYU_FNO-7',
  '/u01/oradata/data_D-JYZHAO_TS-TEST_FNO-8',
  '/u01/oradata/data_D-JYZHAO_TS-TEST2_FNO-9',
  '/u01/oradata/data_D-JYZHAO_TS-DBADATA_FNO-11'
CHARACTER SET ZHS16GBK
;

创建成功.

再次尝试open数据库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-38856: cannot mark instance UNNAMED_INSTANCE_2 (redo thread 2) as enabled

根据报错ORA-38856匹配到MOS文档: RMAN Duplicate from RAC backup fails ORA-38856 (文档 ID 334899.1)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
As a workaround you could do the following:
1.Set the following parameter in the auxiliary init.ora file:
_no_recovery_through_resetlogs=TRUE
Then open with resetlogs;
Once the auxiliary is opened, remove this hidden parameter.

也就是可以指定参数 _no_recovery_through_resetlogs=TRUE.然后resetlogs成功后再移除此参数,再重启数据库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> show parameter _no_recovery_through_resetlogs

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
_no_recovery_through_resetlogs       boolean     TRUE

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME          NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------------- ------------ -------------------
         5          1          1   52428800        512          1 NO  CURRENT               16152839 2017-09-01 12:14:36   2.8147E+14
         6          1          0   52428800        512          1 YES UNUSED                       0                                0
         7          1          0   52428800        512          1 YES UNUSED                       0                                0

SQL> 
SQL> 
SQL> 
SQL> select * from v$Logfile;

    GROUP# STATUS  TYPE    MEMBER                                                       IS_
---------- ------- ------- ------------------------------------------------------------ ---
         7         ONLINE  /u01/oradata/redo03.log                                      NO
         6         ONLINE  /u01/oradata/redo02.log                                      NO
         5         ONLINE  /u01/oradata/redo01.log                                      NO

SQL> 

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

Total System Global Area  229683200 bytes
Fixed Size                  2251936 bytes
Variable Size             171967328 bytes
Database Buffers           50331648 bytes
Redo Buffers                5132288 bytes
Database mounted.
Database opened.
SQL> 

观察告警日志,看是否有报错警告提示信息之类,发现如下信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*********************************************************************
WARNING: The following temporary tablespaces contain no files.
         This condition can occur when a backup controlfile has
         been restored.  It may be necessary to add files to these
         tablespaces.  That can be done using the SQL statement:
 
         ALTER TABLESPACE <tablespace_name> ADD TEMPFILE
 
         Alternatively, if these temporary tablespaces are no longer
         needed, then they can be dropped.
           Empty temporary tablespace: TEMP
           Empty temporary tablespace: TEMP_JINGYU
*********************************************************************

很简单,临时表空间没有具体的临时文件,添加即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLESPACE temp ADD TEMPFILE '/u01/oradata/temp01.dbf' size 30G;
ALTER TABLESPACE temp_jingyu ADD TEMPFILE '/u01/oradata/temp_jingyu01.dbf' size 30G;

本文完。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-09-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
php获取客户端IP和服务器端IP[通俗易懂]
在PHP获取客户端IP时,常使用 _SERVER[“REMOTE_ADDR”] 。但如果客户端是使用代理服务器来访问,那取到的是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用_SERVER[“HTTP_X_FORWARDED_FOR”]来读取。
全栈程序员站长
2022/11/15
4.9K0
ThinkPHP6使用中间件过滤来源网址或IP
使用ThinkPHP6开发接口时会遇到前置过滤或判断,我们可以使用中间件功能。以下是单应用模式示例:
XiaoA
2023/06/23
5210
看我如何定位骗子,找出幕后诈骗的黑手(上)
临近年末,很多诈骗犯已经跃跃欲试了,用各种套路来坑你的血汗钱,所以我们要用所学到的东西来保护自己,其实I春秋社区有一个神秘的讨论组,每天就是抓骗子,帮妖妖灵的蜀黍干点杂货,惩恶扬善,具体找坏蛋咨询 为了写好这篇文章,列了一个大纲,对比来看,会比较容易看 因篇幅较长,所以打算分成两篇来写 第一篇:QQ定位+ip定位+常见钓鱼方法及反击+诈骗模式 第二篇:诈骗心理学+行为习惯+常见木马诈骗及反击+另类工具使用擒获幕后黑手
HACK学习
2019/08/07
11.3K4
看我如何定位骗子,找出幕后诈骗的黑手(上)
PHP获取ip地址
老猫-Leo
2023/12/11
4100
一张小图片轻松获知对方是否查阅你的邮件,像素标签简单用法
素标签这类技术其实已经在很多商业网站中有涉及到,但是很多网站不会明确的指明。也有的叫做“埋点技术”,即用来收集用户的点击事件来分析用户的喜好。就像 apple 声明的那样,一般不会将用户操作情况和用户的身份绑定,仅仅用来分析网站的运行情况。
王图思睿
2021/06/16
8810
哎,我早就料到你获取IP地址的姿势不对啦!
来源:https://blog.csdn.net/takeurhand/article/details/52512200
用户5224393
2019/10/10
3.3K2
Logstash的grok表达式与Filebeat的日志过滤
grok为Logstash 的Filter的一个插件,又因为存在表达式要配置,最开始当成过滤条件的配置了。随着深入了解,发现这个只是一个数据结构化转换工具,主要作用就是把String类型的字符串转为key-value形式。
WindCoder
2018/09/19
5.1K0
PHP函数大全·持续更新
邮箱验证 function is_valid_email($email) { if (preg_match('/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/', $email)) { return true; } else { return false; } } OR function check_email($email) { $result = trim($email); if (filter_var($resu
骤雨重山
2022/01/17
9990
nginx.conf 配置详解(六)
日志级别从低到高分别是:debug、info、notice、warn、error、crit
高大北
2022/06/14
5660
nginx.conf 配置详解(六)
聊聊部署在K8S的项目如何获取客户端真实IP
最近部门有个需求,需要对一些客户端IP做白名单,在白名单范围内,才能做一些业务操作。按我们的部门的一贯做法,我们会封装一个client包,提供给业务方使用。(注: 我们的项目是运行在K8S上)本以为这是一个不是很难的功能,部门的小伙伴不到一天,就把功能实现了,他通过本地调试,可以获取到正确的客户端IP,但是发布到测试环境,发现获取到的客户端IP一直是节点的IP,后面那个小伙伴排查了很久,一直没头绪,就找到我帮忙一直排查一下。今天文章主要就是来复盘这个过程
lyb-geek
2023/09/07
7230
聊聊部署在K8S的项目如何获取客户端真实IP
使用CDN后如何配置Apache使其记录访客真实IP
今天想看看哪些地区的人访问过我的网站,于是打开Apache网站响应日志,把访客IP复制到百度,发现搜到的全部都是我是用的CDN的节点IP,真实的访客IP并没有被记录。
用户6948990
2025/04/03
560
使用CDN后如何配置Apache使其记录访客真实IP
BlueCMS_V1.6:审计过程与漏洞分析
而在ad_js.php文件的开头(第10行)引入了过滤文件require_once dirname(__FILE__) . '/include/common.inc.php';
黑白天安全
2021/03/16
2.7K0
BlueCMS_V1.6:审计过程与漏洞分析
Nginx常见用法总结(面试必备)
Nginx通过proxy_pass和upstream指令实现负载均衡,Nginx原生支持的负载均衡算法有如下几种:
IT大咖说
2019/09/25
7920
红队测试之邮箱打点
随着互联网信息快速发展,办公已经离不开网络的支持。邮箱成为了人们常用的办公方式之一。
谢公子
2022/01/20
1K0
红队测试之邮箱打点
nginx被动检测
随着应用越来越多,tomcat容器也越来越重,随之而来的是tomcat宕机越来越频繁。最终选择jar包部署测试反向代理的效果。虽然jar包部署之后项目肯定会稳定很多。但是nginx宕机检测还是要做的。在本地调试发现并没有出现什么问题。就将nginx部署到了灰度环境。在项目跑起来之后我们直接关闭了其中一个项目。按照nginx反向代理的被动检测机制应该还是可以返回正常的数据。但是我们发现灰度的nginx宕机检测花费了21秒。这个时间有点太大了,用户估计要爆炸。想了好多也没找到问题。下面记录一下自己的狗血经历。
写一点笔记
2020/08/25
6350
nginx被动检测
无需点击,通过qq的xml卡片自动获取对方ip
因为不是很会php,就到网上找了个找,发现需要用到如下几个函数:getenv('HTTP_CLIENT_IP')getenv('HTTP_X_FORWARDED_FOR')getenv('HTTP_X_FORWARDED')getenv('HTTP_FORWARDED_FOR')getenv('HTTP_FORWARDED')以及变量:_SERVER['REMOTE_ADDR']_SERVER['HTTP_REFERER']
Y5neKO
2022/01/13
8K2
无需点击,通过qq的xml卡片自动获取对方ip
nginx转发后后端怎么获取用户真实IP
经常有需求要获取访问用户的IP,在经过nginx转发后真实IP就被隐藏起来了,我们需要在头部信息里拿真实IP,下面是拿IP的代码,考虑了各种情况。 public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-real-ip"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreC
猿天地
2018/04/03
4.5K0
ELK+filebeat+nginx+json 日志分析综合实战
2,将nginx日志改成json格式,这样各个字段就方便最终在kibana进行画图统计了
用户9184480
2024/12/07
1080
ELK+filebeat+nginx+json 日志分析综合实战
微信小程序通过ip获取用户所在城市
在微信小程序中, 获取用户的地理位置是需要权限的, 如果只是获取用户所在的城市信息, 那只需查看用户ip所在的城市就好了, 下面我们就完成获取用户ip的小程序逻辑~ 根据用户ip获取地
zhaoolee
2018/09/30
5.2K0
微信小程序通过ip获取用户所在城市
Kubernetes 泛域名动态 Service 转发解决方案
集群对外暴露了一个公网IP作为流量入口(可以是 Ingress 或 Service),DNS 解析配置了一个泛域名指向该IP(比如 *.test.imroc.io),现希望根据请求中不同 Host 转发到不同的后端 Service。比如 a.test.imroc.io 的请求被转发到 my-svc-a,b.test.imroc.io 的请求转发到 my-svc-b
imroc
2018/12/22
4.9K0
推荐阅读
相关推荐
php获取客户端IP和服务器端IP[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档