Linux平台下物理DG部署

1、主库准备工作

Host IP               DB_NAME       DB_UNIQUE_NAME    Net Service Name(网络服务名)

主库192.168.65.203    ORCL            ORCL            ORCL

备库192.168.65.204    ORCL             DG             DG

保护模式:默认最大性能模式

 

注意DataGuard启动顺序:

启动顺序: 先standby ,后primary;

关闭顺序: 先primary ,后standby;

 

1.1、检查数据库是否支持Data Guard(企业版才支持),是否归档模式,Enable force logging

$ sqlplus '/as sysdba'

SQL> select * from v$option where parameter = 'Managed Standby'; 

确认主库处于归档模式     

SQL> archive log list        (先检查是否归档模式,不是则修改)

     startup mount

     alter database archivelog;

     alter database open;

 将primary数据库置为FORCE LOGGING模式

SQL> alter database force logging;  (强制产生日志)

 

1.2、如果主库没有密码文件则建立密码文件,从而可以OS验证的方式登陆

$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracledba entries=5

 

1.3、配置standby redolog(最佳性能模式可以忽略,如果将来变成备库且要转为其它两种模式则要建立)

SQL> alter database add standby logfile

    group 4 ('/oracle/oradata/ORCL/redo04.log') size 50m,

    group 5 ('/oracle/oradata/ORCL/redo05.log ') size 50m,

    group 6 ('/oracle/oradata/ORCL/redo06.log ') size 50m,

    group 7 ('/oracle/oradata/ORCL/redo07.log ') size 50m;

standby redolog的组数参考公式:(online redolog组数 + 1) * 数据库线程数;单机线程数为1,RAC一般为2。

standby redolog的组成员数和大小也尽量和online redolog一样。

 

1.4、设置主库初始化参数

$ sqlplus '/as sysdba'

SQL> create pfile='/home/oracle/pfile.ora' from spfile;  (备份参数文件)

SQL> alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCL,DG)' scope=spfile;        (启动db接受或发送redo data,包括所有库的db_unique_name)

SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=/oracle/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL' scope=spfile;   (主库归档目的地)

SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=DG LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DG' scope=spfile;    (当该库充当主库角色时,设置物理备库redo data的传输目的地)

SQL> alter system set LOG_ARCHIVE_MAX_PROCESSES=5 scope=spfile;  (最大ARCn进程数)可省略

SQL> alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=spfile;    (允许redo传输服务传输数据到目的地,默认是enable)

SQL> alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=spfile;    (同上)

SQL> alter system set REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE scope=spfile;    (exclusive or shared,所有库sys密码要一致,默认是exclusive可省略)

--以下是主库切换为备库,充当备库角色时的一些参数设置,如果不打算做数据库切换就不用设置了

SQL> alter system set FAL_SERVER=DG scope=spfile;        (配置网络服务名,假如转换为备库角色时,从这里获取丢失的归档文件)

SQL> alter system set FAL_CLIENT=ORCL scope=spfile;        (配置网络服务名,fal_server拷贝丢失的归档文件到这里)

SQL> alter system set DB_FILE_NAME_CONVERT='PHYSTDBY','WENDING' scope=spfile;    (前为切换后的主库路径,后为切换后的备库路径,如果主备库目录结构完全一样,则无需设定)

SQL> alter system set LOG_FILE_NAME_CONVERT='PHYSTDBY','WENDING' scope=spfile;        (同上,这两个名字转换参数是主备库的路径映射关系,可能会是路径全名,看情况而定)

SQL> alter system set STANDBY_FILE_MANAGEMENT=auto scope=spfile;        (auto后当主库的datafiles增删时备库也同样自动操作,且会把日志传送到备库standby_archive_dest参数指定的目录下,确保该目录存在,如果你的存储采用文件系统没有问题,但是如果采用了裸设备,你就必须将该参数设置为manual

SQL> alter system set STANDBY_ARCHIVE_DEST='LOCATION=/oracle/archivelog' scope=spfile;    (一般和LOG_ARCHIVE_DEST_1的位置一样,如果备库采用ARCH传输方式,那么主库会把归档日志传到该目录下)--在11g环境中添加此参数会报错,10g还没测试

有了以上参数设置,则无论该库充当主库角色还是备库角色都无需再修改了。

然后重启数据库:

SQL> shutdown immediate

SQL> startup;

 

1.5、备份主库数据文件

关闭应用服务器,停止监听:

$ lsnrctl stop

RMA方式备份:

$ rman target /

RMAN> run{

Allocate channel a1 type disk;

Allocate channel a2 type disk;

backup database format '/oracle/backup/backup_%T_%s_%p.bak';

sql "alter system archive log current";

backup archivelog all format='/oracle/backup/arch_%T_%s_%p.bak';

release channel a1;

release channel a2;

}

用户管理方式:

查询当前表空间和对应数据文件的信息

SQL> SET LINE 150 PAGES 1000 

SQL> COL FILE_NAME FOR A50 

SQL> SELECT FILE_NAME,TABLESPACE_NAME FROM DBA_DATA_FILES ORDER BY 2; 

标记指定表空间进入备份状态。

SQL>ALTER TABLESPACE tablespace_name BEGIN BACKUP

通过操作系统命令复制锁定表空间的数据文件。

!scp /oracle/oradata/ORCL/   oracle@192.168.65.204:/oracle/oradata/ORCL/

通过ALTER TABLESPACE END BACKUP命令标记指定表空间结束备份。

SQL>ALTER TABLESPACE tablespace_name END BACKUP;

重复这一过程,直到所有表空间的数据文件均被成功复制到目标端服务器。

临时文件不需要备份。

1.6、在主库上建立备库控制文件(控制文件通常需要有多份,手工将文件复制几份)

$ sqlplus '/as sysdba'

SQL> alter database create standby controlfile as '/oracle/standby/ORCL01.ctl';

$ cd /oracle/standby

$ cp ORCL01.ctl ORCL02.ctl

 

1.7、为备库准备init参数

$ sqlplus '/as sysdba'

SQL> create pfile = '/oracle/10.2/db_1/dbs/initDG.ora' from spfile;

$ cd /oracle/10.2/db_1/dbs

$ vi initDG.ora   

注意主备库不同角色的属性配置,注意文件路径等,注意db_name要和主库一致,主要是以下参数:

----

control_files='/oracle/oradata/DG/ORCL01.ctl','/oracle/oradata/DG/ORCL02.ctl '

db_unique_name=DG

log_archive_config='DG_CONFIG=(DG,ORCL)'

log_archive_dest_1='LOCATION=/oracle/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DG'

log_archive_dest_2='SERVICE=ORCL LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL'

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

fal_client=DG

fal_server=ORCL

db_file_name_convert=/oracle/oradata/ORCL,/oracle/oradata/ORCL

log_file_name_convert=/oracle/oradata/ORCL,/oracle/oradata/ORCL

STANDBY_FILE_MANAGEMENT=AUTO

另外,如果备库将来要打开成只读模式,需要确认audit_trail参数不是含db,应该设成os或none。(此句话有待于验证)

 

1.8、拷贝上面生成的文件backup_%T.bakORCL01/02.ctlinitDG.ora到备库所在主机

注意rman备份的文件在主备库主机上目录要一致。

$ scp backup*.bak 192.168.65.204:/oracle/backup/

$ scp initDG.ora 192.168.65.204:$ORACLE_HOME/dbs/

$ scp ORCL*.ctl 192.168.65.204:/oracle/oradata/DG/

 

1.9、建立主库监听和主备库的网络服务名(必须是dedicated的),并启动监听

$ netca    (是图形界面,或者手工从别的库把listener.ora和tnsnames.ora拷过来修改也行)

$ lsnrctl start

$ tnsping ORCL

$ tnsping DG    (此时tnsping还不通物理备库)

tnsping对方的时候,有可能linux防火墙限制了,会提示TNS-12560: TNS: 协议适配器错误。

临时禁用防火墙方法:

# service iptables stop

永久禁用防火墙方法:

# chkconfig --list iptables

# chkconfig --level 345 iptables off

 

2、建立备库

2.1、设置环境变量并建立备库一些必需目录

$ export ORACLE_BASE=/u01/app/oracle

$ export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

$ export ORACLE_SID=PHYSTDBY

$ mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump

--在11g环境下如下目录可以不建

$ mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/bdump

$ mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/cdump

$ mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/udump

--以下目录要看哪些地方可能会存放数据库文件,注意不能少建

$ mkdir -p /orahome/oradata/$ORACLE_SID

$ mkdir -p /u01/app/oracle/oradata/$ORACLE_SID

$ mkdir -p /orahome/arch1/$ORACLE_SID

 

2.2、在备库主机上生成密码文件,且sys密码和主库得一致

$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracledba entries=5

--此时如果还是有问题,可以从主库上把密码文件拷贝过来

2.3、在备库上建立监听,和主备库网络服务名(必须是dedicated的),并启动监听

$ netca    (是图形界面,或者手工从别的库把listener.ora和tnsnames.ora拷过来修改也行)

$ lsnrctl start

$ tnsping ORCL

$ tnsping DG

 

2.4、在备库上建立spfile

$ sqlplus '/as sysdba'

SQL> create spfile from pfile;

如果pfile没有放到$ORACLE_HOME/dbs/下,而是放在别的位置:

SQL> create spfile from pfile='/oracle/10.2/db_1/dbs/initDG.ora';

 

2.5、启动物理备库

SQL> startup nomount

SQL> alter database mount standby database;

 

2.6、备库做数据恢复

RMAN恢复:

$ rman target /       (要求主备库rman备份文件的存放路径和文件名一致)

RMAN> restore database;

##RMAN> restore archivelog all;

介质恢复后,rman 自动将standby 数据库打开到mount 状态。

用户管理方式恢复:

修改并保存参数文件后,以SYSDBA身份连接到Standby数据库(此时为nomount状态),

通过修改后的PFILE创建SPFILE:

SQL>create spfile from pfile=/home/oracle/…’;

直接启动物理standby数据库到mount状态

SQL>startup mount;

2.7、配置standby redolog(最佳性能模式可以忽略,如果要转为其它两种模式则要建立)

SQL> alter database add standby logfile

    group 4 ('/oracle/oradata/ORCL/redo04.log') size 50m,

    group 5 ('/oracle/oradata/ORCL/redo05.log ') size 50m,

    group 6 ('/oracle/oradata/ORCL/redo06.log ') size 50m,

    group 7 ('/oracle/oradata/ORCL/redo07.log ') size 50m;

standby redolog的组数参考公式:(online redolog组数 + 1) * 数据库线程数;单机线程数为1,RAC一般为2。

standby redolog的组成员数和大小也尽量和online redolog一样。

 

2.8、在备库上,启动redo apply

SQL> alter database recover managed standby database disconnect from session;

到此物理备库创建完毕!

 

3、主备库各参数文件内容

 

3.1、主备库listener.ora一样,如果有不一样也是host不一样

----------------------------------------

SID_LIST_LISTENER =

(SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

      (PROGRAM = extproc)

    )

)

 

LISTENER =

(DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.65.203)(PORT = 1521))

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

    )

)

----------------------------------------

 

3.2、主备库tnsnames.ora一样,如果有不一样也是hostport不一样

----------------------------------------

ORCL =

(DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.65.203)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = ORCL)

    )

)

 

DG =

(DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.65.204)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = DG)

    )

)

 

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

    )

    (CONNECT_DATA =

      (SID = PLSExtProc)

      (PRESENTATION = RO)

    )

)

----------------------------------------

 

 

3.3init$ORACLE_SID.ora

 

主库initWENDING.ora

----------------------------------------

WENDING.__db_cache_size=226492416

WENDING.__java_pool_size=4194304

WENDING.__large_pool_size=4194304

WENDING.__shared_pool_size=96468992

WENDING.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/WENDING/adump'

*.audit_sys_operations=TRUE

*.audit_trail='db','extended'

*.background_dump_dest='/u01/app/oracle/admin/WENDING/bdump'

*.control_files='/orahome/oradata/control1.ctl','/orahome/oradata/control2.ctl','/orahome/oradata/control3.ctl'

*.core_dump_dest='/u01/app/oracle/admin/WENDING/cdump'

*.db_block_size=8192

*.db_domain='LK'

*.db_file_name_convert='PHYSTDBY','WENDING'

*.db_name='ORCLDB'

*.db_unique_name='WENDING'

*.fal_client='DB_WENDING'

*.fal_server='DB_PHYSTDBY'

*.job_queue_processes=10

*.log_archive_config='DG_CONFIG=(WENDING,PHYSTDBY)'

*.log_archive_dest_1='LOCATION=/orahome/arch1/WENDING VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=WENDING'

*.log_archive_dest_2='SERVICE=db_phystdby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PHYSTDBY'

*.log_archive_max_processes=5

*.log_file_name_convert='PHYSTDBY','WENDING'

*.open_cursors=1500

*.processes=500

*.sga_max_size=320M

*.sga_target=320M

*.standby_archive_dest='LOCATION=/orahome/arch1/WENDING'

*.standby_file_management='AUTO'

*.undo_management='AUTO'

*.undo_retention=10800

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u01/app/oracle/admin/WENDING/udump'

----------------------------------------

 

备库initPHYSTDBY.ora

----------------------------------------

PHYSTDBY.__db_cache_size=226492416

PHYSTDBY.__java_pool_size=4194304

PHYSTDBY.__large_pool_size=4194304

PHYSTDBY.__shared_pool_size=96468992

PHYSTDBY.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/PHYSTDBY/adump'

*.audit_sys_operations=TRUE

*.audit_trail='os'

*.background_dump_dest='/u01/app/oracle/admin/PHYSTDBY/bdump'

*.control_files='/orahome/oradata/stdby_control01.ctl','/orahome/oradata/stdby_control02.ctl','/orahome/oradata/stdby_control03.ctl'

*.core_dump_dest='/u01/app/oracle/admin/PHYSTDBY/cdump'

*.db_block_size=8192

*.db_domain='LK'

*.db_file_name_convert='WENDING','PHYSTDBY'

*.db_name='ORCLDB'

*.db_unique_name='PHYSTDBY'

*.fal_client='DB_PHYSTDBY'

*.fal_server='DB_WENDING'

*.job_queue_processes=10

*.log_archive_config='DG_CONFIG=(PHYSTDBY,WENDING)'

*.log_archive_dest_1='LOCATION=/orahome/arch1/PHYSTDBY VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PHYSTDBY'

*.log_archive_dest_2='SERVICE=db_wending LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=WENDING'

*.log_archive_max_processes=5

*.log_file_name_convert='WENDING','PHYSTDBY'

*.open_cursors=1500

*.processes=500

*.sga_max_size=320M

*.sga_target=320M

*.standby_archive_dest='LOCATION=/orahome/arch1/PHYSTDBY'

*.standby_file_management='AUTO'

*.undo_management='AUTO'

*.undo_retention=10800

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u01/app/oracle/admin/PHYSTDBY/udump'

----------------------------------------

 

4、主库归档测试

主库归档前:

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /orahome/arch1/WENDING

Oldest online log sequence     6

Next log sequence to archive   8

Current log sequence           8

 

此时备库:

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /orahome/arch1/PHYSTDBY

Oldest online log sequence     0

Next log sequence to archive   0

Current log sequence           8

 

主库归档后:

SQL> ALTER SYSTEM SWITCH LOGFILE;    --对单实例数据库或RAC中的当前实例执行日志切换

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;    --对数据库中的所有实例执行日志切换

SQL> archive log list;               

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /orahome/arch1/WENDING

Oldest online log sequence     7

Next log sequence to archive   9

Current log sequence           9

 

此时备库:

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /orahome/arch1/PHYSTDBY

Oldest online log sequence     0

Next log sequence to archive   0

Current log sequence           9

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值