centos6.x-7.x配置oracle11g2主从复制汇总整理

说明:除了安装oracle数据库部分操作用root用户外,只要数据库安装好后,其余主从复制各种操作都是在oracle用户下进行操作。

网上操作借鉴地址,此2个操作中部分步骤有问题,思路正确:

https://blog.csdn.net/bibibrave/article/details/81165014

https://blog.csdn.net/xiezuoyong/article/details/83862885

1、主从复制简介:

  主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是实时的业务数据库,从数据库的作用和使用场合一般有几个:

一、作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作;

二、可在从数据库作备份、数据统计等工作,这样不影响主数据库的性能;

三、实现读写分离;

Linux为centos6.x或centos7.x配置oracle11g2主从复制时,只有在安装oracle时有些命令不通,在配置主从复制时,命令都是相同的。

2、服务器登录oracle简介:

(1)切换到oracle用户:

使用su oracle命令切换到oracle用户,然后执行命令:

source /homt/oracle/.bash_profile让环境变量文件生效

(2)进入sqlplus:

执行命令:sqlplus /nolog,进入到sqlplus:

(3)连接到数据库:

SQL语句:conn /as sysdba,连接到数据库。

(4)启动数据库:

SQL语句:shutdown immediate;

(5)停止数据库:

SQL语句:startup;

3、环境介绍:

操作系统版本:CentOS release 6.10 (64位)

数据库版本:ORACLE 11GR2 11.2.0.1.0 (64位)

主数据库

192.168.0.141

SID:orclpri

db_name:orclpri

db_unique_name:orclpri

备份数据库

192.168.0.142

SID:orcldg

db_name:orclpri

db_unique_name:orcldg

版本统一、数据库统一、防火墙关闭

4、主数据库安装:

按照linux中安装oracle步骤进行操作,安装oracle软件、开启监听程序、创建数据库实例。

5、从数据库安装:

按照linux中安装oracle步骤进行操作,安装oracle软件、开启监听程序。不要创建数据库实例。

6、主数据库改为强制日志模式:

(1)查看强制日志模式状态:

SQL语句:select name,log_mode,force_logging from v$database;

(2)修改为强制日志模式:

SQL语句:alter database force logging;

(3)查看强制日志修改结果:

SQL语句:select name,log_mode,force_logging from v$database;

7、主服务器上创建主数据库密码文件:

在oracle用户下,并执行过source /home/oracle/.bash_profile后

执行命令:

orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle force=y

说明:password值为主数据库sys用户的密码,执行命令后会在$ORACLE_HOME/dbs文件夹内生成密码文件:orapworclpri(本人主库SID为:orclpri)

8、主数据库创建standby redolog日志组:

原则:

(1)standby redo log的文件大小与primary 数据库online redo log 文件大小相同

(2)standby redo log日志文件组的个数依照下面的原则进行计算:

Standby redo log组数公式>=(每个instance日志组个数+1)*instance个数。假如只有一个节点,这个节点有三组redolog,所以Standby redo log组数>=(3+1)*1 == 4所以至少需要创建4组Standby redo log由于已经存在group1-3,,所以group号只能从4开始。

查看当前线程与日志组的对应关系及日志组的大小:

SQL语句:select thread#,group#,bytes/1024/1024 from v$log;

创建standby redolog日志组:

执行SQL语句:

alter database add standby logfile group 4('/data/oracle/oradata/orclpri/standbyredo01.log') size 50m;

alter database add standby logfile group 5('/data/oracle/oradata/orclpri/standbyredo02.log') size 50m;

alter database add standby logfile group 6('/data/oracle/oradata/orclpri/standbyredo03.log') size 50m;

alter database add standby logfile group 7('/data/oracle/oradata/orclpri/standbyredo04.log') size 50m;

查看standby 日志组的信息:

执行SQL语句:

select group#,sequence#,status, bytes/1024/1024 from v$standby_log;

9、主数据库创建pfile参数文件:

执行SQL语句:create pfile from spfile;

创建的pfile为:

$ORACLE_HOME/dbs/init$ORACLE_SID.ora文件

10、修改主数据库pfile参数文件:

(1)增加以下参数:

*.db_unique_name='orclpri'

*.log_archive_config='dg_config=(orclpri,orcldg)'

*.log_archive_dest_1='location=/data/oracle/arch valid_for=(all_logfiles,all_roles) db_unique_name=orclpri'

*.log_archive_dest_2='service=orcldg valid_for=(online_logfiles,primary_role) db_unique_name=orcldg'

.log_archive_dest_state_1=enable

*.log_archive_dest_state_2=enable

*.log_archive_max_processes=4

*.fal_server='orcldg'

*.fal_client='orclpri'

*.db_file_name_convert='/data/oracle/oradata/orcldg','/data/oracle/oradata/orclpri'

*.log_file_name_convert='/data/oracle/oradata/orcldg','/data/oracle/oradata/orclpri'

*.standby_file_management='auto'

(2)创建文件夹:

执行命令:mkdir -p /data/oracle/arch

注意:*.log_archive_dest_1参数中location为自己指定的一个新的路径,目的是为了确认主库后面重启确实是利用了修改后的pfile参数文件。

注意:详情见汇总整理参数文件夹中文件,修改的pfile参数文件中不允许有中文汉字、中文字符等一切中文内容,否则无法用pfile创建spfile。

11、主数据关闭并用修改后pfile创建spfile:

执行SQL语句:shutdown immediate;

执行SQL语句:create spfile from pfile;

创建的spfile为:

$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora文件

12、主数据库启动归档模式并开启数据库:

(1)将数据库启动到mount状态:

执行SQL语句:startup mount;

(2)启用归档模式:

执行SQL语句:alter database archivelog;

(3)数据库打开:

执行SQL语句:alter database open;

(4)查看是否启用归档模式:

执行SQL语句: archive log list;

如上,归档路径已经改为/u01/app/oracle/arch(网上截图的路径),只要与自己修改的pfile路径一致,那就证明对pfile的修改已生效。

13、主数据库修改网络服务配置文件tnsnames.ora:

(1)添加访问主库网络服务名:

orclpri =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.141)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orclpri)

    )

  )

(2)添加访问备库网络服务名:

orcldg =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.142)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcldg)

    )

  )

(3)tnsping测试主、备库网络服务名:

主库网络服务名测试:

执行命令:tnsping orclpri;

备库网络服务名测试:

执行命令:tnsping orcldg;

14、主数据库服务器拷贝文件到备数据库服务器:

(1)拷贝主数据库密码文件:

将主数据库密码文件拷贝到备数据库对应位置:

$ORACLE_HOME/dbs/orapw$ORACLE_SID

(2)拷贝主数据库pfile文件:

将主数据库中pfile文件拷贝到备数据库对应位置:

$ORACLE_HOME/dbs/init$ORACLE_SID.ora

(3)拷贝主数据库网络服务配置文件:

将主数据库中tnsnames.ora网络服务配置文件拷贝到备数据库对应位置:

$ORACLE_HOME/network/admin/tnsnames.ora

15、备服务器上创建备数据库密码文件:

在oracle用户下,并执行过source /home/oracle/.bash_profile后

执行命令:

orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle force=y

说明:password值为主数据库sys用户的密码,执行命令后会在$ORACLE_HOME/dbs文件夹内生成密码文件:orapworclpri(本人从库SID为:orcldg)

16、备数据库修改网络服务配置文件tnsnames.ora:

将从主库拷贝到备库上的tnsnames.ora中红线圈出位置修改为备库对应的信息:

名称就是:LISTENER_$ORACLE_SID(本人从库SID为:orcldg,即:LISTENER_ORCLDG)。

IP就是备数据库所在服务器IP地址。

17、备数据库修改pfile参数文件:

(1)重命名pfile参数文件:

将从主库拷贝到备库上的pfile参数文件重命名,修改为init$ORACLE_SID(本人从库SID为orcldf,即:initorcldg)。

(2)修改参数文件中参数值:

将从库拷贝到备库上的pfile参数文件内参数,设计到主库上SID名称的地方全部修改为备库的SID,将备库SID名称的地方全部修改为主库的SID。

18、备数据库服务器创建目录:

需要创建的目录如下,按照自己oracle安装路径,进行创建:

mkdir -p /data/oracle/admin/orcl/adump

mkdir -p /data/oracle/admin/orcl/dbdump

mkdir -p /data/oracle/admin/orcl/pfile

mkdir -p /data/oracle/oradata/orcl

mkdir -p /data/oracle/flash_recovery_area/orcl

mkdir -p /data/oracle/oradata/orcl/archivelog

19、备数据库用修改后pfile创建spfile:

将修改好的pfile放到对应的位置:$ORACLE_HOME/dbs文件夹中。

执行SQL语句:create spfile from pfile;

20、备数据库启动到nomount状态:

执行SQL语句:startup nomount;

21、备服务器上利用RMAN恢复主数据库到备数据库上:

执行命令:rman target sys/[email protected] auxiliary sys/[email protected]

然后在RMAN>输入:

duplicate target database for standby from active database nofilenamecheck;

到最后显示如下内容即为成功:

22、查看备数据库状态:

执行SQL:select status from v$instance;

23、备数据库启动日志应用:

执行SQL语句:alter database recover managed standby database disconnect from session;

24、查看日志应用情况:

执行SQL语句:set pagesize 100

执行SQL语句:select sequence#,applied from v$archived_log order by 1;

如上,如果发现有个NO的,也是正常的,说明该日志在主库上还没有归档,可以在主库上运行alter system switch logfile;命令来进行日志切换,再到备库查看日志应用情况。

25、查看主数据库和备数据库归档序列号是否一致:

(1)主数据库查看归档序列号:

执行SQL语句:alter system switch logfile;

执行SQL语句:archive log list;

(2)备数据库查看归档序列号:

执行SQL语句: archive log list;

主要是current log sequence参数,有时候current log sequence差1也是可以的。

26、备数据库打开:

执行SQL语句:shutdown immediate;

执行SQL语句:start nomount;

执行SQL语句:alter database mount standby database;

执行SQL语句:alter database open read only;

执行SQL语句:alter database recover managed standby database using current logfile disconnect from session;

27、主从复制测试:

在主数据库上进行操作,然后在从数据库上看看主库上操作结果数据是否同步过去,正常是可以同步过去的。

28、主从复制数据库关闭启动:

(1)主从复制数据库关闭:

主库关闭:

关闭数据库:

执行SQL语句:shutdown immediate;

关闭监听服务:

执行命令:lsnrctl stop;

从库关闭:

关闭数据库:

执行SQL语句:shutdown immediate;

关闭监听服务:

执行命令:lsnrctl stop;

(2)主从复制数据库启动:

主库启动:

启动监听服务:

执行命令:lsnrctl start;

启动数据库:

执行SQL语句:startup;

日志手动切换:

执行SQL语句:alter system switch logfile;

从库启动:

启动监听服务:

执行命令:lsnrctl start;

启动数据库:

执行SQL语句:startup;(开启read-only模式的数据库)

查看开启模式SQL语句:select open_mode from v$database;

执行SQL语句:recover managed standby database using current logfile disconnect from session;(开启实施日志应用)

29、主从复制中间数据同步失败:

如果主从复制数据库中间数据同步失败了,先检查从库上是否开启实施日志应用的SQL语句,然后在主库上执行日志手动切换SQL:alter system switch logfile,然后再看看数据是否同步成功。如果数据同步还是不成功,那么就需要在从库上,按照上面步骤从21条,就是在备库上利用RMAN恢复主数据库开始重新进行操作,直到26条,被数据库打开。这样就主从复制应该就正常可以同步数据了。