[主从搭建二]CentOS oracle12c ADG搭建
-
目录
- 主机、备机hosts配置
- 主机参数配置
- 主机网络配置
- 主机修改pfile文件
- 主机创建相关目录
- 主机上拷贝文件到备机
- 备机网络配置
- 备机上修改从主库发送过来的pfile
- 备机创建相关目录
- 备机启动oracle到nomount状态
- 使用rman连接主机与备机
- 备机数据库开启
- 测试数据同步
-
主机、备机hosts配置
主机、备机 配置一样
[root@localhost ~] cat /etc/hosts # 添加内容: 172.19.0.140 NODEDB1 NODEDB1.COM 172.19.0.190 NODEDB2 NODEDB2.COM -
主机参数配置
日志配置
# sqlplus 登录 sqlplus / as sysdba # 先关闭数据库 SQL> shutdown immediate; # 启动到nomount状态 SQL> startup nomount; # 在启动到mount状态 SQL> alter database mount; # 配置为强日志记录 # 修改数据库为强制记日志,这是必须的操作,主库的每一步操作都得记录到日志中去。 SQL> alter database force logging; # 修改为归档模式 # 修改数据库为归档模式,因为dg是通过传送归档日志到备库然后应用来保证主备库一致的 SQL> alter database archivelog; # 创建redo 日志文件 SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/orcl/app/oracle/oradata/orcl/redo04.log') size 50M; SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/orcl/app/oracle/oradata/orcl/redo05.log') size 50M; SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/orcl/app/oracle/oradata/orcl/redo06.log') size 50M; SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/orcl/app/oracle/oradata/orcl/redo07.log') size 50M; #查询日志文件 SQL> select group#,type,member from v$logfile;创建pfile
这里创建pfile是为了做一些主库参数的配置;
后续步骤还得拷贝到备库再次修改成备库的配置;
通过pfile才能在主备库之间建立联系;
主库和备库中的pfile相似但有区别。# 创建 pfile create pfile from spfile;关闭数据库
# 再次关闭数据库并退出 SQL> shutdown immediate; SQL> exit创建归档目录
文件路径可自定义,但需要和后续步骤的配置保持一致
cd /orcl/app/oracle/oradata/orcl mkdir archivelog -
主机网络配置
修改 listener.ora
监听配置
# 查看 /orcl/app/oracle/product/12.2.0/db_1/network/admin/listener.ora 配置 [oracle@localhost ~]$ cd $ORACLE_HOME/network/admin [oracle@localhost admin]$ cat listener.ora # 替换成如下内容: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /orcl/app/oracle/product/12.2.0/db_1) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = orcl) (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /orcl/app/oracle/product/12.2.0/db_1) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = NODEDB1)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) ADR_BASE_LISTENER = /orcl/app/oracle修改 tnsname.ora
tnsname 连接主库和备库的连接串管理
# 查看 /orcl/app/oracle/product/12.2.0/db_1/network/admin/tnsnames.ora 配置 [oracle@localhost ~]$ cd $ORACLE_HOME/network/admin [oracle@localhost admin]$ cat tnsnames.ora # 替换成如下内容: LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = NODEDB1)(PORT = 1521)) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = NODEDB1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) ORCL_P = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = NODEDB1)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) (UR=A) ) ) ORCL_S = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = NODEDB2)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) (UR=A) ) )重启监听
# 监听停止 lsnrctl stop # 监听启动 lsnrctl start # 或 监听重载 lsnrctl reload # 可查看监听状态 lsnrctl status测试连接
# 测试主库连接 tnsping ORCL_P # 测试从库连接 tnsping ORCL_S -
修改pfile文件
修改 initorcl.ora
目录:/orcl/app/oracle/product/12.2.0/db_1/dbs
'#' 为备注,不能出现在内容中,实测将备注放内容中后续生成spfile报错[oracle@localhost dbs]$ cat initorcl.ora orcl.__data_transfer_cache_size=0 orcl.__db_cache_size=12314476544 orcl.__inmemory_ext_roarea=0 orcl.__inmemory_ext_rwarea=0 orcl.__java_pool_size=100663296 orcl.__large_pool_size=939524096 orcl.__oracle_base='/orcl/app/oracle'#ORACLE_BASE set from environment orcl.__pga_aggregate_target=5066719232 orcl.__sga_target=15166603264 orcl.__shared_io_pool_size=0 orcl.__shared_pool_size=1778384896 orcl.__streams_pool_size=0 *.audit_file_dest='/orcl/app/oracle/admin/orcl/adump' *.audit_trail='db' *.compatible='12.2.0' *.control_files='/orcl/app/oracle/oradata/orcl/control01.ctl','/orcl/app/oracle/oradata/orcl/control02.ctl' *.db_block_size=8192 *.db_name='orcl' *.diagnostic_dest='/orcl/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.enable_pluggable_database=true *.local_listener='LISTENER_ORCL' *.nls_language='SIMPLIFIED CHINESE' *.nls_territory='CHINA' *.open_cursors=300 *.pga_aggregate_target=4812m *.processes=2560 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=14436m *.undo_tablespace='UNDOTBS1' # 下面DB_UNIQUE_NAME 配置上上面tns文件中配置了主库链接(因为我是主库) DB_UNIQUE_NAME=ORCL_P # 下面配置上主库和备库链接 LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCL_P,ORCL_S)' #下面设置好归档目录(就是上面自定义创建的归档目录,归档日志将存放在里面) LOG_ARCHIVE_DEST_1='LOCATION=/orcl/app/oracle/oradata/orcl/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL_P' LOG_ARCHIVE_DEST_2='SERVICE=ORCL_S ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL_S' LOG_ARCHIVE_DEST_STATE_1=ENABLE LOG_ARCHIVE_DEST_STATE_2=ENABLE REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE LOG_ARCHIVE_FORMAT=%t_%s_%r.arc # 配置备库tns链接 FAL_SERVER=ORCL_S STANDBY_FILE_MANAGEMENT=AUTO再次关闭数据库,并通过pfile启动到nomount状态,并且创建spfile
[oracle@localhost dbs]$ sqlplus / as sysdba SQL> shutdown immediate # 如下命令执行前 保证 initorcl.ora 文件内容格式,清除上面的注释内容 SQL> startup nomount pfile='/orcl/app/oracle/product/12.2.0/db_1/dbs/initorcl.ora'; SQL> create spfile from pfile; SQL> alter database mount; SQL> alter database open; SQL> exit -
主机创建相关目录
# 主库 mkdir /orcl/app/oracle/oradata/orcl/backup -
主机上拷贝文件到备机
[oracle@localhost ~]# cd $ORACLE_HOME/dbs # 拷贝到备库 [oracle@localhost dbs]$ scp ./initorcl.ora oracle@NODEDB2:$ORACLE_HOME/dbs [oracle@localhost dbs]$ scp ./orapworcl oracle@NODEDB2:$ORACLE_HOME/dbs -
备机网络配置
修改 listener.ora
监听配置 (注意和主机配置的区别)
# 查看 /orcl/app/oracle/product/12.2.0/db_1/network/admin/listener.ora 配置 [oracle@localhost ~]$ cd $ORACLE_HOME/network/admin [oracle@localhost admin]$ cat listener.ora # 替换成如下内容: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /orcl/app/oracle/product/12.2.0/db_1) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = orcl) (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /orcl/app/oracle/product/12.2.0/db_1) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = NODEDB2)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) ADR_BASE_LISTENER = /orcl/app/oracle修改 tnsname.ora
tnsname 连接主库和备库的连接串管理(注意和主机配置的区别)
# 查看 /orcl/app/oracle/product/12.2.0/db_1/network/admin/tnsnames.ora 配置 [oracle@localhost ~]$ cd $ORACLE_HOME/network/admin [oracle@localhost admin]$ cat tnsnames.ora # 替换成如下内容: LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = NODEDB2)(PORT = 1521)) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = NODEDB2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) ORCL_P = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = NODEDB1)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) (UR=A) ) ) ORCL_S = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = NODEDB2)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) (UR=A) ) )重启监听
# 监听停止 lsnrctl stop # 监听启动 lsnrctl start # 或 监听重载 lsnrctl reload # 可查看监听状态 lsnrctl status -
备机上修改从主库发送过来的pfile
修改 initorcl.ora
目录:/orcl/app/oracle/product/12.2.0/db_1/dbs
'#' 为备注,不能出现在内容中,实测将备注放内容中后续生成spfile报错cd /orcl/app/oracle/product/12.2.0/db_1/dbs [oracle@oracle-1 dbs]$ cat initorcl.ora orcl.__data_transfer_cache_size=0 orcl.__db_cache_size=12314476544 orcl.__inmemory_ext_roarea=0 orcl.__inmemory_ext_rwarea=0 orcl.__java_pool_size=100663296 orcl.__large_pool_size=939524096 orcl.__oracle_base='/orcl/app/oracle'#ORACLE_BASE set from environment orcl.__pga_aggregate_target=5066719232 orcl.__sga_target=15166603264 orcl.__shared_io_pool_size=0 orcl.__shared_pool_size=1778384896 orcl.__streams_pool_size=0 *.audit_file_dest='/orcl/app/oracle/admin/orcl/adump' *.audit_trail='db' *.compatible='12.2.0' *.control_files='/orcl/app/oracle/oradata/orcl/control01.ctl','/orcl/app/oracle/oradata/orcl/control02.ctl' *.db_block_size=8192 *.db_name='orcl' *.diagnostic_dest='/orcl/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.enable_pluggable_database=true *.local_listener='LISTENER_ORCL' *.nls_language='SIMPLIFIED CHINESE' *.nls_territory='CHINA' *.open_cursors=300 *.pga_aggregate_target=4812m *.processes=2560 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=14436m *.undo_tablespace='UNDOTBS1' # 下面两个参数要在备库上添加上 *.log_file_name_convert='/orcl/app/oracle/oradata/orcl','/orcl/app/oracle/oradata/orcl' *.db_file_name_convert='/orcl/app/oracle/oradata/orcl','/orcl/app/oracle/oradata/orcl' # 下面这个设置为tns 中的 ORCL_S 因为我是备库 DB_UNIQUE_NAME=ORCL_S LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCL_P,ORCL_S)' # 备库上同样配置自定义的归档目录 LOG_ARCHIVE_DEST_1='LOCATION=/orcl/app/oracle/oradata/orcl/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL_S' LOG_ARCHIVE_DEST_2='SERVICE=ORCL_S ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL_P' LOG_ARCHIVE_DEST_STATE_1=ENABLE LOG_ARCHIVE_DEST_STATE_2=ENABLE REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE LOG_ARCHIVE_FORMAT=%t_%s_%r.arc #指向主库 FAL_SERVER=ORCL_P STANDBY_FILE_MANAGEMENT=AUTO -
备机创建相关目录
mkdir /orcl/app/oracle/oradata/orcl/archivelog mkdir /orcl/app/oracle/oradata/orcl/backup -
备机启动oracle到nomount状态
以pfile启用到nomount,不要打开数据库,为下一步准备
sqlp / as sysdba SQL> shutdown immediate; SQL> startup nomount pfile="/orcl/app/oracle/product/12.2.0/db_1/dbs/initorcl.ora"; SQL> exit -
使用rman连接主机与备机
特别注意:
1.rman连接动作在备库上做
2.系统要求主库处于nomount,但是这个时候rman又连不上主库。开启主库rman连上之后又报错主库必须要nomount,很尴尬 ,解决办法:在tns配置文件中链接信息下面添加(UR=A) 使用静态链接,解决问题(前面步骤tns配置已经加入)。
3.备库也必须使用pfile 启动到nomount状态(备库不能打开)#使用rman链接主库和备库 [oracle@localhost dbs]$ rman target sys/xxx@ORCL_P auxiliary sys/xxx@ORCL_S # 得到如下内容(注意辅助数据库是未装载状态): 恢复管理器: Release 12.2.0.1.0 - Production on 星期一 8月 31 21:31:39 2020 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. 已连接到目标数据库: ORCL (DBID=1577340417) 已连接到辅助数据库: ORCL (未装载) # 开始同步 RMAN> duplicate target database for standby from active database nofilenamecheck; RMAN> exit; -
备机数据库开启
完成前面动作后,开启备机数据库
[oracle@localhost dbs]$ sqlplus / as sysdba # 打开数据库 SQL> alter database open; #检查数据库状态 SQL> select open_mode from v$database; OPEN_MODE -------------------- READ ONLY SQL> alter database recover managed standby database disconnect from session; -
测试数据同步
# 在主库创建表并插入数据 SQL> create table sample(id number(10),name varchar2(20)); SQL> insert into sample values(1,'www.iusaas.com'); SQL> insert into sample values(2,'多租户系统'); SQL> commit; SQL> alter system switch logfile; #在备库检查是否同步 SQL> desc sample; SQL> select * from sample;