前言
对于体量比较大的数据库,搭dg如果是用duplicate的方式,可能会占用大量带宽,影响到数据库原本的业务。至于如何对其进行限速,笔者还不清楚。所以学习着使用rman备份恢复的方式搭建了dg备库。
实施步骤
1、 前期规划(备库提前安装好数据库环境)
|
数据库版本 |
主机名 |
SID |
Unique_name |
|
11.2.0.1.0 |
Primary |
orcl |
orcl |
|
11.2.0.1.0 |
Standby |
orcl |
orcldg |
2、检查归档模式是否开启(主库)
archive log list
3、修改hosts文件(主备)
# vi /etc/hosts
增加
#Primary
192.168.220.133 primary
#Standby
192.168.220.132 standby
4、开启force logging(主库)
alter database force logging
5、修改tnsname.ora文件(主备,备库没有得新建个)
$ vi $ORACLE_HOME/network/admin/tnsnames.ora
增加
primary =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = primary)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
standby =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLDG)
)
)
6、修改监听文件(主备。备库没有得新建)
主库增加
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
备库增加
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcldg)
(ORACLE_HOME = /u01/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
7、修改pfile文件
主库
create pfile from spfile;
vi pfile
orcl.__db_cache_size=192937984
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/u01/oracle'#ORACLE_BASE
set from environment
orcl.__pga_aggregate_target=301989888
orcl.__sga_target=452984832
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=243269632
orcl.__streams_pool_size=0
*.aq_tm_processes=0
*.audit_file_dest='/u01/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/oracle/oradata/orcl/control01.ctl','/u01/oracle/flash_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_create_file_dest='/u01/oracle/omf/'
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/u01/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.db_unique_name='orcl'
*.diagnostic_dest='/u01/oracle'
*.dispatchers='(PROTOCOL=TCP)
(SERVICE=orclXDB)'
*.event=''
*.fal_client='primary'
*.fal_server='standby'
*.filesystemio_options='SETALL'
*.job_queue_processes=0
*.log_archive_config='dg_config=(orcl,orcldg)'
*.log_archive_dest_1='location=/u01/oracle/recover
valid_for=(all_logfiles,all_roles) db_unique_name=orcl'
*.log_archive_dest_10=''
*.log_archive_dest_2='service=standby
valid_for=(online_logfiles,primary_role)
db_unique_name=orcldg'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.memory_target=751828992
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='auto'
*.undo_tablespace='UNDOTBS1
修改完成后
create spfile from pfile
startup
将主库pfile传输到备库
vi pfile
rcl.__db_cache_size=192937984
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/u01/oracle'#ORACLE_BASE
set from environment
orcl.__pga_aggregate_target=301989888
orcl.__sga_target=452984832
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=243269632
orcl.__streams_pool_size=0
*.aq_tm_processes=0
*.audit_file_dest='/u01/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/oracle/oradata/orcl/control01.ctl','/u01/oracle/flash_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_create_file_dest='/u01/oracle/omf/'
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/u01/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.db_unique_name='orcldg'
*.diagnostic_dest='/u01/oracle'
*.dispatchers='(PROTOCOL=TCP)
(SERVICE=orclXDB)'
*.event=''
*.fal_client='standby'
*.fal_server='primary'
*.filesystemio_options='SETALL'
*.job_queue_processes=0
*.log_archive_config='dg_config=(orcldg,orcl)'
*.log_archive_dest_1='location=/u01/oracle/recover
valid_for=(all_logfiles,all_roles) db_unique_name=orcldg'
*.log_archive_dest_10=''
*.log_archive_dest_2='service=primary
valid_for=(online_logfiles,primary_role)
db_unique_name=orcl'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.memory_target=751828992
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='auto'
*.undo_tablespace='UNDOTBS1'
db_file_name_convert='/u01/oracle/oradata/orcl','/u01/oracle/oradata/orcl'
log_file_name_convert='
/u01/oracle/oradata/orcl',' /u01/oracle/oradata/orcl'
注:这里的convert两个参数要加,及时主备库的目录一致也得加
8、备库创建目录,对照pfile,不然启动会报错
su – oracle
mkdir -p /u01/oracle/admin/orcl/adump
mkdir -p /u01/oracle/omf/
mkdir /u01/oracle/oradata/orcl/
mkdir -p
/u01/oracle/flash_recovery_area/orcl/
mkdir -p /u01/oracle/recover
9、主库传输密码文件到备库
scp oracle@192.168.220.133:
10、备份主库
rman target /
backup database format
'/home/oracle/backup/backup_orcl_%T_%U.bak';
backup current controlfile for standby format
'/home/oracle/backup/control_std.ctl';
备份集传输到备库对应位置
11、还原备库
create spfile from pfile
startup nomount
rman target /
restore controlfile from
'/home/oracle/backup/control_std.ctl';
alter database mount;
restore database;
12主备库创建standby logfile(主备)
alter database add standby logfile
'/u01/oracle/oradata/orcl/redo04.log' size 60m;
alter database add standby logfile
'/u01/oracle/oradata/orcl/redo05.log' size 60m;
alter database add standby logfile
'/u01/oracle/oradata/orcl/redo06.log' size 60m;
alter database add standby logfile
'/u01/oracle/oradata/orcl/redo07.log' size 60m;
13 备库创建standby控制文件,对原有的文件进行替换
如果不做这一步,打开数据库会报错,提示不是standby controlfile
alter database create standby controlfile
as '/u01/oracle/standby.ctl' ;
替换完成后,重新启动到mount状态
14 测试监听是否通畅
sqlplus sys/oracle@primary as sysdba
sqlplus sys/oracle@standby as sysdba
15备库执行应用日志
alter database recover managed standby
database disconnect from session;
出现此告错
Managed Standby Recovery not using Real
Time Apply
Signalling error 1152 for datafile 1!
Parallel Media Recovery started with 2
slaves
Waiting for all non-current ORLs to be
archived...
All non-current ORLs have been archived.
Media Recovery Waiting for thread 1
sequence 165
Completed: alter database recover managed
standby database disconnect from session
取消应用
alter database recover managed standby
database cancel;
打开数据库
继续告错
alter database open;
*
ERROR at line 1:
ORA-10458: standby database requires
recovery
ORA-01152: file 1 was not restored from a
sufficiently old backup
ORA-01110: data file 1:
'/u01/oracle/oradata/orcl/system01.dbf'
再次打开数据库 成功(什么鬼原理,我也搞不清)
开启实施应用,搭建完成
alter database recover managed standby
database using current logfile disconnect from session;




