安装配置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。
################################################################
首先确定原生产库是否安装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。
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- 运维入门
- 运维提升
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- 表空间操作
- PreparedStatement中in子句的处理
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- oracle sql日期比较
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- OS block size和Oracle block size,查找OS Blocksize的方法
- 【DevOps】为什么我们永远疲于奔命?
- oracle中创建数据库和表空间的几点总结
- 数据库自动备份脚本
- oracle的nvl函数的使用介绍
- 解决oracle用户连接失败的解决方法
- oracle的一些tips技巧
- Oracle 下的开发日积月累
- Oracle存储过程之数据库中获取数据实例