ITPub博客

首页 > 数据库 > Oracle > RAC搭建DG-生产端控制文件和联机日志文件传至DG端-实现DG端数据库open

RAC搭建DG-生产端控制文件和联机日志文件传至DG端-实现DG端数据库open

原创 Oracle 作者:龙山游龙 时间:2015-07-27 17:52:06 0 删除 编辑
本次实验是在DG的基础下实现的
DG搭建之最佳实践(基本参数配置,且本次配置不考虑切换)
生产端:
alter system set log_archive_dest_1='LOCATION=+data/xuh/archivelog' scope=both;
alter system set log_archive_dest_2='SERVICE=xuhdg arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=xuh' scope=both;
alter system set log_archive_dest_state_1=ENABLE scope=both;
alter system set log_archive_dest_state_2=ENABLE scope=both;
alter system set db_file_name_convert='+data/xuh/datafile','/oracle/app/xuh','+data/xuh/tempfile','/oracle/app/xuh' scope=spfile;
alter system set log_file_name_convert='+data/xuh','/oracle/app/xuh' scope=both;

DG端:
*.audit_file_dest='/oracle/app/admin/xuh/adump'
*.background_dump_dest='/oracle/app/admin/xuh/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/oracle/app/xuh/control01.ctl'
*.core_dump_dest='/oracle/app/admin/xuh/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_file_name_convert='+data/xuh/datafile','/oracle/app/xuh','+data/xuh/tempfile','/oracle/app/xuh'
*.db_name='xuh'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=xuhXDB)'
*.job_queue_processes=10
*.log_archive_dest_1='LOCATION=/oracle/arch'
*.log_archive_dest_2='SERVICE=xuh arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=xuh'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_file_name_convert='+data/xuh','/oracle/app/xuh'
*.open_cursors=300
*.pga_aggregate_target=93323264
*.processes=150
*.remote_login_passwordfile='exclusive'
*.sga_target=281018368
*.undo_management='AUTO'
undo_tablespace='UNDOTBS1'
*.user_dump_dest='/oracle/app/admin/xuh/udump'

搭建结束后,生产端alter system archive log current;对比生产端和DG端max(sequence#),验证select max(sequence#),thread# from v$archived_log group by thread#;
 
在确保生产端和DG端归档日志完全同步后,进行如下操作

由于生产端是10gRAC,数据库文件均放在ASM磁盘组中,不能将联机日志文件直接scp或者ftp到DG端。因此,新建online redo log,并且新建的联机日志放在文件系统上,删除旧联机日志文件
SQL> select a.group#,a.thread#,b.member from v$log a,v$logfile b where a.group#=b.group#;

    GROUP#    THREAD# MEMBER
---------- ---------- ------------------------------
         1          1 +DATA/xuh/redo01.log
         2          1 +DATA/xuh/redo02.log
         3          2 +DATA/xuh/redo03.log
         4          2 +DATA/xuh/redo04.log

SQL> alter database add logfile thread 1 group 5 ('/oracle/app/xuh/redo05.log') size 50M;

Database altered.

SQL> alter database add logfile thread 1 group 6 ('/oracle/app/xuh/redo06.log') size 50M;

Database altered.

SQL> alter database add logfile thread 2 group 7 ('/oracle/app/xuh/redo07.log') size 50M;

Database altered.

SQL> alter database add logfile thread 2 group 8 ('/oracle/app/xuh/redo08.log') size 50M;

Database altered.

SQL> select a.group#,a.thread#,b.member from v$log a,v$logfile b where a.group#=b.group#;

    GROUP#    THREAD# MEMBER
---------- ---------- ------------------------------
         1          1 +DATA/xuh/redo01.log
         2          1 +DATA/xuh/redo02.log
         3          2 +DATA/xuh/redo03.log
         4          2 +DATA/xuh/redo04.log
         5          1 /oracle/app/xuh/redo05.log
         6          1 /oracle/app/xuh/redo06.log
         7          2 /oracle/app/xuh/redo07.log
         8          2 /oracle/app/xuh/redo08.log

8 rows selected.


SQL> select a.group#,a.thread#,b.member,a.status from v$log a,v$logfile b where a.group#=b.group#;

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         1          1 +DATA/xuh/redo01.log           INACTIVE
         2          1 +DATA/xuh/redo02.log           CURRENT
         3          2 +DATA/xuh/redo03.log           CURRENT
         4          2 +DATA/xuh/redo04.log           INACTIVE
         5          1 /oracle/app/xuh/redo05.log     UNUSED
         6          1 /oracle/app/xuh/redo06.log     UNUSED
         7          2 /oracle/app/xuh/redo07.log     UNUSED
         8          2 /oracle/app/xuh/redo08.log     UNUSED

8 rows selected.

SQL>  select a.group#,a.thread#,b.member,a.status from v$log a,v$logfile b where a.group#=b.group#;

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         1          1 +DATA/xuh/redo01.log           INACTIVE
         2          1 +DATA/xuh/redo02.log           ACTIVE
         3          2 +DATA/xuh/redo03.log           INACTIVE
         4          2 +DATA/xuh/redo04.log           INACTIVE
         5          1 /oracle/app/xuh/redo05.log     CURRENT
         6          1 /oracle/app/xuh/redo06.log     UNUSED
         7          2 /oracle/app/xuh/redo07.log     CURRENT
         8          2 /oracle/app/xuh/redo08.log     UNUSED

8 rows selected.

SQL> /

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         1          1 +DATA/xuh/redo01.log           INACTIVE
         2          1 +DATA/xuh/redo02.log           ACTIVE
         3          2 +DATA/xuh/redo03.log           INACTIVE
         4          2 +DATA/xuh/redo04.log           INACTIVE
         5          1 /oracle/app/xuh/redo05.log     ACTIVE
         6          1 /oracle/app/xuh/redo06.log     CURRENT
         7          2 /oracle/app/xuh/redo07.log     INACTIVE
         8          2 /oracle/app/xuh/redo08.log     CURRENT

8 rows selected.

SQL> /

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         1          1 +DATA/xuh/redo01.log           CURRENT
         2          1 +DATA/xuh/redo02.log           ACTIVE
         3          2 +DATA/xuh/redo03.log           INACTIVE
         4          2 +DATA/xuh/redo04.log           CURRENT
         5          1 /oracle/app/xuh/redo05.log     ACTIVE
         6          1 /oracle/app/xuh/redo06.log     ACTIVE
         7          2 /oracle/app/xuh/redo07.log     INACTIVE
         8          2 /oracle/app/xuh/redo08.log     INACTIVE

8 rows selected.

SQL> /

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         1          1 +DATA/xuh/redo01.log           ACTIVE
         2          1 +DATA/xuh/redo02.log           CURRENT
         3          2 +DATA/xuh/redo03.log           CURRENT
         4          2 +DATA/xuh/redo04.log           INACTIVE
         5          1 /oracle/app/xuh/redo05.log     ACTIVE
         6          1 /oracle/app/xuh/redo06.log     ACTIVE
         7          2 /oracle/app/xuh/redo07.log     INACTIVE
         8          2 /oracle/app/xuh/redo08.log     INACTIVE

8 rows selected.

SQL> /

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         1          1 +DATA/xuh/redo01.log           ACTIVE
         2          1 +DATA/xuh/redo02.log           ACTIVE
         3          2 +DATA/xuh/redo03.log           INACTIVE
         4          2 +DATA/xuh/redo04.log           INACTIVE
         5          1 /oracle/app/xuh/redo05.log     CURRENT
         6          1 /oracle/app/xuh/redo06.log     INACTIVE
         7          2 /oracle/app/xuh/redo07.log     CURRENT
         8          2 /oracle/app/xuh/redo08.log     INACTIVE

8 rows selected.

SQL> /

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         1          1 +DATA/xuh/redo01.log           ACTIVE
         2          1 +DATA/xuh/redo02.log           ACTIVE
         3          2 +DATA/xuh/redo03.log           INACTIVE
         4          2 +DATA/xuh/redo04.log           INACTIVE
         5          1 /oracle/app/xuh/redo05.log     ACTIVE
         6          1 /oracle/app/xuh/redo06.log     CURRENT
         7          2 /oracle/app/xuh/redo07.log     INACTIVE
         8          2 /oracle/app/xuh/redo08.log     CURRENT

8 rows selected.

SQL> /

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         1          1 +DATA/xuh/redo01.log           CURRENT
         2          1 +DATA/xuh/redo02.log           INACTIVE
         3          2 +DATA/xuh/redo03.log           INACTIVE
         4          2 +DATA/xuh/redo04.log           CURRENT
         5          1 /oracle/app/xuh/redo05.log     INACTIVE
         6          1 /oracle/app/xuh/redo06.log     INACTIVE
         7          2 /oracle/app/xuh/redo07.log     INACTIVE
         8          2 /oracle/app/xuh/redo08.log     INACTIVE

8 rows selected.

SQL> alter database drop logfile '+DATA/xuh/redo02.log';

Database altered.

SQL> alter database drop logfile '+DATA/xuh/redo03.log';

Database altered.

SQL> select a.group#,a.thread#,b.member,a.status from v$log a,v$logfile b where a.group#=b.group#;

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         1          1 +DATA/xuh/redo01.log           ACTIVE
         4          2 +DATA/xuh/redo04.log           INACTIVE
         5          1 /oracle/app/xuh/redo05.log     CURRENT
         6          1 /oracle/app/xuh/redo06.log     INACTIVE
         7          2 /oracle/app/xuh/redo07.log     CURRENT
         8          2 /oracle/app/xuh/redo08.log     INACTIVE

6 rows selected.

SQL> alter database drop logfile '+DATA/xuh/redo04.log';

Database altered.

SQL> select a.group#,a.thread#,b.member,a.status from v$log a,v$logfile b where a.group#=b.group#;

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         1          1 +DATA/xuh/redo01.log           ACTIVE
         5          1 /oracle/app/xuh/redo05.log     ACTIVE
         6          1 /oracle/app/xuh/redo06.log     CURRENT
         7          2 /oracle/app/xuh/redo07.log     INACTIVE
         8          2 /oracle/app/xuh/redo08.log     CURRENT

SQL> select a.group#,a.thread#,b.member,a.status from v$log a,v$logfile b where a.group#=b.group#;

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         1          1 +DATA/xuh/redo01.log           CURRENT
         5          1 /oracle/app/xuh/redo05.log     ACTIVE
         6          1 /oracle/app/xuh/redo06.log     ACTIVE
         7          2 /oracle/app/xuh/redo07.log     CURRENT
         8          2 /oracle/app/xuh/redo08.log     INACTIVE

SQL> /

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         1          1 +DATA/xuh/redo01.log           ACTIVE
         5          1 /oracle/app/xuh/redo05.log     CURRENT
         6          1 /oracle/app/xuh/redo06.log     INACTIVE
         7          2 /oracle/app/xuh/redo07.log     INACTIVE
         8          2 /oracle/app/xuh/redo08.log     CURRENT

SQL> /

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         1          1 +DATA/xuh/redo01.log           INACTIVE
         5          1 /oracle/app/xuh/redo05.log     INACTIVE
         6          1 /oracle/app/xuh/redo06.log     CURRENT
         7          2 /oracle/app/xuh/redo07.log     CURRENT
         8          2 /oracle/app/xuh/redo08.log     INACTIVE

SQL> alter database drop logfile '+DATA/xuh/redo01.log';

Database altered.

SQL> select a.group#,a.thread#,b.member,a.status from v$log a,v$logfile b where a.group#=b.group#;

    GROUP#    THREAD# MEMBER                         STATUS
---------- ---------- ------------------------------ ----------------
         5          1 /oracle/app/xuh/redo05.log     INACTIVE
         6          1 /oracle/app/xuh/redo06.log     CURRENT
         7          2 /oracle/app/xuh/redo07.log     CURRENT
         8          2 /oracle/app/xuh/redo08.log     INACTIVE

SQL>
 
日志文件切换到文件系统之后,将控制文件创建到文件系统上(原控制文件在ASM磁盘组上)
SQL> select name,status from v$controlfile;

NAME                           STATUS
------------------------------ -------
+DATA/xuh/control01.ctl
+DATA/xuh/control02.ctl
+DATA/xuh/control03.ctl

SQL> alter system set control_files='/oracle/app/xuh/control01.ctl','/oracle/app/xuh/control02.ctl','/oracle/app/xuh/control03.ctl' scope=spfile;

System altered.

[oracle@node1 ~]$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on Tue Jul 28 00:40:29 2015

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

connected to target database (not started)

RMAN> startup nomount;

Oracle instance started

Total System Global Area     281018368 bytes

Fixed Size                     2020192 bytes
Variable Size                117443744 bytes
Database Buffers             159383552 bytes
Redo Buffers                   2170880 bytes

RMAN> restore controlfile from '+DATA/xuh/control01.ctl';

Starting restore at 28-JUL-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=147 instance=xuh1 devtype=DISK

channel ORA_DISK_1: copied control file copy
output filename=/oracle/app/xuh/control01.ctl
output filename=/oracle/app/xuh/control02.ctl
output filename=/oracle/app/xuh/control03.ctl
Finished restore at 28-JUL-15

RMAN> exit


Recovery Manager complete.

到这里,控制文件以及联机日志文件都在文件系统上,可以用scp传到DG端指定位置
[oracle@standby xuh]$ ls
control01.ctl      redo05.log  redo07.log  sysaux.479.886185005  undotbs1.480.886185001  users.476.886185017
control01.ctl.bak  redo06.log  redo08.log  system.481.886184991  undotbs2.477.886185015
[oracle@standby xuh]$ pwd
/oracle/app/xuh
[oracle@standby xuh]$

这边需要注意,scp过来的控制文件中的logfile已经修改到文件系统上,现在只需将datafile的路径重新rename下,从ASM磁盘组指向新的文件系统位置
[oracle@standby ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Jul 28 01:02:26 2015

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

Connected to an idle instance.

SQL> startup mount;
ORACLE instance started.

Total System Global Area  281018368 bytes
Fixed Size                  2020192 bytes
Variable Size              88083616 bytes
Database Buffers          188743680 bytes
Redo Buffers                2170880 bytes
Database mounted.
SQL>  alter database rename file '+DATA/xuh/datafile/system.481.886184991' to '/oracle/app/xuh/system.481.886184991';

Database altered.

SQL>  alter database rename file '+DATA/xuh/datafile/undotbs1.480.886185001' to '/oracle/app/xuh/undotbs1.480.886185001';

Database altered.

SQL> alter database rename file '+DATA/xuh/datafile/sysaux.479.886185005' to '/oracle/app/xuh/sysaux.479.886185005';

Database altered.

SQL> alter database rename file '+DATA/xuh/datafile/undotbs2.477.886185015' to '/oracle/app/xuh/undotbs2.477.886185015';

Database altered.

SQL> alter database rename file '+DATA/xuh/datafile/users.476.886185017' to '/oracle/app/xuh/users.476.886185017';

Database altered.

SQL> recover database;
ORA-00279: change 502365 generated at 07/27/2015 21:25:55 needed for thread 1
ORA-00289: suggestion : /oracle/arch/1_30_886184975.dbf
ORA-00280: change 502365 for thread 1 is in sequence #30


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: change 502365 generated at 07/27/2015 18:54:40 needed for thread 2
ORA-00289: suggestion : /oracle/arch/2_1_886184975.dbf
ORA-00280: change 502365 for thread 2 is in sequence #1
.
.
.
这边省略归档日志的应用
.
.
.

ORA-00279: change 538963 generated at 07/28/2015 00:21:10 needed for thread 2
ORA-00289: suggestion : /oracle/arch/2_25_886184975.dbf
ORA-00280: change 538963 for thread 2 is in sequence #25
ORA-00278: log file '/oracle/arch/2_24_886184975.dbf' no longer needed for this
recovery


ORA-00279: change 538969 generated at 07/28/2015 00:21:22 needed for thread 1
ORA-00289: suggestion : /oracle/arch/1_59_886184975.dbf
ORA-00280: change 538969 for thread 1 is in sequence #59
ORA-00278: log file '/oracle/arch/1_58_886184975.dbf' no longer needed for this
recovery


ORA-00279: change 538972 generated at 07/28/2015 00:21:22 needed for thread 2
ORA-00289: suggestion : /oracle/arch/2_26_886184975.dbf
ORA-00280: change 538972 for thread 2 is in sequence #26
ORA-00278: log file '/oracle/arch/2_25_886184975.dbf' no longer needed for this
recovery


Log applied.
Media recovery complete.
SQL> alter database open;

Database altered.

SQL> select open_mode,log_mode from v$database;

OPEN_MODE  LOG_MODE
---------- ------------
READ WRITE ARCHIVELOG

到此,已经能正常实现DG端数据库正常open了。本方法不用switchover或者failover,同样能使得数据库正常open,零数据丢失!

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30310891/viewspace-1753385/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
传统商业、开源和国产据库领域十从业经验,TB级高并发数据库的管理经验。对于数据库内部原理、体系结构,数据页/块结构原理有着深刻认识;对于数据库新特性、分布式高可用架构和性能调优有着丰富的的实战经验。擅长故障诊断以及数据库异常打开及数据灾难挽救。

注册时间:2015-06-28

  • 博文量
    178
  • 访问量
    334675