第二部分主要介绍了DG的配置及主备库角色切换
一、安装准备工作
1、安装grid
2、创建ASM磁盘组(与rac库一致)
3、安装oracle软件
4、挂载文件磁盘(rac1与dg)
fdisk /dev/sdb1
fdisk -l
mkfs.ext4 /dev/sdb1
mkdir rman_backup
chown -R oracle:oinstall /rman_backup/
mount -t ext4 /dev/sdb1 /rman_backup/
df -Th
--创建开机挂载
vi /etc/fstab
/dev/sdb1 /rman_backup ext4 defaults
0 0
二、RAC 主库配置单实例 Active Dataguard
1、RAC主库准备工作
RAC 主库必须置为归档模式:
select open_mode ,log_mode from v$database;
alter database archivelog;
select open_mode ,log_mode from v$database;
RAC 主库必须置为 Force Logging 模式:
select name,log_mode,force_logging from gv$database;
alter database force logging;
select name,log_mode,force_logging from gv$database;
RAC 主库执行 RMAN 全备:
list archivelog all;
RMAN> run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
backup database format '/rman_backup/Full_%U.bak' ;
backup archivelog all format '/rman_backup/ARC_%U.bak';
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}
RAC 主库执行创建物理备库控制文件:
backup device type disk format
'/rman_backup/standby_%U.ctl' current
controlfile for standby;
RAC 主库创建物理备库初始化参数文件:
show parameter spfile;
create pfile='/rman_backup/initorcl.ora' from spfile;
RAC 主库修改口令文件,使双节点 SYS 用户口令一致:
alter user sys identified by oracle;
三、物理备库准备工作
1、FTP 主库备份文件+备库控制文件+备库参数文件至物理备库服务器:
cd /rman_backup/
scp /rman_backup/Full_0*.bak 192.168.3.20:/rman_backup/
scp /rman_backup/ARC_0fnpvd06_1_1.bak
192.168.3.20:/rman_backup/
scp /rman_backup/initorcl.ora 192.168.3.20:/rman_backup/
scp /rman_backup/standby_0gnpvd65_1_1.ctl
192.168.3.20:/rman_backup/
--scp /filename root@ip:/path
2、物理备库创建口令文件:
orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle
entries=5
3、物理备库初始化参数文件修改:
cat /u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora
orcl.__db_cache_size=255852544
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from
environment
orcl.__pga_aggregate_target=419430400
orcl.__sga_target=423624704
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=146800640
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.cluster_database=false
*.compatible='11.2.0.0.0'
*.control_files='+DATA/orcl/controlfile/cont.ctl'
*.core_dump_dest='/u01/app/oracle/diag/rdbms/orcl/cdump'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain=''
*.db_file_name_convert='+DATA/orcl/','+DATA/orcl/'
*.db_name='orcl'
*.db_recovery_file_dest='+FLA'
*.db_recovery_file_dest_size=4070572032
*.db_unique_name='orcldg'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.fal_client='orcltns'--tns中配置
*.fal_server='orcl1tns','orcl2'tns --tns中配置
*.log_archive_config='dg_config=(orcl,orcldg)'
--DB_UNIQUE_NAME
*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST
valid_for=(all_logfiles,all_roles)
db_unique_name=orcldg'
*.log_archive_dest_2='service=orcl1tns
valid_for=(online_logfiles,primary_role)
db_unique_name=orcl'
*.log_archive_format='ARC_%t_%S_%r.arc'
*.log_file_name_convert='+DATA/orcl/','+DATA/orcl/'
--主备库日志文件存放路径
*.memory_target=842006528
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='exclusive'
*.service_names='orcldg'
*.standby_file_management='auto'
*.thread=1
*.undo_management='auto'
*.undo_tablespace='UNDOTBS1
***********
若dg库路径不一致需做如下操作
mkdir创建admin下的文件
su - grid
asmcmd -P
cd data
mkdir orcldg
*************************
4、配置tnsnames并测试登录(两边)
orcltns
orcl1tns
orcl2tns
四、创建物理备库
1、物理备库启动 NOMOUNT 状态:
env|grep ORA --查环境变量
> startup nomount;
2、RMAN 恢复备库控制文件:
>rman target /
restore standby controlfile from
'/rman_backup/standby_0gnpvd65_1_1.ctl';
3、MOUNT 物理备库:
alter database mount;
4、RMAN restore 物理备库:
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
restore database;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}
5、备库上创建 standby logfile:
select * from v$standby_log;
alter database add standby logfile thread 1 group 5 size
50m,group 6 size 50m,group 7 size 50m;
alter database add standby logfile thread 2 group 8 size
50m,group 9 size 50m,group 10 size 50m;
6、主库参数调整:
show parameter spfile;
alter system set log_archive_dest_2='service=orcldg lgwr sync
valid_for=(online_logfiles,primary_role) db_unique_name=orcldg'
sid='*';
show parameter log_arch
alter system set log_archive_config='dg_config=(orcl,orcldg)'
sid='*';
7、备库接收主库日志:
select sequence#,name, applied from v$archived_log;
可能遇到备库无法顺利接收主库日志
解决:调整节点 2 的 SYS 用户口令,或者重新配置口令文件。
8、备库开始应用日志:
alter database recover managed standby database using current
logfile disconnect from session;
select sequence#,name, applied from v$archived_log;
9、备库以 READ ONLY 方式打开:
select
dbid,name,switchover_status,db_unique_name,database_role,open_mode,current_scn
from v$database;
MOUNTED
alter database open;
报错
alter database recover managed standby database cancel;
alter database open;
select
dbid,name,switchover_status,db_unique_name,database_role,open_mode,current_scn
from v$database;
READ ONLY
alter database recover managed standby database using current
logfile disconnect from session;
select
dbid,name,switchover_status,db_unique_name,database_role,open_mode,current_scn
from v$database;
READ ONLY WITH APPLY
select sequence#,name, applied from v$archived_log;
RAC 主库配置 Active Physical Dataguard 成功
五、测试
1、测试文件同步
主库查看表空间信息:
select file_name,tablespace_name from dba_data_files;
create tablespace dg_tbs datafile size 5m;
select file_name,tablespace_name,bytes/1024/1024 M from
dba_data_files;
查看物理备库表空间信息是否同步:
select file_name,tablespace_name from dba_data_files;
主库删除表空间:
drop tablespace dg_tbs including contents and datafiles;
再次查看物理备库表空间是否同步:
select file_name,tablespace_name from dba_data_files;
2、测试数据同步
主库创建测试表:
备库查看测试表同步:
六、测试 DATAGUARD SWITCHOVER 功能
1、RAC主库、Active Dataguard 角色切换
主库修改相关参数 fal_client、fal_server:
alter system set fal_client='orcl1tns' sid='orcl1';
alter system set fal_client='orcl2tns' sid='orcl2';
alter system set fal_server='orcltns' sid='*';
show parameter fal
主库创建 standby logfile:
select * from v$standby_log;
alter database add standby logfile thread 1 group 5 size
50m,group 6 size 50m,group 7 size 50m;
alter database add standby logfile thread 2 group 8 size
50m,group 9 size 50
主库修改相关参数 standby_file_management 、 db_file_name_convert
、log_file_name_convert:
show parameter standby_file
show parameter db_file_na
show parameter log_file
alter system set standby_file_management='auto' sid='*'
scope=spfile;
alter system set
db_file_name_convert='+DATA/orcl/','+DATA/orcl/' sid='*'
scope=spfile; --先orcldg后主库orcl
alter system set
log_file_name_convert='+DATA/orcl/','+DATA/orcl/' sid='*'
scope=spfile;--先orcldg后主库orcl
停止RAC节点2:
select
dbid,name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status
from gv$database;
shutdown immediate;
RAC节点1 切换原RAC主库到备库:
alter database commit to switchover to physical standby with
session shutdown;
select
dbid,name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status
from gv$databas
READ WRITE状态
切换原物理备库到主库角色:
alter database commit to switchover to primary;
select
dbid,name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status
from gv$databas
alter database open;
将原 RAC主库2 个实例都启动到 MOUNT状态:
srvctl start database -d devdb -o mount
MOUNTED状态
原RAC主库启动redo apply:
select
dbid,name,current_scn,protection_mode,database_role,force_logging
recovery needed 执行
alter database recover managed standby database using current
logfile disconnect from session;
原 RAC主库停止redo apply,并将 RAC主库所有节点以READ ONLY打开:
alter database recover managed standby database cancel;
alter database open;
select
dbid,name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status
from gv$database;
alter database recover managed standby database using current
logfile disconnect from session;
2、单实例主库,RAC 备库角色切换
即,将新 RAC 备库切换为主库,新单实例主库切换为备库:
新主库(单实例库)状态查看:
select
dbid,name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status
from v$database;
新备库(RAC 库)状态查看:
select
dbid,name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status
from gv$database;
新备库(RAC 库)停止节点 2:
shutdown immediate;
新主库(单实例库)切换到备库:
alter database commit to switchover to physical standby with
session shutdown;
新备库(RAC 库)节点 1 切换到主库:
alter database recover managed standby database using current
logfile disconnect from session;
select
dbid,name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status
from gv$database;
alter database commit to switchover to primary;
select
dbid,name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status
from gv$database;
新备库(RAC 库)全部启动所有节点:
startup
srvctl start database -d devdb -o start
新备库(单实例库)重新启动并开始 redo apply:
alter database recover managed standby database using current
logfile disconnect from session;
select
dbid,name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status
from v$database;
至此,完成一次角色切换,即将新的备库(RAC 库)切换成主库,新的备库(单实例库)又重新切换为物理备库