新库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的数据复制和故障切换功能,企业可以提高数据库的可用性和可靠性,保证业务的连续性和稳定性。