您的位置:首页 > 运维架构

安装配置DG环境及DG相关运维命令

2016-02-17 16:00 543 查看
前提:选用《Oracle配置Dataguard》文档中的章节5,配置oracle11g的物理Active Dataguard!

################################################################

首先确定原生产库是否安装Dataguard组件:

SQL> select * from v$option where parameter='Oracle Data Guard';

PARAMETER

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

VALUE

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

Oracle Data Guard

TRUE

################################################################

一、安装前准备工作

1、修改primary和standby主机名,内容如下:

# vi /etc/hosts   //并添加内网IP地址对应的hostname,如下

127.0.0.1           localhost

::1                   localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.8.151 dg-primary

192.168.8.152 dg-standby

2、primary和standby服务器均安装ssh服务:

# yum install -y openssh-clients

3、修改standby数据库的/etc/sysconfig/iptables文件,开通1521端口:

# vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT

# service iptables restart

二、standby服务器上安装oracle环境,只安装软件,不安装数据库:

1、安装yum:

# ln -sf /media/RHEL_6.4\ x86_64\ Disc\ 1/ rhel

# vi /etc/yum.repos.d/rhel-source.repo

[rhel-source]

name=Red Hat Enterprise Linux $releasever - $basearch - Source

baseurl=file:///root/rhel/

enabled=1

gpgcheck=0

gpgkey=file:///root/rhel/

2、安装oracle必须的包:(将pdksh-5.2.14-36.el5.x86_64.rpm包上传至/root/目录下)

# yum -y install gcc-c++*

# yum -y install libaio-devel*

# yum -y install elfutils-libelf-devel*

# cd /root/rhel/Packages

# rpm -ivh compat-libstdc++-33-3.2.3-69.el6.x86_64.rpm

# cd 

# rpm -ivh pdksh*

3、修改内核参数

# vi /etc/sysctl.conf 在文件最后增加:

推荐值:

fs.aio-max-nr = 1048576

fs.file-max = 6553600

kernel.shmall = 8388608

kernel.shmmax = 9663676416

kernel.shmmni = 4096

kernel.sem = 2010 285420 100 142

net.ipv4.ip_local_port_range = 1024 65000

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048586

(参考值:

fs.aio-max-nr = 1048576

fs.file-max = 6553600

kernel.shmall = 2097152

kernel.shmmax = 2147483648

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 1024 65000

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048586

)

参数详解如下:

fs.aio-max-nr = 1048576         //同时可以拥有的的异步IO请求数目。1048576 即 1024*1024 也就是 1024K 个。

fs.file-max = 6553600           //系统允许打开的文件数。

kernel.shmall = 2097152         //设置共享内存总页数。这个值太小有可能导致数据库启动报错。

                                  计算公式为:内存(G)*1024*1024*1024/4096,4096为getconf PAGE_SIZE得到分页大小。

kernel.shmmax = 2147483648      //Linux进程可以分配的单独共享内存段的最大值。一般设置为内存总大小的一半。

                                  这个值的设置应该大于SGA_MAX_TARGET或MEMORY_MAX_TARGET的值,

                                  因此对于安装Oracle数据库的系统,shmmax的值应该比内存的二分之一大一些。

kernel.shmmni = 4096            //设置系统级最大共享内存段数量。推荐最小值为4096。

kernel.sem = 250 32000 100 128  //从左到右分别为SEMMSL、SEMMNS、SEMOPM和SEMMNI。

                                  1)SEMMSL:设置每个信号灯组中信号灯最大数量,推荐的最小值是250。

                                             对于系统中存在大量并发连接的系统,推荐将这个值设置为PROCESSES初始化参数加10。

                                            

                                  2)SEMMNS:设置系统中信号灯的最大数量。操作系统在分配信号灯时不会超过LEAST(SEMMNS,SEMMSL*SEMMNI)。

                                             事实上,如果SEMMNS的值超过了SEMMSL*SEMMNI是非法的,因此推荐SEMMNS的值就设置为SEMMSL*SEMMNI。

                                             Oracle推荐SEMMNS的设置不小于32000,假如数据库的PROCESSES参数设置为600,则SEMMNS的设置应为:

                                             SQL> select (600+10)*142 from dual;

                                                 (600+10)*142

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

                                                  86620

                                  3)SEMOPM:设置每次系统调用可以同时执行的最大信号灯操作的数量。

                                             由于一个信号灯组最多拥有SEMMSL个信号灯,因此有推荐将SEMOPM设置为SEMMSL的值。

                                             Oracle验证的10.2和11.1的SEMOPM的配置为100。

                                  4)SEMMNI:设置系统中信号灯组的最大数量。Oracle10g和11g的推荐值为142。

net.ipv4.ip_local_port_range = 1024 65000    //ip_local_port_range表示端口的范围,为指定的内容 

net.core.rmem_default = 262144               //表示接收套接字缓冲区大小的缺省值(以字节为单位)。

net.core.rmem_max = 4194304                  //表示接收套接字缓冲区大小的最大值(以字节为单位)。

net.core.wmem_default = 262144               //表示发送套接字缓冲区大小的缺省值(以字节为单位)。

net.core.wmem_max = 1048586                  //表示发送套接字缓冲区大小的最大值(以字节为单位。

最后输入下面的命令,让内核参数生效:

# /sbin/sysctl -p

sysctl -p 报错解决方法如下:

modprobe bridge

lsmod | grep bridge

sysctl -p

4、修改用户的限制文件

# vi /etc/security/limits.conf 在文件后增加

oracle           soft    nproc           2047

oracle           hard    nproc           16384

oracle           soft    nofile          1024

oracle           hard    nofile          65536

oracle           soft    stack           10240

# vi /etc/pam.d/login 文件,(64位系统时,千万别写成/lib/security/pam_limits.so,否则导致无法登录)增加如下:

session  required  /lib64/security/pam_limits.so

session  required  pam_limits.so
4000

# vi /etc/profile (在unset -f pathmunge下一行)增加如下内容:

if [ $USER = "oracle" ]; then

 if [ $SHELL = "/bin/ksh" ]; then

  ulimit -p 16384

  ulimit -n 65536

 else

  ulimit -u 16384 -n 65536

 fi

fi

5、建立用户组及用户

# groupadd oinstall

# groupadd dba

# useradd -g oinstall -G dba -d /home/oracle oracle

# passwd oracle          //设置oracle密码

6、创建目录及修改权限:

# mkdir -p /home/oracle/app

# mkdir -p /home/oracle/app/oracle

# mkdir -p /home/oracle/app/oracle/product

# mkdir -p /home/oracle/app/oracle/product/11.2.0            //数据库系统安装目录

# mkdir -p /home/oracle/app/oracle/product/11.2.0/dbhome_1

# mkdir -p /home/oracle/backup                         //数据备份目录

# mkdir -p /home/oracle/oraInventory                    //清单目录

# chown -R oracle:oinstall /home/oracle/app

# chown -R oracle:oinstall /home/oracle/backup

# chown -R oracle:oinstall /home/oracle/oraInventory

# chmod -R 775 /home/oracle/app

7、设置并刷新环境变量:

# su - oracle

$ vi /home/oracle/.bash_profile

umask 022

export ORACLE_BASE=/home/oracle/app

export ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0/dbhome_1

export ORACLE_SID=xtwl

export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib

$ source ~/.bash_profile

8、解压安装包:

# yum install -y unzip

# su - oracle

$ unzip linux.x64_11gR2_database_1of2.zip

$ unzip linux.x64_11gR2_database_2of2.zip

$ cp -R /home/oracle/database/response /home/oracle         //复制一份模板

$ cd /home/oracle/response

$ vi db_install.rsp                                      //修改安装应答文件

9、修改db_install.rsp文件如下:

ORACLE_HOSTNAME=dg-standby    //通过hostname命令获取

UNIX_GROUP_NAME=oinstall

INVENTORY_LOCATION=/home/oracle/oraInventory

SELECTED_LANGUAGES=en,zh_CN

ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1

ORACLE_BASE=/home/oracle/app

oracle.install.db.InstallEdition=EE

oracle.install.db.isCustomInstall=true

oracle.install.db.customComponents=oracle.server:11.2.0.1.0,oracle.sysman.ccr:10.2.7.0.0,oracle.xdk:11.2.0.1.0,oracle.rdbms.oci:11.2.0.1.0,oracle.network:11.2.0.1.0,oracle.network.listener:11.2.0.1.0,oracle.rdbms:11.2.0.1.0,oracle.options:11.2.0.1.0,oracle.rdbms.partitioning:11.2.0.1.0,oracle.oraolap:11.2.0.1.0,oracle.rdbms.dm:11.2.0.1.0,oracle.rdbms.dv:11.2.0.1.0,orcle.rdbms.lbac:11.2.0.1.0,oracle.rdbms.rat:11.2.0.1.0

oracle.install.db.DBA_GROUP=dba

oracle.install.db.OPER_GROUP=oinstall

oracle.install.db.config.starterdb.type=GENERAL_PURPOSE

oracle.install.db.config.starterdb.globalDBName=xtwl

oracle.install.db.config.starterdb.SID=xtwl

oracle.install.db.config.starterdb.characterSet=AL32UTF8

oracle.install.db.config.starterdb.memoryOption=true

oracle.install.db.config.starterdb.memoryLimit=5120

oracle.install.db.config.starterdb.password.ALL=dbadmin1122  //注意修改

oracle.install.db.config.starterdb.control=DB_CONTROL

SECURITY_UPDATES_VIA_MYORACLESUPPORT=false

DECLINE_SECURITY_UPDATES=true   //一定要是true

10、安装oracle软件:

$cd /home/oracle/database

$./runInstaller -silent -responseFile /home/oracle/response/db_install.rsp     //了解安装进度 tail -f /home/oracle/oraInventory/logs/installActions*log

//当安装界面出现如下信息的时候

The following configuration scripts need to be executed as the "root" user.

 #!/bin/sh

 #Root scripts to run

/home/oracle/oraInventory/orainstRoot.sh

/home/oracle/app/oracle/product/11.2.0/dbhome_1/root.sh

To execute the configuration scripts:

 1. Open a terminal window

 2. Log in as "root"

 3. Run the scripts

 4. Return to this window and hit "Enter" key to continue

Successfully Setup Software.

//在新打开的root登录的窗口中执行下面的脚本

#/home/oracle/oraInventory/orainstRoot.sh

#/home/oracle/app/oracle/product/11.2.0/dbhome_1/root.sh

//执行完上面的脚本后回到安装界面按下Enter键以继续

11、安装监听:

$cd /home/oracle/response

$netca /silent /responsefile /home/oracle/response/netca.rsp

成功运行后,在/home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin目录下生成sqlnet.ora和listener.ora两个文件。

通过 netstat -tlnp 命令,看到

tcp        0      0 0.0.0.0:1521                0.0.0.0:*                   LISTEN      22494/tnslsnr

说明监听器已经在1521端口上开始工作了

三、primary数据库上操作:

1、修改生产库之前未优化的参数:

(1)手动备份spfile文件:

$ cp $ORACLE_HOME/dbs/spfilextwl.ora $ORACLE_HOME/dbs/spfilextwl_bak.ora

(2)修改最大连接数

查询当前最大连接数

sql> show parameter processes;

sql> alter system set processes=2000 scope = spfile;

(3)禁止回收站功能

SQL> show parameter recyclebin;

SQL> alter system set recyclebin=off scope=spfile;

(4)关闭审计功能:

SQL> show parameter audit;

SQL> alter system set audit_trail=NONE scope=spfile;

(5)修改用户密码用不过期

SQL> select * from dba_profiles s where s.profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';

PROFILE          RESOURCE_NAME   RESOURCE

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

LIMIT

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

DEFAULT          PASSWORD_LIFE_TIME  PASSWORD

180

SQL> alter profile default limit password_life_time unlimited;

Profile altered.

SQL> select * from dba_profiles s where s.profile='DEFAULT' and resource_name='FAILED_LOGIN_ATTEMPTS';

PROFILE          RESOURCE_NAME   RESOURCE

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

LIMIT

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

DEFAULT          FAILED_LOGIN_ATTEMPTS  PASSWORD

10

SQL> alter profile default limit failed_login_attempts unlimited;

Profile altered.

(6)设置控制文件有效时间!

SQL> alter system set control_file_record_keep_time=45 scope=spfile;

System altered.

2、设置数据库为自动内存管理模式:

(1)修改数据库为自动内存管理模式:

SQL> alter system set memory_target=10240M scope=spfile;        //物理内存的60%左右。

System altered.

SQL> alter system set memory_max_target=10240M scope=spfile;    //物理内存的60%左右。

System altered.

SQL> alter system set sga_target=0 scope=spfile;

System altered.

SQL> alter system set sga_max_size=7168M scope=spfile;          //实例内存的70%左右,即memory_max_target*70%,也即物理内存*60%*70%。

System altered.

SQL> alter system set pga_aggregate_target=0 scope=spfile;

System altered.

SQL> alter system set pre_page_sga=FALSE scope=spfile;

System altered.

(2)重启数据库:

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup;

ORACLE instance started.

Total System Global Area 2254802944 bytes

Fixed Size      2215344 bytes

Variable Size   1073742416 bytes

Database Buffers  1174405120 bytes

Redo Buffers      4440064 bytes

Database mounted.

Database opened.

(

如果/dev/shm大小设置不足,重启会出现以下报错:

SQL> startup;

ORA-00845: MEMORY_TARGET not supported on this system

解决方式如下:

(1)查看并修改/dev/shm的大小:

# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3              26G   13G   12G  51% /

tmpfs                 1.9G   76K  1.9G   1% /dev/shm

/dev/sda1             194M   32M  152M  18% /boot

/dev/sr0              3.5G  3.5G     0 100% /media/RHEL_6.4 x86_64 Disc 1

# vi /etc/fstab

tmpfs                   /dev/shm                tmpfs   defaults,size=3072M        0 0

(2)重新挂载/dev/shm:

# mount -o remount /dev/shm

# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3              26G   13G   12G  51% /

tmpfs                 3.0G   76K  3.0G   1% /dev/shm

/dev/sda1             194M   32M  152M  18% /boot

/dev/sr0              3.5G  3.5G     0 100% /media/RHEL_6.4 x86_64 Disc 1

)

(3)查看各个内存参数设置:

SQL>  show parameter sga;

NAME         TYPE  VALUE

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

lock_sga        boolean  FALSE

pre_page_sga        boolean  FALSE

sga_max_size        big integer 7G

sga_target        big integer 0

SQL> show parameter pga;

NAME         TYPE  VALUE

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

pga_aggregate_target       big integer 0

SQL> show parameter memory;

NAME         TYPE  VALUE

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

hi_shared_memory_address      integer  0

memory_max_target       big integer 10G

memory_target        big integer 10G

shared_memory_address       integer  0

 

3、修改redo log组以及大小:

(1)创建redo日志存放目录:

$ mkdir -p /home/oracle/app/oradata/xtwllog/

$ chmod 750 /home/oracle/app/oradata/xtwllog/

(2)查询日志信息:

SQL> select group#,bytes/1024/1024,status from v$log;

    GROUP# BYTES/1024/1024 STATUS

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

     1        50 ACTIVE

     2        50 CURRENT

     3        50 ACTIVE

(3)查询日志目录:

SQL> select * from v$logfile order by group#;

    GROUP# STATUS  TYPE    MEMBER                                         IS_

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

     1       ONLINE  /home/oracle/app/oradata/xtwl/redo01.log                         NO

     2       ONLINE  /home/oracle/app/oradata/xtwl/redo02.log                         NO

     3       ONLINE  /home/oracle/app/oradata/xtwl/redo03.log                         NO

(4)新增两组日志组,每组500M:

SQL> alter database add logfile group 4 '/home/oracle/app/oradata/xtwllog/redo04.log' size 500M;

Database altered.

SQL> alter database add logfile group 5 '/home/oracle/app/oradata/xtwllog/redo05.log' size 500M;

Database altered.

(5)查询4、5两组日志是否成功添加:

SQL> select group#,bytes/1024/1024,status from v$log;

    GROUP# BYTES/1024/1024 STATUS

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

     1        50 INACTIVE

     2        50 CURRENT

     3        50 INACTIVE

     4           500 UNUSED

     5           500 UNUSED

(6)删除日志组1:

SQL> alter database drop logfile group 1;

Database altered.

(7)删除日志组2报错:

SQL> alter database drop logfile group 2;

alter database drop logfile group 2

*

ERROR at line 1:

ORA-01623: log 2 is current log for instance xtwl (thread 1) - cannot drop

ORA-00312: online log 2 thread 1: '/home/oracle/app/oradata/xtwl/redo02.log'

(8)需要手动切换日志多次,使新建的日志组能够应用:

SQL> alter system switch logfile;

System altered.

SQL> select group#,bytes/1024/1024,status from v$log;

    GROUP# BYTES/1024/1024 STATUS

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

     2        50 ACTIVE

     3        50 INACTIVE

     4           500 CURRENT

     5           500 UNUSED

SQL> alter system switch logfile;

System altered.

SQL> select group#,bytes/1024/1024,status from v$log;

    GROUP# BYTES/1024/1024 STATUS

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

     2        50 ACTIVE

     3        50 INACTIVE

     4           500 ACTIVE

     5           500 CURRENT

(9)使用alter system checkpoint将Active的日志状态置为INACTIVE:

SQL> alter system checkpoint;

System altered.

SQL> select group#,bytes/1024/1024,status from v$log;

    GROUP# BYTES/1024/1024 STATUS

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

     2        50 INACTIVE

     3        50 INACTIVE

     4           500 INACTIVE

     5           500 CURRENT

(10)删除原2,3日志组:

SQL> alter database drop logfile group 2;

Database altered.

SQL> alter database drop logfile group 3;

Database altered.

(11)新增1,2,3日志组,每组500M:

SQL> alter database add logfile group 1 '/home/oracle/app/oradata/xtwllog/redo01.log' size 500M;

Database altered.

SQL> alter database add logfile group 2 '/home/oracle/app/oradata/xtwllog/redo02.log' size 500M;

Database altered.

SQL> alter database add logfile group 3 '/home/oracle/app/oradata/xtwllog/redo03.log' size 500M;

Database altered.

SQL> SELECT group#, members, bytes/1024/1024 byte_mb, status FROM v$log;

    GROUP#    MEMBERS     BYTE_MB STATUS

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

     1        1         500 UNUSED

     2        1         500 UNUSED

     3        1         500 UNUSED

     4        1         500 INACTIVE

     5        1         500 CURRENT

(12)多次执行切换日志操作,使新建的日志组都能正常应用:

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

SQL> SELECT group#, members, bytes/1024/1024 byte_mb, status FROM v$log;

    GROUP#    MEMBERS     BYTE_MB STATUS

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

     1        1         500 ACTIVE

     2        1         500 ACTIVE

     3        1         500 CURRENT

     4        1         500 INACTIVE

     5        1         500 ACTIVE

SQL> select * from v
f998
$logfile order by group#;

    GROUP# STATUS  TYPE    MEMBER                                         IS_

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

  1    ONLINE  /home/oracle/app/oradata/xtwllog/redo01.log             NO

  2    ONLINE  /home/oracle/app/oradata/xtwllog/redo02.log             NO

  3    ONLINE  /home/oracle/app/oradata/xtwllog/redo03.log             NO

  4    ONLINE  /home/oracle/app/oradata/xtwllog/redo04.log             NO

  5    ONLINE  /home/oracle/app/oradata/xtwllog/redo05.log             NO

 

(13)删除原redo日志文件,释放磁盘空间:

$ rm /home/oracle/app/oradata/xtwl/redo0*.log

 

4、修改primary数据库为force logging模式:

SQL> alter database force logging;

Database altered.

SQL> select force_logging from v$database;

FOR

---

YES

5、修改primary数据库为归档模式:

$ mkdir -p /home/oracle/app/archlog    //在primary和standby数据库均需要创建归档目录

$ sqlplus / as sysdba

SQL> archive log list;                         //显示是否归档

SQL> shutdown immediate;

SQL> startup mount;

SQL> alter database archivelog;          //修改为归档模式

SQL> alter database open;

SQL> archive log list;                          //重启后归档模式修改成功

//此阶段需要重启,让以上修改的参数生效,时间1分钟。

6、停止数据库,并备份pfile文件,以便修改参数:

SQL> shutdown immediate;

SQL> create pfile from spfile;         

SQL> exit;

$ cp $ORACLE_HOME/dbs/initxtwl.ora $ORACLE_HOME/dbs/initxtwl_bak.ora

5、修改初始化文件参数如下,添加以下内容:

$ vi $ORACLE_HOME/dbs/initxtwl.ora

*.db_name='xtwl'

*.db_unique_name='xtwlpri'

*.log_archive_format='xtwldb_%t_%s_%r.log'

*.log_archive_config='DG_CONFIG=(xtwlpri,xtwlstd)'

*.log_archive_dest_1='LOCATION=/home/oracle/app/archlog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=xtwlpri'

*.log_archive_dest_2='SERVICE=xtwl_std LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=xtwlstd'

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

*.fal_server='xtwl_std'

*.fal_client='xtwl_pri'

*.db_file_name_convert='/home/oracle/app/oradata/xtwl/','/home/oracle/app/oradata/xtwl/'

*.log_file_name_convert='/home/oracle/app/oradata/xtwllog/','/home/oracle/app/oradata/xtwllog/'

*.standby_file_management='AUTO'

7、修改listener.ora文件如下,注册静态监听:

vi $ORACLE_HOME/network/admin/listener.ora

SID_LIST_LISTENER = 

  (SID_LIST = 

    (SID_DESC = 

      (SID_NAME = PLSExtProc) 

      (ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1) 

      (PROGRAM = extproc) 

    ) 

 

    (SID_DESC = 

      (GLOBAL_DBNAME = xtwl) 

      (ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1) 

      (SID_NAME = xtwl) 

     ) 

  )

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = dg-primary)(PORT = 1521))

    )

  )

ADR_BASE_LISTENER = /home/oracle/app

8、配置tnsnames.ora文件如下:

$ vi $ORACLE_HOME/network/admin/tnsnames.ora

XTWL_PRI =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = dg-primary)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = xtwl)

    )

  )

XTWL_STD =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = dg-standby)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = xtwl)

    )

  )

9、重启监听服务:

$ lsnrctl stop

$ lsnrctl start

$ lsnrctl status

10、由修改的pfile文件重建spfile文件,并启动数据库:

$ sqlplus / as sysdba

SQL> create spfile from pfile;

File created.

SQL> startup;

ORACLE instance started.

Total System Global Area 1603411968 bytes

Fixed Size      2213776 bytes

Variable Size    452986992 bytes

Database Buffers  1140850688 bytes

Redo Buffers      7360512 bytes

Database mounted.

Database opened.

//第4~9步需要重启数据库。

11、将primary的数据文件、参数文件、密码文件等拷贝至standby数据库:

$ cd $ORACLE_BASE

$ scp -r admin/ fast_recovery_area/ oradata/
oracle@dg-standby:$ORACLE_BASE     //拷贝数据文件等,diag/目录不用拷贝

$ cd $ORACLE_HOME/dbs

$ scp initxtwl.ora orapwxtwl
oracle@linux-dg2:$ORACLE_HOME/dbs/                 //拷贝参数文件、密码文件

四、standby数据库上操作:

1、修改初始化参数文件如下:

$ vi $ORACLE_HOME/dbs/initxtwl.ora

*.db_name='xtwl'

*.db_unique_name='xtwlstd'

*.log_archive_format='xtwldb_%t_%s_%r.log'

*.log_archive_config='DG_CONFIG=(xtwlstd,xtwlpri)'

*.log_archive_dest_1='LOCATION=/home/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=xtwlstd'

*.log_archive_dest_2='SERVICE=xtwl_pri LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=xtwlpri'

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

*.fal_server='xtwl_pri'

*.fal_client='xtwl_std'

*.db_file_name_convert='/home/oracle/app/oradata/xtwl/','/home/oracle/app/oradata/xtwl/'

*.log_file_name_convert='/home/oracle/app/oradata/xtwl/','/home/oracle/app/oradata/xtwl/'

*.standby_file_management='AUTO'

2、配置listener.ora文件如下:

$ vi $ORACLE_HOME/network/admin/listener.ora

SID_LIST_LISTENER = 

  (SID_LIST = 

    (SID_DESC = 

      (SID_NAME = PLSExtProc) 

      (ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1) 

      (PROGRAM = extproc) 

    ) 

 

    (SID_DESC = 

      (GLOBAL_DBNAME = xtwl) 

      (ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1) 

      (SID_NAME = xtwl) 

     ) 

   )

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = dg-standby)(PORT = 1521))

    )

  )

ADR_BASE_LISTENER = /home/oracle/app

3、配置tnsnames.ora文件如下:

XTWL_PRI =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = dg-primary)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = xtwl)

    )

  )

XTWL_STD =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = dg-standby)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = xtwl)

    )

  )

4、重启并查看监听:

$ lsnrctl stop

$ lsnrctl start

$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 22-JAN-2016 15:55:05

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                22-JAN-2016 15:15:47

Uptime                    0 days 0 hr. 39 min. 17 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

Listener Log File         /home/oracle/app/diag/tnslsnr/dg-standby/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dg-standby)(PORT=1521)))

Services Summary...

Service "PLSExtProc" has 1 instance(s).

  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...

Service "xtwl" has 1 instance(s).

  Instance "xtwl", status UNKNOWN, has 1 handler(s) for this service...

 

 

5、由修改的pfile文件重建spfile文件,并启动数据库到nomount状态:

SQL> create spfile from pfile;

File created.

SQL> startup nomount;

ORACLE instance started.

Total System Global Area 1603411968 bytes

Fixed Size      2213776 bytes

Variable Size    738199664 bytes

Database Buffers   855638016 bytes

Redo Buffers      7360512 bytes

6、检测主备库上的tns是否都能ping通:

$ tnsping xtwl_pri

TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 04-FEB-2016 14:13:05

Copyright (c) 1997, 2011, Oracle.  All rights reserved.

Used parameter files:

/home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dg-primary)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = xtwl)))

OK (10 msec)

$ tnsping xtwl_std

TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 04-FEB-2016 14:13:10

Copyright (c) 1997, 2011, Oracle.  All rights reserved.

Used parameter files:

/home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dg-primary)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = xtwl)))

OK (0 msec)

7、通过rman duplicate创建备库:

$ rman target sys/dbadmin1122@xtwl_pri auxiliary
sys/dbadmin1122@xtwl_std nocatalog

Recovery Manager: Release 11.2.0.1.0 - Production on Mon Jan 25 15:39:37 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to target database: XTWL (DBID=11425320)

using target database control file instead of recovery catalog

connected to auxiliary database: XTWL (not mounted)

RMAN> duplicate target database for standby from active database nofilenamecheck;

...

...(日志信息)

Finished Duplicate Db at 25-JAN-16

7、在primary和standby数据库均新建standby日志如下:

$ sqlplus / as sysdba

SQL> alter database add standby logfile group 6 ('/home/oracle/app/oradata/xtwllog/stdredo01.log') size 500M;

SQL> alter database add standby logfile group 7 ('/home/oracle/app/oradata/xtwllog/stdredo02.log') size 500M;

SQL> alter database add standby logfile group 8 ('/home/oracle/app/oradata/xtwllog/stdredo03.log') size 500M;

SQL> alter database add standby logfile group 9 ('/home/oracle/app/oradata/xtwllog/stdredo04.log') size 500M;

SQL> alter database add standby logfile group 10 ('/home/oracle/app/oradata/xtwllog/stdredo05.log') size 500M;

SQL> alter database add standby logfile group 11 ('/home/oracle/app/oradata/xtwllog/stdredo06.log') size 500M;

SQL> select group#,thread#,sequence#,archived,status from v$standby_log;

    GROUP#    THREAD#  SEQUENCE# ARC STATUS

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

  4     0        0 YES UNASSIGNED

  5     0        0 YES UNASSIGNED

  6     0        0 YES UNASSIGNED

  7     0        0 YES UNASSIGNED

 

 

8、为standby数据库启动日志实时应用:

SQL> shutdown immediate;

SQL> startup;

ORACLE instance started.

Total System Global Area 1603411968 bytes

Fixed Size      2213776 bytes

Variable Size    469764208 bytes

Database Buffers  1124073472 bytes

Redo Buffers      7360512 bytes

Database mounted.

Database opened.

SQL>  select name,database_role,open_mode from v$database;

NAME   DATABASE_ROLE    OPEN_MODE

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

XTWL   PHYSICAL STANDBY READ ONLY

SQL> alter database recover managed standby database using current logfile disconnect;

Database altered.

SQL> select name,database_role,open_mode from v$database;

NAME   DATABASE_ROLE    OPEN_MODE

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

XTWL   PHYSICAL STANDBY READ ONLY WITH APPLY

9、修改生产环境上的dblink创建问题,因为用已知的创建方式备库的dblink会出现问题:

(1)新增primary的tnsnames.ora文件内容如下:

$ vi $ORACLE_HOME/network/admin/tnsnames.ora

XTWLLINK =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = dg-primary)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = xtwl)

    )

  )

 

(2)新增standby的tnsnames.ora文件内容如下:

$ vi $ORACLE_HOME/network/admin/tnsnames.ora

XTWLLINK =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = dg-standby)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = xtwl)

    )

  ) 

(3)在primary数据库上重建各用户的dblink:

$ sqlplus /nolog

SQL>conn xfjy_pay/123

SQL>drop database link VERSIONDBL;

SQL>create database link VERSIONDBL connect to xtwl_version identified by "123" using 'XTWLLINK';

SQL>conn xtwl_version/123

SQL>drop database link PAYDBL;

SQL>create database link PAYDBL connect to xfjy_pay identified by "123" using 'XTWLLINK';

查看备库的dba_db_links表是否同步修改。

SQL>select sequence#,applied from v$archived_log order by sequence#;

至此,备库配置基本完成!

 

五、配置rman数据库及归档备份,以及归档日志定期清理问题:

篇幅较大,需要参考《04-生产环境DG备份配置.txt》!

六、DG主备库创建备份导出目录:

(1)primary和standby库分别创建导出目录:

# su - oracle

$ mkdir -p /home/oracle/back

(2)primary和standby库分别查询已经创建的directory:

SQL> select * from all_directories;

OWNER          DIRECTORY_NAME        DIRECTORY_PATH

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

SYS          ORACLE_OCM_CONFIG_DIR       /home/oracle/app/oracle/product/11.2.0/dbhome_1/ccr/state

SYS          DATA_PUMP_DIR        /home/oracle/app/admin/xtwl/dpdump/

SYS          XMLDIR         /home/oracle/app/oracle/product/11.2.0/dbhome_1/rdbms/xml

(3)primary库创建directory:

SQL> create or replace directory DATA_DUMP as '/home/oracle/back';

Directory created.

SQL> select * from all_directories;

SYS          ORACLE_OCM_CONFIG_DIR       /home/oracle/app/oracle/product/11.2.0/dbhome_1/ccr/state

SYS          DATA_PUMP_DIR        /home/oracle/app/admin/xtwl/dpdump/

SYS          XMLDIR         /home/oracle/app/oracle/product/11.2.0/dbhome_1/rdbms/xml

SYS          DATA_DUMP        /home/oracle/back

(4)primary库赋予用户导出目录的读写权限:

SQL> grant read,write on directory DATA_DUMP to xtwl_version,xfjy_pay;

Grant succeeded.

(5)查询standby库同步导出目录创建的情况:

SQL> select * from all_directories;

SYS          ORACLE_OCM_CONFIG_DIR       /home/oracle/app/oracle/product/11.2.0/dbhome_1/ccr/state

SYS          DATA_PUMP_DIR        /home/oracle/app/admin/xtwl/dpdump/

SYS          XMLDIR         /home/oracle/app/oracle/product/11.2.0/dbhome_1/rdbms/xml

SYS          DATA_DUMP        /home/oracle/back

SQL> select * from dba_tab_privs where TABLE_NAME ='DATA_DUMP';

GRANTEE          OWNER         TABLE_NAME       GRANTOR       PRIVILEGE         GRA HIE

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

XFJY_PAY         SYS         DATA_DUMP        SYS       WRITE         NO  NO

XTWL_VERSION         SYS         DATA_DUMP        SYS       WRITE         NO  NO

XFJY_PAY         SYS         DATA_DUMP        SYS       READ         NO  NO

XTWL_VERSION         SYS         DATA_DUMP        SYS       READ 

至此,DG主备创建导出目录成功!

七、DG主备库开启flashback:

篇幅较大,需要参考《05-生产环境DG主备开启flashback.txt》!

 

八、Active dataguard的相关维护操作:

1、安装配置以及以后的维护过程中需要经常检查alert文件,以便纠错:

$ vi /home/oracle/app/diag/rdbms/xtwlpri/xtwl/trace/alert_xtwl.log

 

2、相关视图查看:

(1)查看进程活动状态:

SQL> select process,client_process,sequence#,status from v$managed_standby;               --主要是查看standby数据库   

PROCESS   CLIENT_P  SEQUENCE# STATUS

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

ARCH   ARCH      0 CONNECTED

ARCH   ARCH      0 CONNECTED

ARCH   ARCH     62 CLOSING

ARCH   ARCH     64 CLOSING

RFS   LGWR     65 IDLE

RFS   N/A      0 IDLE

RFS   UNKNOWN     0 IDLE

MRP0   N/A     65 WAIT_FOR_LOG

(2)查看redo应用的情况:

SQL> select dest_name,archived_thread#,archived_seq#,applied_thread#,applied_seq#,db_unique_name from v$archive_dest_status where status='VALID';

DEST_NAME                          ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_THREAD# APPLIED_SEQ# DB_UNIQUE_NAME

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

LOG_ARCHIVE_DEST_1                             64        0     0 xtwl2

LOG_ARCHIVE_DEST_2                              0        0     0 xtwl1

STANDBY_ARCHIVE_DEST                             64        1    64 NON

(3)查看归档文件路径及创建信息:

SQL> select name,creator,sequence#,applied,completion_time from v$archived_log;

/home/oracle/arch/xtwldb_1_5_901617788.log                 ARCH     5 YES       20-JAN-16

/home/oracle/arch/xtwldb_1_6_901617788.log                 ARCH     6 YES       20-JAN-16

/home/oracle/arch/xtwldb_1_8_901617788.log                 ARCH     8 YES       20-JAN-16

/home/oracle/arch/xtwldb_1_7_901617788.log                 ARCH     7 YES       20-JAN-16

(4)查看standby中所有被应用的归档文件信息:

SQL> select first_time,first_change#,next_change#,sequence# from v$log_history;

20-JAN-16  945184       949892       1

20-JAN-16  949892       958347       2

20-JAN-16  958347       973030       3

20-JAN-16  973030       990566       4

20-JAN-16  990566       993090       5

(5)查看数据库角色,保护模式,保护级别,switchover状态:

SQL> select database_role,db_unique_name,open_mode,protection_mode,protection_level,switchover_status from v$database;

PRIMARY   xtwl1    READ WRITE

MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  TO STANDBY

SQL> select database_role,db_unique_name,open_mode,protection_mode,protection_level,switchover_status from v$database;

PHYSICAL STANDBY xtwl2    READ ONLY WITH APPLY MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  NOT ALLOWED

(6)查看是否启用实时应用:  --在primary数据库上查看

SQL> select recovery_mode from v$archive_dest_status where dest_id=2;

RECOVERY_MODE

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

MANAGED REAL TIME APPLY

(7)查看dataguard应用情况:

SQL> select message from v$dataguard_status;

MESSAGE

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

ARC0: Archival started

ARC1: Archival started

ARC2: Archival started

ARC2: Becoming the 'no FAL' ARCH

ARC2: Becoming the 'no SRL' ARCH

ARC1: Becoming the heartbeat ARCH

ARC3: Archival started

Error 12514 received logging on to the standby

Error 12514 for archive log file 3 to 'xtwldg'

LGWR: Failed to archive log 3 thread 1 sequence 69 (12514)

ARC0: Beginning to archive thread 1 sequence 68 (1103936-1104050)

 

3、Active Dataguard三种模式的切换:

SQL> select database_role,protection_mode,protection_level from v$database;

DATABASE_ROLE  PROTECTION_MODE      PROTECTION_LEVEL

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

PRIMARY   MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

//当前为最高性能模式,事务提交时只用写到primary的online redo log,primary数据库几乎不受影响,主备库有时间延时(通常最小可降到0~几秒),推荐方式!

SQL> alter database set standby database to maximize availability;

Database altered.

SQL> select database_role,protection_mode,protection_level from v$database; 

DATABASE_ROLE  PROTECTION_MODE      PROTECTION_LEVEL

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

PRIMARY   MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

//介于最高性能和最大保护模式之间,切换为最高可用性模式后,一旦standby出现故障,就切换成最高可用性模式,primary数据库不会shutdown。

SQL> alter database set standby database to maximize protection; 

Database altered.

SQL> select database_role,protection_mode,protection_level from v$database;

DATABASE_ROLE  PROTECTION_MODE      PROTECTION_LEVEL

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

PRIMARY   MAXIMUM PROTECTION   MAXIMUM PROTECTION

//切换为最大保护模式,最大限度地保护数据不丢失,即至少有一个standby和primary保持实时同步,当一个事物提交时,不但要写到primary数据库的online redo log,

还要写到至少一个standby的standby redo log,这样做会造成standby出现故障或者网络出现故障时,导致日志无法同步时,primary数据库会shutdown,这在生产上一般不被接受。

4、primary和standby之间的角色转化:

(1)登录primary数据库,检查switchover状态:

$ sqlplus / as sysdba

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS

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

TO STANDBY

(2)启动switchover,将primary转换为standby角色:

SQL> alter database commit to switchover to physical standby;

Database altered.

(3)将原primary数据库重启到mount状态:

SQL> shutdown immediate;

ORA-01507: database not mounted

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

Total System Global Area 1603411968 bytes

Fixed Size      2213776 bytes

Variable Size    939526256 bytes

Database Buffers   654311424 bytes

Redo Buffers      7360512 bytes

Database mounted.

(4)登录原standby数据库,检查switchover状态:

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS

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

TO PRIMARY

(5)启动switchover,将standby转换为primary角色,打开新的primary数据库:

SQL> alter database commit to switchover to primary;

Database altered.

SQL> alter database open;

Database altered.

(6)启动原primary数据库,现standby数据库的redo应用:

SQL> startup force;

SQL> alter database recover managed standby database using current logfile disconnect;

Database altered.

(7)检查新的primary,standby数据库的状态:

SQL> select name,database_role from v$database; --primary库

NAME   DATABASE_ROLE

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

XTWL   PRIMARY

SQL> select name,database_role from v$database; --standby库

NAME   DATABASE_ROLE

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

XTWL   PHYSICAL STANDBY

5、物理standby的failover(Primary数据库可能瘫痪的情况下):重要!!!

(1)检查归档文件是否连续:

SQL> select thread#,low_sequence#,high_sequence# from v$archive_gap;

no rows selected

(2)如果有返回行,将需要的归档日志文件复制到备库的相应目录下。

(3)必须确保所有已生成的归档文件处于standby服务器,并且需要加入到数据字典,命令如下:

SQL> alter database register physical logfile '/home/oracle/arch/xtwldb_1_9_902236329.log';

(4)检查主备库的归档文件是否完整:

SQL> select distinct thread#,max(sequence#) over(partition by thread#) from v$archived_log;

   THREAD# MAX(SEQUENCE#)OVER(PARTITIONBYTHREAD#)

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

  1          101

(5)原standby数据库切换为primary数据库:

SQL> alter database recover managed standby database finish force;

Database altered.

SQL> alter database commit to switch to primary;

Database altered.

(6)打开新的primary数据库:

如果当前数据库是mount状态,直接alter database open即可;

如果当前数据库是read-only状态,先shutdown immediate,再startup。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  运维 oracle 文档