Oracle dataGuard专题:Rman通过duplicate创建standby

本文详细介绍了如何利用RMAN工具便捷地创建Oracle备库,包括试验环境搭建、主备库参数配置、RMAN备份操作、备库复制与启动等关键步骤。简化了传统方法中创建备库控制文件的繁琐过程,提高了数据库高可用性方案的实施效率。

rman提供了更便捷的方式来创建standby,方法就是通过duplicate命令,下面做一个详细介绍:

1. 试验环境

[oracle@gaojf orcl]$ sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Dec 6 08:54:45 2006
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> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

SQL>

2. 确认主库处于归档模式

SQL> archive log list
Database log mode            Archive Mode
Automatic archival             Enabled
Archive destination            /free/oracle/orabak
Oldest online log sequence     275
Next log sequence to archive   277
Current log sequence           277
SQL>
 

3:创建备库instance

windows平台利用oradim工具创建一个新的instance,unix/linux平台设置新的ORACLE_SID即可,我的是linux平台,设置ORACLE_SID即可。


4:准备好备库的参数文件

本次试验在两个系统上建主备库,另外如果主备库都在一起的话,db_name设置为主库名,lock_name_space设置为备库名,同时要注意设置好DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT参数。

备库主要的几个参数如下:
*.log_archive_config='DG_CONFIG=(PRIMARY,STANDBY)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/free/oracle/orabak VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=STANDBY'
*.LOG_ARCHIVE_DEST_2='SERVICE=primary VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PRIMARY LGWR SYNC AFFIRM'
*.db_unique_name='STANDBY'
*.FAL_CLIENT='STANDBY'
*.FAL_SERVER='PRIMARY'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.STANDBY_ARCHIVE_DEST='/free/oracle/orabak'
*.STANDBY_FILE_MANAGEMENT='AUTO'

主库几个主要参数如下:

*.log_archive_config='DG_CONFIG=(PRIMAYR,STANDBY)'
*.DB_UNIQUE_NAME='PRIMARY'
*.LOG_ARCHIVE_DEST_1= 'LOCATION=/free/oracle/orabak'
#*.LOG_ARCHIVE_DEST_2='SERVICE=STANDBYVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STANDBY LGWR SYNC AFFIRM' #LGWR方式
*.LOG_ARCHIVE_DEST_2='SERVICE=STANDBY DB_UNIQUE_NAME=STANDBY ARCH SYNC REOPEN=10' #arch方式
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.LOG_ARCHIVE_FORMAT='arc%s%t%r.arc'
*.FAL_SERVER='STANDBY'
*.FAL_CLIENT='PRIMARY'
*.STANDBY_FILE_MANAGEMENT='AUTO'
*.standby_archive_dest='/free/oracle/orabak'

5.在备库生成password file

[oracle@gaojfdbs]$Orapwd file=/free/oracle/product/10.2.0/db_1/orapworcl.ora password=orcl entries=5

或者可以直接复制主库密码文件到备库相应的位置也可。

6.配置网络

配置主备库的listener.ora,tnsnames.ora。修改完lisner.ora后注意重启监听。

主库Listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /free/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.60.144)(PORT = 1521))
    )
  )

备库Listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /free/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.60.253)(PORT = 1521))
    )
  )

tnsnames.ora(主备库配置一样)

PRIMARY =
  (DESCRIPTION =
    (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.60.144)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = primary)
    )
  )

STANDBY =
  (DESCRIPTION =
    (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.60.253)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = standby)
    )
  )

 

7.利用rman备份主库
注意同时备库控制文件
[oracle@gaojf ~]$ rman target /
Recovery Manager: Release 10.2.0.1.0 - Production on Thu Dec 7 10:10:02 2006
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
connected to target database: ORCL (DBID=1132959697)
RMAN> backup full format='/free/oracle/FULL_%d_%T_%s' database  include current controlfile for standby
2> plus archivelog format='/free/oracle/arch_%d_%T_%s';
Starting backup at 07-DEC-06
current log archived
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=159 devtype=DISK
skipping archive log file /free/oracle/orabak/arc2951605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc2961605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc2971605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc2981605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc2991605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3001605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3011605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3021605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3031605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3041605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3051605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3061605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3071605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3081605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3091605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3101605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3111605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3121605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3131605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3141605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3151605985194.arc; already backed up 1 time(s)
skipping archive log file /free/oracle/orabak/arc3161605985194.arc; already backed up 1 time(s)
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=317 recid=436 stamp=608584285
input archive log thread=1 sequence=318 recid=439 stamp=608585430
input archive log thread=1 sequence=319 recid=441 stamp=608585703
channel ORA_DISK_1: starting piece 1 at 07-DEC-06
channel ORA_DISK_1: finished piece 1 at 07-DEC-06
piece handle=/free/oracle/arch_ORCL_20061207_56 tag=TAG20061207T193504 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 07-DEC-06

Starting backup at 07-DEC-06
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=/free/oracle/oradata/orcl/system01.dbf
input datafile fno=00003 name=/free/oracle/oradata/orcl/sysaux01.dbf
input datafile fno=00006 name=/free/oracle/oradata/orcl/gaojf1db.dbf
input datafile fno=00007 name=/free/oracle/oradata/orcl/gaojf2db.dbf
input datafile fno=00008 name=/free/oracle/oradata/orcl/gaojf3db.dbf
input datafile fno=00010 name=/free/oracle/oradata/orcl/cicrodb1.dbf
input datafile fno=00011 name=/free/oracle/oradata/orcl/cicrodb11.dbf
input datafile fno=00009 name=/free/oracle/oradata/orcl/gaojf4db.dbf
input datafile fno=00002 name=/free/oracle/oradata/orcl/undotbs01.dbf
input datafile fno=00005 name=/free/oracle/oradata/orcl/gaojfdb.dbf
input datafile fno=00004 name=/free/oracle/oradata/orcl/users01.dbf
channel ORA_DISK_1: starting piece 1 at 07-DEC-06                                                                                                                                                                                                                                                                                        channel ORA_DISK_1: finished piece 1 at 07-DEC-06
piece handle=/free/oracle/FULL_ORCL_20061207_57 tag=TAG20061207T193507 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:03:55
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including standby control file in backupset
channel ORA_DISK_1: starting piece 1 at 07-DEC-06
channel ORA_DISK_1: finished piece 1 at 07-DEC-06
piece handle=/free/oracle/FULL_ORCL_20061207_58 tag=TAG20061207T193507 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 07-DEC-06

Starting backup at 07-DEC-06
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=320 recid=443 stamp=608585946
channel ORA_DISK_1: starting piece 1 at 07-DEC-06
channel ORA_DISK_1: finished piece 1 at 07-DEC-06
piece handle=/free/oracle/arch_ORCL_20061207_59 tag=TAG20061207T193906 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 07-DEC-06

Starting Control File Autobackup at 07-DEC-06
piece handle=/free/oracle/orabak/c-1132959697-20061207-02 comment=NONE
Finished Control File Autobackup at 07-DEC-06
RMAN>
 

8:复制 rman全备份到备库
利用操作系统命令scp,或者ftp bin方式复制rman全备份到备库。
由于我rman主库备份时设置备份文件位置为/free/oracle,因此必须把此备份文件也放到备库同样的位置。
同时scp 控制文件standby.ctl到备库相应的位置。
 

9.启动备库到nomount
SQL> startup nomount
ORACLE instance started.
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
 

10.利用rman恢复备库
oracle@linux:/free/oracle/oradata/orcl>
rman target sys/cicro@primary  auxiliary /
Recovery Manager: Release 10.2.0.1.0 - Production on 星期五 12月 8 12:09:23 2006
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
connected to target database: ORCL (DBID=1132959697)
connected to auxiliary database: ORCL (not mounted)

RMAN> duplicate target database for standby dorecover nofilenamecheck;

Starting Duplicate Db at 08-12月-06
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=156 devtype=DISK

contents of Memory Script:
{
   set until scn  1607552;
   restore clone standby controlfile;
   sql clone 'alter database mount standby database';
}
executing Memory Script
executing command: SET until clause
Starting restore at 08-12月-06
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backupset restore
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: reading from backup piece /free/oracle/FULL_ORCL_20061207_58
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/free/oracle/FULL_ORCL_20061207_58 tag=TAG20061207T193507
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
output filename=/free/oracle/oradata/orcl/standby.ctl
Finished restore at 08-12月-06

sql statement: alter database mount standby database
                  released channel: ORA_AUX_DISK_1

contents of Memory Script:
{
   set until scn  1607552;
   set newname for tempfile  1 to
 "/free/oracle/oradata/orcl/temp01.dbf";
   switch clone tempfile all;
   set newname for datafile  1 to
 "/free/oracle/oradata/orcl/system01.dbf";
   set newname for datafile  2 to
 "/free/oracle/oradata/orcl/undotbs01.dbf";
   set newname for datafile  3 to
 "/free/oracle/oradata/orcl/sysaux01.dbf";
   set newname for datafile  4 to
 "/free/oracle/oradata/orcl/users01.dbf";
   set newname for datafile  5 to
 "/free/oracle/oradata/orcl/gaojfdb.dbf";
   set newname for datafile  6 to
 "/free/oracle/oradata/orcl/gaojf1db.dbf";
   set newname for datafile  7 to
 "/free/oracle/oradata/orcl/gaojf2db.dbf";
   set newname for datafile  8 to
 "/free/oracle/oradata/orcl/gaojf3db.dbf";
   set newname for datafile  9 to
 "/free/oracle/oradata/orcl/gaojf4db.dbf";
   set newname for datafile  10 to
 "/free/oracle/oradata/orcl/cicrodb1.dbf";
   set newname for datafile  11 to
 "/free/oracle/oradata/orcl/cicrodb11.dbf";
   restore
   check readonly
   clone database
   ;
}
executing Memory Script
executing command: SET until clause
executing command: SET NEWNAME
renamed temporary file 1 to /free/oracle/oradata/orcl/temp01.dbf in control file
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
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 08-12月-06
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=156 devtype=DISK

channel ORA_AUX_DISK_1: starting datafile backupset restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /free/oracle/oradata/orcl/system01.dbf
restoring datafile 00002 to /free/oracle/oradata/orcl/undotbs01.dbf
restoring datafile 00003 to /free/oracle/oradata/orcl/sysaux01.dbf
restoring datafile 00004 to /free/oracle/oradata/orcl/users01.dbf
restoring datafile 00005 to /free/oracle/oradata/orcl/gaojfdb.dbf
restoring datafile 00006 to /free/oracle/oradata/orcl/gaojf1db.dbf
restoring datafile 00007 to /free/oracle/oradata/orcl/gaojf2db.dbf
restoring datafile 00008 to /free/oracle/oradata/orcl/gaojf3db.dbf
restoring datafile 00009 to /free/oracle/oradata/orcl/gaojf4db.dbf
restoring datafile 00010 to /free/oracle/oradata/orcl/cicrodb1.dbf
restoring datafile 00011 to /free/oracle/oradata/orcl/cicrodb11.dbf
channel ORA_AUX_DISK_1: reading from backup piece /free/oracle/FULL_ORCL_20061207_57
                                                                                                                                                                                                                                                                             channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/free/oracle/FULL_ORCL_20061207_57 tag=TAG20061207T193507
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:04:07
Finished restore at 08-12月-06

contents of Memory Script:
{
   switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy recid=17 stamp=608645655 filename=/free/oracle/oradata/orcl/system01.dbf
datafile 2 switched to datafile copy
input datafile copy recid=18 stamp=608645655 filename=/free/oracle/oradata/orcl/undotbs01.dbf
datafile 3 switched to datafile copy
input datafile copy recid=19 stamp=608645655 filename=/free/oracle/oradata/orcl/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy recid=20 stamp=608645655 filename=/free/oracle/oradata/orcl/users01.dbf
datafile 5 switched to datafile copy
input datafile copy recid=21 stamp=608645655 filename=/free/oracle/oradata/orcl/gaojfdb.dbf
datafile 6 switched to datafile copy
input datafile copy recid=22 stamp=608645655 filename=/free/oracle/oradata/orcl/gaojf1db.dbf
datafile 7 switched to datafile copy
input datafile copy recid=23 stamp=608645655 filename=/free/oracle/oradata/orcl/gaojf2db.dbf
datafile 8 switched to datafile copy
input datafile copy recid=24 stamp=608645655 filename=/free/oracle/oradata/orcl/gaojf3db.dbf
datafile 9 switched to datafile copy
input datafile copy recid=25 stamp=608645655 filename=/free/oracle/oradata/orcl/gaojf4db.dbf
datafile 10 switched to datafile copy
input datafile copy recid=26 stamp=608645656 filename=/free/oracle/oradata/orcl/cicrodb1.dbf
datafile 11 switched to datafile copy
input datafile copy recid=27 stamp=608645656 filename=/free/oracle/oradata/orcl/cicrodb11.dbf

contents of Memory Script:
{
   set until scn  1607552;
   recover
   standby
   clone database
    delete archivelog
   ;
}
executing Memory Script
executing command: SET until clause
Starting recover at 08-12月-06
using channel ORA_AUX_DISK_1

starting media recovery
channel ORA_AUX_DISK_1: starting archive log restore to default destination
channel ORA_AUX_DISK_1: restoring archive log
archive log thread=1 sequence=320
channel ORA_AUX_DISK_1: reading from backup piece /free/oracle/arch_ORCL_20061207_59
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/free/oracle/arch_ORCL_20061207_59 tag=TAG20061207T193906
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:02
archive log filename=/free/oracle/orabak/1_320_605985194.dbf thread=1 sequence=320
channel clone_default: deleting archive log(s)
archive log filename=/free/oracle/orabak/1_320_605985194.dbf recid=1 stamp=608645661
media recovery complete, elapsed time: 00:00:03
Finished recover at 08-12月-06
 

11.将备库置于自动恢复状态

SQL> alter database recover managed standby database disconnect from session;
Database altered.

12.在主库上执行检查

SQL> conn /as sysdba
Connected.

SQL> select dest_name,status,error from v$archive_dest;
DEST_NAME                      STATUS    ERROR
------------------------------        -------- ----------
LOG_ARCHIVE_DEST_1             VALID
LOG_ARCHIVE_DEST_2             VALID
LOG_ARCHIVE_DEST_3             INACTIVE
LOG_ARCHIVE_DEST_4             INACTIVE
LOG_ARCHIVE_DEST_5             INACTIVE
LOG_ARCHIVE_DEST_6             INACTIVE
LOG_ARCHIVE_DEST_7             INACTIVE
LOG_ARCHIVE_DEST_8             INACTIVE
LOG_ARCHIVE_DEST_9             INACTIVE
LOG_ARCHIVE_DEST_10            INACTIVE

10 rows selected.

SQL> select * from v$archive_gap;

no rows selected

SQL> select sequence# from v$log_history;

SEQUENCE#
----------
1
2
...
321

13.在备库上执行检查

SQL> conn / as sysdba
Connected.
SQL> select * from v$archive_gap;

no rows selected

SQL> select sequence# from v$log_history;

SEQUENCE#
----------
1
2
...
321

SQL> select sequence#,applied from v$archived_log;

SEQUENCE# APPLIE
---------- ------
       320 YES
       321 YES
SQL> select process,status from v$managed_standby;

PROCESS            STATUS
------------------ ------------------------
ARCH               CLOSING
ARCH               CLOSING
RFS                IDLE
MRP0               WAIT_FOR_LOG

至此,备库创建成功。
可以看到,使用rman的duplicate来创建备库,过程简洁了不少,无需在手动创建备库控制文件。

本专题相关链接:

Oracle dataGuard专题:利用冷备创建standby:http://ixdba.blog.51cto.com/2895551/641184

Oracle dataGuard专题:利用rman创建standby:http://ixdba.blog.51cto.com/2895551/642906

<think>首先,用户的问题是:“我想查询OracleRMAN在执行duplicate命令时如何检查进度”。用户想了解在OracleRMAN中执行duplicate命令时如何监控进度。回顾系统级指令:-所有行内数学表达式必须使用$...$格式。-独立公式必须使用$$...$$格式并单独成段。-LaTeX语法正确。-使用中文回答。-生成相关问题。-在回答中引用的段落末尾自然地添加引用标识,例如[^1]。-回答结构清晰,帮助用户逐步解决问题。-参考站内引用,但用户提供的引用是关于Oracle的其他内容,如RMAN、V$MANAGED_STANDBY、事件诊断等。我需要基于这些引用,但用户真正的需求是RMANduplicate的进度检查。用户提供的引用:-[^1]:关于RMAN命令的示例。-[^2]:查询V$MANAGED_STANDBY视图的输出。-[^3]:Oracle事件诊断代码。-[^4]:Oracle补丁信息。这些引用可能与RMAN相关,但不直接针对duplicate进度检查。我需要专注于用户的问题。关键点:用户想检查RMANduplicate命令的进度。在OracleRMAN中,duplicate命令用于创建一个数据库的副本。要监控其进度,可以使用以下方法:1.使用RMAN命令本身提供的输出。2.查询Oracle动态性能视图(如V$SESSION_LONGOPS)。3.使用操作系统工具监控进程。具体步骤:-在RMAN会话中,执行duplicate命令时,它会显示进度信息。-可以查询V$SESSION_LONGOPS视图,该视图显示长时间运行的操作进度。-对于duplicate,特别是涉及DataGuard或备用数据库时,V$MANAGED_STANDBY可能相关(如引用[^2]所示)。引用[^2]提到了V$MANAGED_STANDBY,这用于DataGuard环境。duplicate命令常用于创建备用数据库,所以这可能相关。标准方法:-在RMAN中,执行duplicate后,可以打开另一个会话查询V$SESSION_LONGOPS。-例如:SELECTsid,serial#,context,sofar,totalwork,round(sofar/totalwork*100,2)"%Complete"FROMV$SESSION_LONGOPSWHEREopnameLIKE'RMAN%'ANDtotalwork!=0ANDsofar!=totalwork;用户引用[^2]展示了查询V$MANAGED_STANDBY,这用于归档日志应用等,但对于duplicate进度,V$SESSION_LONGOPS更直接。回答结构:1.**介绍方法**:简要说明如何检查进度。2.**步骤分解**:-方法1:使用RMAN输出(实时查看)。-方法2:查询动态性能视图(如V$SESSION_LONGOPS)。-方法3:操作系统级别监控(如ps命令)。3.**示例代码**:提供SQL查询或RMAN命令示例。4.**注意事项**:提醒用户可能的延迟或视图更新频率。5.**生成相关问题**:在末尾添加。使用中文回答。参考引用:-引用[^1]:RMAN命令示例,可能涉及日志输出。-引用[^2]:V$MANAGED_STANDBY查询,相关但可能不直接。-其他引用不太相关,但可忽略。在回答中,自然地添加引用标识。例如,如果提到V$MANAGED_STANDBY,可以引用[^2]。最终回答:-开头:直接回答问题。-主体:分步骤解释。-结尾:相关问题。生成相关问题:-基于主题,如RMAN优化、错误处理等。确保LaTeX:用户问题中没有数学内容,所以可能不需要LaTeX。但如果涉及计算,如进度百分比,使用行内$...$。例如:进度百分比计算:$\text{百分比}=\frac{\text{sofar}}{\text{totalwork}}\times100$现在,草拟回答。</think>### Oracle RMAN 检查 duplicate 命令进度的方法 在 Oracle RMAN 中执行 `duplicate` 命令时(例如创建备用数据库或克隆数据库),监控进度是关键。RMAN 本身不提供实时进度条,但可通过以下方法检查进度。这些方法基于 Oracle 动态性能视图和日志输出,确保您逐步解决问题。 #### 方法1: 直接查看 RMAN 输出日志 当您执行 `duplicate` 命令时,RMAN 会在日志文件中输出阶段性进度信息(如数据文件复制、归档日志应用等)。您可以通过以下方式实时查看: - 在 RMAN 命令中添加日志记录,如引用[^1]所示:执行时指定日志文件路径。 - 示例命令: ```bash rman target sys/password@primary_db auxiliary sys/password@standby_db log=/home/oracle/duplicate.log append <<EOF duplicate target database for standby from active database; EOF ``` - **如何检查进度**: - 打开另一个终端会话,使用 `tail -f` 命令实时跟踪日志: ```bash tail -f /home/oracle/duplicate.log ``` - RMAN 会输出类似信息: ``` Starting backup at 2023-10-01 12:00:00 channel ORA_DISK_1: starting datafile copy copying datafile 00001 to /u01/oradata/standby/system01.dbf ... Finished backup at 2023-10-01 12:05:00 ``` - 关注关键阶段:`datafile copy`(数据文件复制)、`archived log application`(归档日志应用)等,这些步骤显示操作进度[^1]。 #### 方法2: 查询 Oracle 动态性能视图 Oracle 提供了动态性能视图(如 `V$SESSION_LONGOPS`),用于监控长时间运行的操作。`duplicate` 命令通常注册为 RMAN 作业,可通过 SQL 查询进度。 - **步骤**: 1. 在 RMAN 执行 `duplicate` 命令的同时,打开另一个 SQL*Plus 会话。 2. 运行以下查询,计算进度百分比: ```sql SELECT sid, serial#, opname, context, sofar, totalwork, ROUND(sofar / totalwork * 100, 2) AS "% Complete" FROM v$session_longops WHERE opname LIKE 'RMAN:%' AND totalwork > 0 AND sofar < totalwork; ``` - `sofar`: 已完成工作量(例如复制的数据块数)。 - `totalwork`: 总工作量。 - `% Complete`: 进度百分比,计算公式为 $ \frac{\text{sofar}}{\text{totalwork}} \times 100 $。 3. 查询结果示例: ``` SID SERIAL# OPNAME CONTEXT SOFAR TOTALWORK % Complete ---- ------- ------------------ -------- ------ ---------- ---------- 123 456 RMAN: duplicate 1 500 1000 50.00 ``` - 如果进度停滞,检查 `V$SESSION` 视图确认会话状态。 - **注意事项**: - 对于 Data Guard 环境(如创建物理备用数据库),可结合 `V$MANAGED_STANDBY` 视图监控归档日志应用进度[^2]。示例查询: ```sql SELECT PROCESS, STATUS, SEQUENCE#, BLOCK#, BLOCKS, DELAY_MINS FROM V$MANAGED_STANDBY WHERE PROCESS LIKE 'MRP%'; -- MRP 进程负责日志应用 ``` 输出如引用[^2]所示,`SEQUENCE#` 和 `BLOCK#` 显示当前应用的日志序列和块号。 #### 方法3: 操作系统级别监控 在 Linux/Unix 系统上,使用 OS 工具监控 RMAN 进程活动。 - **步骤**: - 查找 RMAN 相关进程: ```bash ps -ef | grep rman ``` 输出示例: ``` oracle 12345 1 0 12:00 ? 00:00:01 rman target sys/... ``` - 监控 I/O 活动(例如使用 `iostat` 或 `top`),确保磁盘读写正常。 - 对于归档日志应用,检查 MRP(Managed Recovery Process)进程: ```bash ps -ef | grep mrp ``` 如引用[^2]所示,确认进程是否运行。 #### 注意事项 - **进度更新延迟**:`V$SESSION_LONGOPS` 视图可能每 3-5 分钟更新一次,非实时。 - **常见问题**: - 如果进度不更新,检查 RMAN 日志是否有错误(如网络中断或空间不足)。 - 在 Oracle 11g/12c 中,`duplicate` 命令可能涉及补丁兼容性问题,参考引用[^4]确保环境一致。 - **最佳实践**:在低峰时段执行操作,并预先测试环境。 通过以上方法,您可以有效监控 `duplicate` 命令的进度。如果操作失败,使用 Oracle 事件诊断工具分析错误(如引用[^3]所示)[^3]。 ### 相关问题 1. 如何优化 Oracle RMAN `duplicate` 命令的性能? 2. RMAN `duplicate` 命令失败时如何排查常见错误? 3. 在 Data Guard 环境中,如何验证备用数据库的同步状态? 4. Oracle 动态性能视图(如 `V$SESSION_LONGOPS`)的工作原理是什么? [^1]: /u01/oracle/app/11.2.0/bin/rman target sys/password@orcldb auxiliary sys/password@orcldb_dg log=/home/oracle/$LOG append <<eof</eof<> [^2]: 节点2 SQL> SELECT PROCESS, STATUS,THREAD#,SEQUENCE#,BLOCK#,BLOCKS, DELAY_MINS FROM V$MANAGED_STANDBY; PROCESS STATUS THREAD# SEQUENCE# BLOCK# BLOCKS DELAY_MINS --------- ------------ ---------- ---------- ---------- ---------- ---------- ARCH CLOSING 1 206 10240 1861 0 ARCH CLOSING 1 215 1 696 0 ARCH CONNECTED 0 0 0 0 0 ARCH CLOSING 1 216 2048 1053 0 SQL> !ps -ef|grep mrp oracle 53581 52552 0 21:06 pts/0 00:00:00 /bin/bash -c ps -ef|grep mrp oracle 53583 53581 0 21:06 pts/0 00:00:00 grep mrp [^3]: Oracle事件诊断列表。DECLARE err_msg VARCHAR2(120); BEGIN dbms_output.enable(1000000); FOR err_num IN 0..20000 LOOP err_msg := SQLERRM(-err_num); IF err_msg NOT LIKE '%Message '||err_num||' not found%' THEN dbms_output.put_line (err_msg); END IF; END LOOP; END; / spool off [^4]: oracle 11.2.0.4 补丁集CVE漏洞修复对照表。APPLIES TO: Oracle Server - Enterprise Edition - Version: 11.2.0.4 to 11.2.0.4 - Release: 11.2 to 11.2 Information in this document applies to any platform. Bugs fixed in each 11.2.0.4 Patch Set Update SeeNote:854428.1for information about Patch Set UpdatesSeeNote:1562139.1for Support Status and Alerts affecting 11.2.0.4 releases。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值