新库Oracle DG搭建从老库到新库的迁移(oracle dg老库)

新库Oracle DG搭建:从老库到新库的迁移

随着企业数据量的不断增长,数据库的备份和恢复变得越来越重要。为了提高数据库的可用性和可靠性,Oracle提供了数据保护解决方案,其中之一就是Data Guard(DG),它提供了基于物理和逻辑的数据复制和故障切换功能。

在实际应用中,如果需要将应用从老库迁移到新库,可以通过Oracle DG直接将数据迁移到新库。本文将介绍如何使用Oracle DG搭建并实现从老库到新库的迁移。

1. 搭建DG环境

在Oracle DG中,数据复制分为物理复制和逻辑复制。物理复制是指将数据文件通过网络传输到备库,逻辑复制则是将SQL语句通过网络传输到备库。

为了避免物理复制过程中的性能问题,本文采用逻辑复制,即使用“实时应用”模式。在该模式下,主库中的每个事务提交时,该事务所产生的SQL语句会通过网络传输到备库,并在备库执行。

实时应用模式需要将主库设置为“归档模式”。需要在主库和备库分别运行以下SQL语句,并重启数据库以使设置生效:

$ sqlplus / as sysdba
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;

搭建DG环境的详细步骤如下:

(1)在主库和备库上创建DG的监听器:

$ lsnrctl start
$ srvctl add listener -p TCP:1521 -o $ORACLE_HOME

(2)在主库上创建DG的日志归档:

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=', SYNC NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=;

其中,SERVICE_NAME是备库的服务名,DB_UNIQUE_NAME是主库的唯一名称。

(3)在备库上创建DG的应用进程:

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=', VALID_FOR=(STANDBY_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=;

其中,SERVICE_NAME是主库的服务名,DB_UNIQUE_NAME是备库的唯一名称。

(4)在主库上创建备库到主库的连接:

SQL> CREATE USER  IDENTIFIED BY  DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
SQL> GRANT CONNECT, RESOURCE, DBA TO ;
SQL> ALTER SYSTEM SET FAL_SERVER='' SCOPE=BOTH;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(,)' SCOPE=BOTH;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;
SQL> ALTER SYSTEM SWITCH LOGFILE;

其中,USER_NAME和PASSWORD是在备库上创建的用户,DB_UNIQUE_NAME是主库唯一名称,STANDBY_DB_UNIQUE_NAME是备库唯一名称。

(5)在备库上创建主库到备库的连接:

SQL> CREATE USER  IDENTIFIED BY  DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
SQL> GRANT CONNECT, RESOURCE, DBA TO ;
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 4 ('+') SIZE 100M;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(,)' SCOPE=BOTH;
SQL> ALTER SYSTEM SWITCH LOGFILE;

其中,USER_NAME和PASSWORD是在主库上创建的用户,DB_UNIQUE_NAME是主库唯一名称,STANDBY_DB_UNIQUE_NAME是备库唯一名称,DATA_VOL是备库的数据卷。

2. 迁移数据

当DG环境搭建好后,可以开始将数据从老库迁移到新库。首先需要在新库上创建一个空的数据库,并将数据库与DG环境连接。

(1)在新库上创建一个空的数据库:

$ sqlplus / as sysdba
SQL> CREATE DATABASE USER SYS IDENTIFIED BY USER SYSTEM IDENTIFIED BY CONTROLFILE REUSE LOGFILE;

其中,DB_NAME是新库的名称,SYS_PASSWORD和SYSTEM_PASSWORD是新库的用户名和密码。

(2)设置新库与DG环境连接:

SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='' SCOPE=BOTH;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;

其中,SERVICE_NAME是备库的服务名。

(3)在老库上执行数据备份:

SQL> RMAN TARGET / CATALOG /@ 
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

其中,USER_NAME、PASSWORD、REPO_CONNECT分别是RMAN catalog用户的用户名、密码和连接字符串。

(4)将备份数据传输到新库:

$ scp  :

其中,BACKUP_FILES是备份数据的文件,NEW_DB_HOST和NEW_DB_DIR分别是新库的主机名和路径。

(5)在新库上执行数据恢复和迁移:

SQL> RMAN TARGET / CATALOG /@
RMAN> RUN
{
SET NEWNAME FOR DATAFILE 1 TO '//system01.dbf';
SET NEWNAME FOR DATAFILE 2 TO '//sysaux01.dbf';
SET NEWNAME FOR DATAFILE 3 TO '//undotbs01.dbf';
SET NEWNAME FOR DATAFILE 4 TO '//users01.dbf';
RESTORE DATABASE;
SWITCH DATABASE TO COPY;
RECOVER DATABASE;
}

其中,NEW_DATA_DIR是新库的数据卷。

3. 故障切换

一旦DG环境搭建完成并且数据成功迁移,企业可以通过DG实现故障切换,保证业务的连续性和可用性。故障切换主要包括如下步骤:

(1)在备库上启动数据复制:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

(2)将故障主库切换为备库:

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN IMMEDIATE;

(3)在新主库上启动数据库:

$ sqlplus / as sysdba
SQL> STARTUP;

(4)在新主库上启动应用程序:

$ ./start_app.sh

当故障原主库恢复正常后,可以通过DG转换回主库的身份:

(1)在原主库上启动数据库:

$ sqlplus / as sysdba
SQL> STARTUP;

(2)将原主库设置为备库:

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN IMMEDIATE;

(3)在新备库上启动数据复制:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

(4)在新主库上启动应用程序:

$ ./start_app.sh

总结

本文介绍了如何使用Oracle DG实现从老库到新库的数据迁移。通过DG的数据复制和故障切换功能,企业可以提高数据库的可用性和可靠性,保证业务的连续性和稳定性。


数据运维技术 » 新库Oracle DG搭建从老库到新库的迁移(oracle dg老库)