不管经历什么,都不想放弃,当认真做一件事的时候也给了你面对的勇气。
言归正传。。。
搭建DG:
主库不能停机,通过rman的duplicate命令实现在线创建物理备库。
角色 db_name db_unique_name 主机 网络连接字符串
主库 orcl orcl 192.168.15.21 orclpri
备库 orcl orcl2 192.168.15.164 orclsta
1.主库的操作
开启归档:
shutdown immediate;
alter database mount;
alter database archive log;
alter database open;
【确认主库已开启归档和强制归档force logging,查询语句】
sql>select log_mode,force_logging from v$database;
LOG_MODE FOR
------------ ---
ARCHIVELOG NO (说明主库开启了归档,但没有开启force logging)
开启force logging:
sql>alter database force logging;
【确认参数remote_login_passwordfile为EXCLUSIVE(默认值)】
sql>show parameter remote_login_passwordfile
NAME TYPE VALUE
remote_login_passwordfile string EXCLUSIVE
通过v$pwfile_users再次确认sys用户在密码文件中:
sql>select * from v$pwfile_users;
USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE
【查询主备库目录是否相同】
sql>select name ,value from v$parameter
where name in ('audit_file_dest','background_dump_dest','control_files',
'core_dump_dest','user_dump_dest') ORDER BY name ASC;
【配置主库参数】
查看主库的db_name和db_unique_name:
sql>show parameter db_name
NAME TYPE VALUE
------------------------------------ -----------
db_name string orcl
sql>show parameter db_unique_name
NAME TYPE VALUE
------------------------------------ -----------
db_unique_name string orcl
修改参数:
sql>
alter system set archive_lag_target=1800 scope=spfile;
alter system set processes=2000 scope=spfile;
alter system set DB_UNIQUE_NAME=orcl scope=spfile
alter system set log_archive_config='DG_CONFIG=(orcl ,orcl2)';
alter system set log_archive_dest_1='location=D:\app\interlib\log\ valid_for=(all_logfiles,all_roles) db_unique_name=orcl';
alter system set log_archive_dest_state_1=enable;
alter system set log_archive_dest_state_2=defer;
alter system set log_archive_dest_2='service=orclsta LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=orcl2';
alter system set fal_server=orcl2;
alter system set fal_client=orcl;
alter system set standby_file_management=auto;
alter system set DB_FILE_NAME_CONVERT='D:\app\LCY\oradata\orcl\','D:\app\LCY\oradata\orcl\' scope=spfile;
ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='D:\app\interlib\log\','D:\app\interlib\log\' scope=spfile;
create pfile from spfile;
- 启动备库
【创建备库的参数文件,拷贝主库已生成的参数文件,修改以下参数】
*.db_unique_name='orcl2'
*.fal_client='ORCL2'
*.fal_server='ORCL'
*.log_archive_dest_1='location=D:\app\interlib\log\archivelog valid_for=(all_logfiles,all_roles) db_unique_name=orcl2'
*.log_archive_dest_2='service=orclpri LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=orcl'
【拷贝主库的密码文件至备库】
【创建备库的spfile】
sql>shutdown immediate
sql>create spfile from pfile;
【启动备库至nomount状态(sqlplus / as sysdba)】
sql>startup nomount
-
主备库监听设置
【备库的监听设置】(SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = D:\app\LCY\product\11.2.0\dbhome_1) (SID_NAME = orcl) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.164)(PORT = 1521)) ) )
主库:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.21)(PORT = 1521)) ) )
【主备库的tnsnames.ora设置】
orclsta =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.15.164)(PORT = 1521))
)
(CONNECT_DATA = (sid = orcl))
)
orclpri =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.15.21)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED) (sid =orcl))
)
3)测试主备是否互通(主备库都拼)
tnsping orclpri
tnsping orclsta
- 复制主库至备库
【备库执行恢复】在执行恢复之前,一定要保证三点:
A.备份文件在备库的目录一定要和主库的一样;
B.备库存放数据文件等相应的目录都已存在;
C.备库处于nomount状态
$ rman target sys/lcy123@orclpri AUXILIARY sys/lcy123@orclsta
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;
【启用日志传送】之前把log_archive_dest_state_2设为defer
,现在在主备库中把它设为enable
:
sql>alter system set log_archive_dest_state_2=enable; (主备一定要都执行)
【验证结果】
A.主 sql>select database_role from v$database;
备 sql>select database_role from v$database;
B.主库插入一条数据
sql>INSERT INTO "SCOTT"."DEPT" ("DEPTNO", "DNAME", "LOC")
VALUES ('12', 'OPERATIONS', 'OPERATIONS');
sql>commit;
sql>alter system switch logfile;
C.备库:启动redo应用、暂停redo应用 打开数据库,查询数据是否被同步过来
sql>alter database recover managed standby database disconnect from session;
sql>alter database recover managed standby database cancel;
sql>alter database open;
sql>select open_mode from v$database;
sql>select * from scott.dept;
【启用redo】在主备库上分别创建standby redo log
sql>select group#, type, member from v$logfile;
sql>
alter database add standby logfile group 4 ('d:\app\LCY\oradata\orcl\redo04.log') size 50m;
alter database add standby logfile group 5 ('d:\app\LCY\oradata\orcl\redo05.log') size 50m;
alter database add standby logfile group 6 ('d:\app\LCY\oradata\orcl\redo06.log') size 50m;
【启用实时备库redo应用】
sql>alter database recover managed standby database using current logfile disconnect from session;
sql>select sequence#,applied from v$archived_log order by sequence# asc;
A、 switchover切换
切换前:
主库IP:192.168.15.21
备库IP:192.168.15.164
【主备库执行】
sqlplus / as sysdba
查看主库的基本信息:
SQL>select open_mode,protection_mode,database_role,switchover_status from v$database;
查看备库的基本信息:
SQL>select open_mode,protection_mode,database_role,switchover_status from v$database;
【192.168.15.21主库执行】
SQL>alter database commit to switchover to physical standby with session shutdown;
SQL>shutdown abort;
SQL>startup
SQL>select open_mode from v$database;
OPEN_MODE
----------------------------------------
READ ONLY
SQL>select database_role from v$database;
DATABASE_ROLE
--------------------------------
PHYSICAL STANDBY
【192.168.15.164备库执行】
SQL>alter database commit to switchover to primary with session shutdown;
SQL>alter database open;
SQL>select switchover_status,database_role from v$database;
SQL>select open_mode,protection_mode,database_role from v$database;
sql>alter database recover managed standby database using current logfile disconnect from session;
【主库插入一条数据】
sql>INSERT INTO "SCOTT"."DEPT" ("DEPTNO", "DNAME", "LOC") VALUES ('13', 'OPERATIONS', 'OPERATIONS');
sql>commit;
sql>alter system switch logfile;
【备库执行查询】
sql>select * from scott.dept;
【主库执行切换】
sql>alter system switch logfile;
sql>select sequence#,applied from v$archived_log order by sequence# asc;
【备库执行】
sql>select sequence#,applied from v$archived_log order by sequence# asc;
至此DG就搭建完毕了。