Oracle数据库(DataGuard)迁移方案(中)

来源:这里教程网 时间:2026-03-03 18:42:39 作者:

第一部分 部署主备库DG第1部分 

1.1 DG搭建步骤

步骤

实施内容

Step 1

主库参数配置

Step 2

备库参数配置

Step 3

数据第一次同步

Step 4

备机添加oracle服务

Step 5

主备切换

   1.2 主库参数配置主库参数配置包括确认归档是否打开,force_logging是否打开,修改主库参数文件,添加网络连接串等等一系列的主库配置信息。3.2.1 打开数据库force_logging检查是否打开了force_logging:

SQL> SELECT FORCE_LOGGING FROM V$DATABASE;
FOR
---
YES

//如果状态为YES,则已经打开,如果状态为NO,则参考下面步骤:

SQL> ALTER DATABASE FORCE LOGGING;

3.2.3 添加网络连接串网络连接串用于连接主备两端数据库,传输归档等作用,在RAC环境下,具体需要配置如下几个:一号节点连接串,二号节点连接串,备端连接串,详细配置信息如下:

Shell> su – oracle
Shell> cd $ORACLE_HOME/network/admin
Shell> vi tnsnames.ora //添加如下信息:(如果已存在以下连接串,酌情考虑添加删除)
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.17.11)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.17.13)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
 
ORCL_DG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.101)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.103)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

3.2.4 修改主库参数文件备份参数文件(方便修改参数出现问题后及时回退)。

Shell> su - oracle
Shell> sqlplus "/ as sysdba"
SQL> create pfile='/tmp/initORCL.ora' from spfile;
SQL> alter system set log_archive_config='dg_config=(ORCL,ORCL_DG)' sid='*';
SQL> alter system set log_archive_dest_3='service=ORCL_DG valid_for=(online_logfiles,primary_role) db_unique_name=ORCL_DG' sid='*';
SQL> alter system set  LOG_ARCHIVE_DEST_STATE_3=enable sid='*';

3.2.5 创建standby redo log文件standby redo log 作用在备库,用于接收从主库传过来的日志信息,在主库部署主要是为了方便日后的主备切换。创建适当数量的Standby Redo Log组数,公式如下:1. 如果主库是单实例数据库:Standby Redo Log组数=主库日志组总数+12. 如果主库是RAC数据库:Standby Redo Log组数=(所有节点中日志组数最大值 + 1) * RAC节点数3. 大小和生产库redo日志组大小一致

alter database add standby logfile thread 1 group 31 '+DATADG' size 500M;
alter database add standby logfile thread 1 group 32 '+DATADG' size 500M;
alter database add standby logfile thread 1 group 33 '+DATADG' size 500M;
alter database add standby logfile thread 1 group 34 '+DATADG' size 500M;
alter database add standby logfile thread 2 group 35 '+DATADG' size 500M;
alter database add standby logfile thread 2 group 36 '+DATADG' size 500M;
alter database add standby logfile thread 2 group 37 '+DATADG' size 500M;
alter database add standby logfile thread 2 group 38 '+DATADG' size 500M;

 3.2.6 拷贝备库所需文件创建standby端所需要的参数文件:

Shell> su - oracle
Shell> sqlplus "/ as sysdba"
SQL> create pfile='/home/oracle/initorcl.ora' from spfile;

   拷贝静态参数文件:

Shell> su – oracle
Shell> cd $ORACLE_HOME/dbs
Shell> scp initorcl.ora oracle@XXX.XXX.XXX.XXX:`$ORACLE_HOME/dbs`

   拷贝密码文件:

Shell> su – oracle
Shell> cd $ORACLE_HOME/dbs
Shell> scp orapw<sid> oracle@XXX.XXX.XXX.XXX:`pwd`

   拷贝网络连接串文件:

Shell> su – oracle
Shell> cd $ORACLE_HOME/network/admin
Shell> scp tnsnames.ora oracle@XXX.XXX.XXX.XXX:`pwd`

    1.3 备库参数配置3.3.1 目标端环境信息检查备库需要确认如下信息:1. 数据库软件已经正常安装,版本和生产保持一致2. 监听程序已经正常安装,并且服务已启动3. 备库所需文件,均已经正常拷贝到指定位置3.3.2 修改备库参数文件将从生产库拷贝过来的参数文件进行编辑,并修改下列参数文件(静态参数文件命名格式init<SID>.ora):

Shell> su – oracle
Shell> cd $ORACLE_HOME/dbs
Shell> vi initORCL.ora
*.audit_file_dest='/u01/app/oracle/admin/ORCL/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='12.2.0'
*.control_files='+DATA/ORCL/CONTROLFILE/current.279.1128270387','+LOG/ORCL/CONTROLFILE/current.274.1128270387'#Restore Controlfile
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_name='ORCL'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
ORCL1.instance_number=1
ORCL2.instance_number=2
*.local_listener='-oraagent-dummy-'
*.log_archive_config='dg_config=(ORCL,ORCL_DG)'
*.log_archive_dest_1='location=+LOG'
*.log_archive_dest_3='service=ORCL valid_for=(online_logfiles,primary_role) db_unique_name=ORCL'
*.log_archive_dest_state_3='DEFER'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=4250m
*.processes=2000
*.remote_login_passwordfile='exclusive'
*.sga_target=18750m
*.standby_file_management=auto
*.db_unique_name='ORCL_dg'
*.fal_server=ORCL
*.fal_client=ORCL_dg
ORCL2.thread=2
ORCL1.thread=1
ORCL1.undo_tablespace='UNDOTBS1'
ORCL2.undo_tablespace='UNDOTBS2'

   注:备库参数文件中,必须要创建对应的adump审计日志目录:*.audit_file_dest= /u01/app/oracle/admin/ORCL/adump 3.3.3 监听添加静态注册

su – oracle
vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
  (SID_DESC =
      (GLOBAL_DBNAME = ORCL_DG)
      (ORACLE_HOME = /u01/app/oracle/product/12.2/db_1)
      (SID_NAME = ORCL_DG)
    )
  )
 
LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.101)(PORT = 1521))
  )

启动静态监听Lsnrctl start listener1.4 数据全量同步使用duplicate在线复制技术,将源端生产库同步至目标环境,如下:

Shell> rman target sys/xxx@ORCL_DG auxiliary sys/xxx@ORCL
RMAN> duplicate target database for standby from active database nofilenamecheck;

 1.5 启动DG同步开启MRP进程,备库数据前滚,开始同步:

SQL> alter database recover managed standby database disconnect from session;
或者
SQL> alter database recover managed standby database using current logfile disconnect from session;

检查DG同步进程状态:

SQL> select  process, status,sequence#,block#,blocks, delay_mins from v$managed_standby;

检查DG日志同步延时情况:

SQL> select thread#,max(sequence#) from gv$archived_log group by thread#;
SQL> select thread#,max(sequence#) from gv$archived_log where applied='YES' group by thread#;

 第二部分 注册数据库信息将spfile创建至ASM共享磁盘中,再使用ASM中的spfile启动数据库实例。

SQL> create spfile='+DATA/ORCL_DG/spfileorcl.ora' from pfile;

修改RAC两节点默认位置的pfile文件: 1节点:

Shell> cd $ORACLE_HOME/dbs
Shell> vi initorcl1.ora
spfile='+DATA/ORCL_DG/spfileorcl.ora'

2节点:

Shell> cd $ORACLE_HOME/dbs
Shell> vi initorcl2.ora
spfile='+DATA/ORCL_DG/spfileorcl.ora'

重启两节点数据库实例:1节点启动MRP进程恢复同步

SQL> shutdown immediate;
SQL> startup
SQL> alter database recover managed standby database using current logfile disconnect from session;

2节点只需启动

SQL> shutdown immediate;
SQL> startup

将数据库信息注册至集群:

Shell> srvctl add database -d ORCL_DG -o /u01/app/oracle/product/12.2/db_1 -p +DATA/ORCL_DG/spfileorcl.ora
Shell> srvctl add instance -d ORCL_DG -i ORCL1 -n racdb1
Shell> srvctl add instance -d ORCL_DG -i ORCL2 -n racdb2
Shell> srvctl start database -d ORCL_DG

 第三部分 备库读写模式打开将备库切换snapshot standby模式,此时备库为读写模式,业务人员可以对应用程序进行通测,检查不兼容等问题并处理。由于这类操作均在备库进行,并不会对主库和生产业务造成任何影响。第2部分 第3部分 3.1 备库停止MRP进程

SQL> alter database recover managed standby database cancel;
SQL> shutdown immediate;
SQL> startup mount;

 3.2 切换为snapshot standby

SQL> alter database convert to snapshot standby;
SQL> alter database open;
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE

 3.3 切换为physical standby如果是RAC环境,只保留一个节点,其他节点关闭。确保是当前节点为mount状态。执行下列命令进行切换:

SQL> alter database convert to physical standby;

切换完成后数据库会自动dismount,因此需要重启数据,然后启动redo apply。具体操作如下:

SQL> shutdown immediate
SQL> startup mount;
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect from session;

相关推荐