centos6.x-7.x配置oracle11g2主从复制汇总整理
说明:除了安装oracle数据库部分操作用root用户外,只要数据库安装好后,其余主从复制各种操作都是在oracle用户下进行操作。
网上操作借鉴地址,此2个操作中部分步骤有问题,思路正确:
https://blog.****.net/bibibrave/article/details/81165014
https://blog.****.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条,被数据库打开。这样就主从复制应该就正常可以同步数据了。