Oracle 11g RAC 配置单实例 DataGuard(通过 DUPLICATE 方式)

1 安装备库的数据库软件

1.1 安装时使用的字符集
NLS_CHARACTERSET                    ZHS16GBK
NLS_NCHAR_CHARACTERSET              AL16UTF16

1.2 检查备库的系统参数是否满足安装要求
#查看主机内存
grep MemTotal /proc/meminfo

#交换空间,如果物理内存在16G以上,推荐交换空间至少为16G
grep SwapTotal /proc/meminfo
free
 
#检查机器的硬件名称
uname -m
 
#检查临时表空间,至少1G
df -h /tmp
df -h
 
#检查 linux 版本
cat /proc/version
lsb_release -id
 
#检查内核
uname - r

1.3 禁用防火墙和SELINUX

#使用root用户登录
service iptables status
service iptables stop
chkconfig iptables off

#然后输入以下命令,禁用SELinux:
vi /etc/selinux/config
SELINUX=disabled

1.4 检查软件包
rpm -q --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" binutils compat-libstdc elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel

1.5 创建组和用户

/usr/sbin/groupadd oinstall
/usr/sbin/groupadd -g 502 dba
/usr/sbin/groupadd -g 503 oper
id oracle
/usr/sbin/useradd -u 502 -g oinstall -G dba,oper oracle
passwd oracle

1.6 设置环境变量,从rac的其中一个节点拷贝环境变量文件到备库上面

#登录主库的节点1
cd $ORACLE_HOME/dbs
scp bash_profile oracle@beiku_ip:/home/oracle/.bash_profile

1.7 设置内核参数

vi /etc/sysctl.conf
#增加或者修改以下内容:
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
 
#使用以下命令验证配置:
sysctl -p
 
#修改用户oracle的shell限制:
vi /etc/security/limits.conf
#增加以下内容:
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
 
#修改登录参数,执行以下操作:
vi /etc/pam.d/login
#增加以下内容:
session required /lib64/security/pam_limits.so
session required pam_limits.so

#同样执行以下操作:
vi /etc/profile
#增加以下内容:
if [ $USER = "oracle" ] ; then
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
  else
    ulimit -u 16384 -n 65536
  fi
  umask 022
fi

1.8 创建文件目录

mkdir -p /u01/app/oracle/product/11.2.0/db_1
chown -R oracle:oinstall /u01/app/oracle/product/11.2.0/db_1

#创建快速恢复区目录
mkdir -p /ORADATA/fast_recovery
chown -R oracle:oinstall /ORADATA/fast_recovery

#创建数据库文件目录
mkdir -p /ORADATA/data
chown -R oracle:oinstall /ORADATA/data

#创建数据库日志目录
mkdir -p /ORADATA/redolog
chown -R oracle:oinstall /ORADATA/redolog

#创建归档日志目录
mkdir -p /ORADATA/arc
chown -R oracle:oinstall /ORADATA/arc

#创建audit目录
mkdir -p /u01/app/oracle/admin/gtfdb/adump
chown -R oracle:oinstall /u01/app/oracle/admin/gtfdb/adump

1.9 安装Oracle软件,此步骤不建库

#使用oracle用户登录
#首先解压安装文件:
unzip p10404530_112030_Linux-x86-64_1of7.zip
unzip p10404530_112030_Linux-x86-64_2of7.zip
#打开图形设置,打开Xmanager4 的 Passive模式。
export DISPLAY=10.230.1.215:0.0
#此ip不是服务器的ip,为自己的笔记本ip
#然后进入解压后的database目录,执行以下命令:
./runInstaller

2. DataGuard 主库的相关配置

2.1 主库打开FORCE LOGGING模式
ALTER DATABASE FORCE LOGGING;
作用:不管什么操作都会生成redo日志
特点:1.在数据库mount状态和open状态都可以启动force logging模式
         2.临时表空间和临时回滚段动作不会生成redo日志

创建文件目录
mkdir -p /u01/app/oracle/product/11.2.0/db_1
chown -R oracle:oinstall /u01/app/oracle/product/11.2.0/db_1
#创建快速恢复区目录
mkdir -p /ORADATA/fast_recovery
chown -R oracle:oinstall /ORADATA/fast_recovery

#创建数据库文件目录
mkdir -p /ORADATA/data
chown -R oracle:oinstall /ORADATA/data

#创建数据库日志目录
mkdir -p /ORADATA/redolog
chown -R oracle:oinstall /ORADATA/redolog

#创建归档日志目录
mkdir -p /ORADATA/arc
chown -R oracle:oinstall /ORADATA/arc

chown -R oracle:oinstall /ORADATA

#创建audit目录
mkdir -p /u01/app/oracle/admin/gtfdb/adump
chown -R oracle:oinstall /u01/app/oracle/admin/gtfdb/adump

2.2 配置主库的参数文件

在主库节点一上执行
cd $ORACLE_HOME/dbs
sqlplus / as sysdba
create pfile from spfile;
exit

#备份参数文件

cp initgtfdb2.ora /home/oracle/initgtfdb2.ora_bak

在线修改参数文件

alter system set log_archive_config='DG_CONFIG=(gtfdb,gtfdbdg)' scope=both sid='*';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=+FRA VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=gtfdb' scope=both sid='*';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=gtfdbdg ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=gtfdbdg' scope=both sid='*';
alter system set LOG_ARCHIVE_DEST_STATE_1=enable  scope=both sid='*';
alter system set LOG_ARCHIVE_DEST_STATE_2=enable scope=both sid='*';
alter system set LOG_ARCHIVE_FORMAT = 'log%d_%t_%s_%r.arc' scope=both sid='*';
alter system set LOG_ARCHIVE_MAX_PROCESSES=30 scope=both sid='*';
alter system set fal_server=gtfdbdg scope=both sid='*';
alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=both sid='*';

alter system set fal_server=gtfdb scope=both sid='*';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;

alter system set log_archive_dest_2='service=bhoms02 async valid_for=(online_logfiles,primary_role) db_unique_name=bhoms02';

alter system set LOG_ARCHIVE_DEST_2='SERVICE=gtfdbdg ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=gtfdbdg' scope=both sid='*';

alter system set log_archive_dest_2='service=gtfdbdg async valid_for=(online_logfiles,primary_role) db_unique_name=gtfdbdg';

2.3 创建standby logfile

在对应的ASM盘上创建日志目录

su - grid
asmcmd
cd DATA
cd GTFDB
mkdir standbylog

exit
sqlplus / as sysdba

ALTER DATABASE ADD STANDBY LOGFILE  thread 1 GROUP 9 '+DATA/gtfdb/standbylog/standby_group_01.log' SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE  thread 1 GROUP 10 '+DATA/gtfdb/standbylog/standby_group_02.log' SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE  thread 1 GROUP 11 '+DATA/gtfdb/standbylog/standby_group_03.log' SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE  thread 1 GROUP 12 '+DATA/gtfdb/standbylog/standby_group_04.log' SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE  thread 1 GROUP 13 '+DATA/gtfdb/standbylog/standby_group_05.log' SIZE 512M;

ALTER DATABASE ADD STANDBY LOGFILE  thread 2 GROUP 14 '+DATA/gtfdb/standbylog/standby_group_06.log' SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE  thread 2 GROUP 15 '+DATA/gtfdb/standbylog/standby_group_07.log' SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE  thread 2 GROUP 16 '+DATA/gtfdb/standbylog/standby_group_08.log' SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE  thread 2 GROUP 17 '+DATA/gtfdb/standbylog/standby_group_09.log' SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE  thread 2 GROUP 18 '+DATA/gtfdb/standbylog/standby_group_10.log' SIZE 512M;

作用:主库切换到备库角色时接收主库redo日志
检查:
SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM GV$STANDBY_LOG;

2.4 在主库各节点分别配置TNS

在主库的/etc/hosts里面,添加备库ip的解析

cd $ORACLE_HOME/network/admin
vi tnsnames.ora

#modified by jjn for the data guard on 2015/10/28
GTFDBDG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = GTFDBDG)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = gtfdbdg)
    )
  )
GTFDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = GTFDB1-vip )(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = gtfdb)
      (SID=gtfdb1)
    )
  )
GTFDB2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = GTFDB2-vip )(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = gtfdb)
      (SID=gtfdb2)
    )
  )

2.5 拷贝主库密码文件到备库上
cd $ORACLE_HOME/dbs
scp orapwgtfdb1 oracle@10.100.20.71:/u01/app/oracle/product/11.2.0/db_1/dbs/
#如果备库密码文件有问题,则把主库两节点的密码文件均拷贝到备库,并把其中一个密码文件复制成备库的SID格式。
#在备库上更改密码文件名称
mv orapwgtfdb1 orapwgtfdb

2.6 拷贝主库的参数文件到备库
cd $ORACLE_HOME/dbs
scp initgtfdb2.ora oracle@10.100.20.71:/u01/app/oracle/product/11.2.0/db_1/dbs/

3. 配置Dataguard备库的相关配置

3.1 配置备库的参数文件

vi initgtfdb2.ora
gtfdb2.__db_cache_size=10670309376
gtfdb1.__db_cache_size=10670309376
这样的参数改为一个,如
*.__db_cache_size=10670309376
去掉下面参数
gtfdb1.instance_number=1
gtfdb2.instance_number=2
gtfdb2.thread=2
gtfdb1.thread=1
*.cluster_database=true
*.remote_listener='rac-scan:1521'
# 修改.db_recovery_file_dest='+FRA'为存在的文件目录

增加下面参数
DB_UNIQUE_NAME=gtfdbdg
*.db_create_file_dest='/ORADATA/data'
*.db_create_online_log_dest_1='/ORADATA/redolog'
*.db_create_online_log_dest_2='/ORADATA/redolog'
*.control_files='/u01/app/oracle/product/11.2.0/db_1/dbs/controlfile01.ctl', '/u01/app/oracle/product/11.2.0/db_1/dbs/controlfile02.ctl'
LOG_ARCHIVE_DEST_1=
 'LOCATION=/ORADATA/arc
  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  DB_UNIQUE_NAME=gtfdbdg'
LOG_ARCHIVE_DEST_2=
 'SERVICE=gtfdb ASYNC
  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
  DB_UNIQUE_NAME=gtfdb'
FAL_SERVER=gftdb
LOG_ARCHIVE_CONFIG='DG_CONFIG=(gftdb,gtfdbdg)'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.LOG_ARCHIVE_FORMAT = log%d_%t_%s_%r.arc
*.LOG_ARCHIVE_MAX_PROCESSES=30
STANDBY_FILE_MANAGEMENT=AUTO

3.2 配置备库的监听

在备库的/etc/hosts里面,添加主库ip的解析
su - root
vi /etc/hosts
GTFDB    ip
GTFDB1   ip
GTFDB2   ip
GTFDBDG    ip

cd $ORACLE_HOME/network/admin
vi listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = gtfdbdg)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = gtfdb)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = GTFDBDG)(PORT = 1521))
  )
ADR_BASE_LISTENER = /u01/app/oracle

vi tnsnames.ora
GTFDBDG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = GTFDBDG)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = gtfdbdg)
    )
  )
GTFDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = GTFDB )(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = gtfdb)
    )
  )
GTFDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = GTFDB1 )(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = gtfdb)
      (SID=gtfdb1)
    )
  )
GTFDB2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = GTFDB2 )(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = gtfdb)
      (SID=gtfdb2)
    )
  )

lsnrctl stop
lsnrctl start

3.3 通过duplicate命令进行复制

cd /home/oracle/script
nohup sh dup_db.sh &
cd $ORACLE_HOME/dbs
sqlplus / as sysdba

create spfile from pfile='initgtfdb2.ora';

startup nomount

exit

rman target sys/Sys#2013@gtfdb1 auxiliary sys/Sys#2013@gtfdbdg
run {
allocate channel ch1 type disk;
allocate auxiliary channel ch2 type disk;
duplicate target database for standby nofilenamecheck from active database;
release channel ch1;
release channel ch2;
}

#查收日志状态
select group#,thread#,bytes,archived,status from v$standby_log;

3.4 备库启动日志应用
sqlplus / as sysdba
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

--检查归档日志的同步情况
SELECT SEQUENCE#,THREAD#,APPLIED FROM GV$ARCHIVED_LOG ORDER BY SEQUENCE#;

3.5 启动数据库日志实时应用

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
 
ALTER DATABASE OPEN;

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

3.6 检查备库数据库状态

select database_role,switchover_status,open_mode from v$database;

select * from v$dataguard_stats;

select * from v$managed_standby;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26506993/viewspace-2107327/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26506993/viewspace-2107327/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值