经过一番奋战, 终于配成dataguard了. 其中参考了小布, 三思, 雷宇的dataguard文档. 这是我一边配置, 一边总结出来的文档.


step1.安装oracle enterprise linux as 4(节点一, 主库所在节点)

ip = 192.168.1.188
hosts = note1
节点1连接字符串 = LSNODE1


防火墙基本配置:
⊙ 无防火墙
⊙ 是否启用 SELinux:已禁用
安装方式的选项:
⊙ 定制要安装的软件包(C)
桌面选项:
(√) X窗口系统 (选取默认)
(√) GNOME桌面环境 (选取默认)
(√) KDE桌面环境 (选取默认)
应用程序选项:
( ) 工程和科学 (选取默认)
( ) 图形化互联网 (选取默认)
(√) 基于文本的互联网 (选取默认)
( ) 办公/生产率 (选取默认)
服务器选项:
(√) 服务器配置工具 (选取全部)
( ) 万维网服务器 (选取全部)
(√) Windows文件服务器 (选取全部)
( ) DNS服务器 (选取全部)
开发选项:
(√) 开发工具 (选择全部)
系统选项:
(√) 管理工具 (选取默认)
(√) 打印支持 (选取默认)

-----------------------------------------------------------------------------------------------------------------------------------
step2.安装oracle 10g R2

二、系统软硬件需求(可以略过,需要时可以参考)
1、硬件概述
CPU:
内存:2GB  (#grep MemTotal /proc/meminfo)
SWAP:2GB (grep SwapTotal /proc/meminfo)
DISK:18GB
2、软件概述
Linux版本:RedHat Enterprise Linux AS release4(Nahant updatea2)(#cat /etc/issue)
内核版本:Linux 2.6.9-22.EL #1(#uname –a)
数据库:oracle10g
3、系统需求
A、硬件环境需求
检查内容 最小值 检查命令参考
物理内存 512M # grep MemTotal /proc/meminfo 
交换空间 1.0 GB或2倍内存大小 # grep SwapTotal /proc/meminfo 
/tmp 空间 400 MB  # df -k /tmp 
软件所需空间 2.5 GB  # df -k (空间越大越好,如果是正式系统,应该进行详尽的规划) 
数据库文件 1.2 GB  # df -k (空间越大越好,如果是正式系统,应该进行详尽的规划) 

B、软件环境需求(如果按照第一步安装linux这些包都已安装)
# rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n' binutils compat-db compat-libstdc++-296 control-center gcc gcc-c++ glibc glibc-common gnome-libs

libstdc++ libstdc++-devel make pdksh sysstat xscreensaver setarch
应该包含下列的包:
binutils-2.15.92.0.2-13.EL4
compat-db-4.1.25-9
compat-libstdc++-296-2.96-132.7.2
control-center-2.8.0-12
gcc-3.4.3-22.1.EL4
gcc-c++-3.4.3-22.1.EL44
glibc-2.3.4-2.9
glibc-common-2.3.4-2.9
gnome-libs-1.4.1.2.90-44.1
libstdc++-3.4.3-22.1
libstdc++-devel-3.4.3-22.1
make-3.80-5
pdksh-5.2.14-30
xscreensaver-4.18-5.rhel4.2
setarch-1.6-1
 
三、Oracle的安装前准备:
1、配置系统内核参数,以root用户登录,修改在/etc/sysctl.conf文件,在该文件中添加以下参数:
(设置是可以拷贝,但是完了以后最好用vi来查看一下有没有什么特殊符号)
kernel.shmall = 2097152
kernel.shmmax = 2147483648  (以字节为单位,物理内存数量*1024*1024*2, 为内存的2倍)
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
保存退出执行以下命令使配置马上生效
# sysctl –p
如果没有错误提示到下一步。
 
2、   设置oracle对文件的要求
(设置是可以拷贝,但是完了以后最好用vi来查看一下有没有什么特殊符号)
编辑文件:vi /etc/security/limits.conf 加入以下语句:
oracle  soft  nproc   2047
oracle  hard  nproc   16384
oracle  soft  nofile  1024
oracle  hard  nofile  65536
编辑文件:vi /etc/pam.d/login 加入以下语句(可能应该加在最后一条规则之前):
session   required   /lib/security/pam_limits.so
 
3、创建安装数据库时所需要使用的用户组oinstall,dba及Oracle用户,并将oinstall,dba组定义成oracle用户的主次组。
命令参考如下:
# groupadd oinstall
# groupadd dba
# useradd -g oinstall -G dba oracle (设定oracle用户为oinstall、dba用户组的成员)
# passwd oracle (设定oracle用户的密码)
 
4、以root用户身份登录系统创建Oracle系统的安装目录和数据库文件存放的目录。例如:/opt/oracle,及改变以上目录的属性
令参考如下:
# mkdir -p /opt/oracle/product/10.2.0 (创建数据目录)
# chown -R oracle.oinstall /opt/oracle (设定目录所属的用户组和用户)
# chmod -R 775 /opt/oracle(设定目录的读写权限)
 
5、   以oracle 用户身份登录系统,复制和解压10201_database_linux32.zip文件到/home/oracle下:
# cp 10201_database_linux32.zip /home/oracle/ (复制文件到oracle个人目录内)
# unzip /home/oracle/10201_database_linux32.zip (解压zip文件)
 
6、   配置oracle用户环境,以oracle用户登录,修改oracle用户下的 .bash_profile 文件。增加以下参数:
vi .bash_profile (执行vi命令来修改.bash_profile)
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
Fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
# 以下是我们所需配置的内容(设置是可以拷贝,但是完了以后最好用vi来查看一下有没有什么特殊符号)
umask=022
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0
export ORACLE_SID=dgdemo
export ORACLE_TERM=xterm
export PATH=$ORACLE_HOME/bin:/usr/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
安装好后再配置以下环境变量
export LANG=zh_CN.GBK
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
 
7、$  source .bash_profile 使环境文件马上生效
 
8、找到相应目录运行runInstaller命令开始安装(可用户oracle帐号登录系统安装)
9、使用dbca创建数据库,操作和windows上雷同,这里不再详细介绍
10、使用netca命令启动Net Configuration Assistant配置监听程序listener
11、使用Net Configuration Assistant本地Net服务名
注意;以上10、11点也可以用netmgr命令打开Net Manager工具来进行配置
12、使用sqlplus来测试连接

 

---------------------------------------------------------------------------------------------------------------------------------------------------------
step3 在节点一添加备库重做日志且为临时表空间添加新的数据文件.

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/opt/oracle/oradata/dgdemo/sredo01.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/opt/oracle/oradata/dgdemo/sredo02.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/opt/oracle/oradata/dgdemo/sredo03.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/opt/oracle/oradata/dgdemo/sredo04.log') SIZE 50M;

sql> alter tablespace temp add tempfile '/opt/oracle/oradata/dgdemo/temp02.dbf' size 100M reuse;


---------------------------------------------------------------------------------------------------------------------------------------------------------
step4 在节点一创建归档目录, 修改listener.ora, tnsnames.ora, 且通过节点一复制生成节点二(当用vmware做该实验时)

# mkdir /opt/oracle/oradata/arch
# vi tnsnames.ora
# vi listener.ora
复制节点二(vmware虚拟机之间复制)

---------------------------------------------------------------------------------------------------------------------------------------------------------
step5 在节点一强迫节点一主库做日志且修改节点一主库的参数

sql>alter database force logging;

配置节点一主库参数, db_unique_name为区分主库备库的逻辑定义; lsnode1, lsnode2为连接符, 它对应tnsnames.ora

//为每个数据库指定一个唯一的名字。这个名字与数据库绑定不会更改,即使主和备数据库交换角色。并非数据库的实例名或全局名.
SQL> alter system set db_unique_name='uqn_node1' scope=spfile;

该参数通过DG_CONFIG 属性罗列同一个Data Guard 中所有DB_UNIQUE_NAME(含primary db 及standby db),以逗号分隔
例如:LOG_ARCHIVE_CONFIG='DB_CONFIG=(uqn_node1,uqn_node2)'
SQL>alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(uqn_node1,uqn_node2)' scope=spfile;

主库归档文件的生成路径
SQL> alter system set log_archive_dest_1='location=/opt/oracle/oradata/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=uqn_node1' scope=spfile;

备库归档文件的生成路径
SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=lsnode2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=uqn_node2' scope=spfile;

指定ENABLE 以运行重做传输服务传送重做数据到指定的目的地。
SQL> alter system set  LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=spfile;

指定ENABLE 以运行重做传输服务传送重做数据到指定的目的地。
SQL> alter system set  LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=spfile;


配置节点一备库参数, lsnode1, lsnode2为连接符, 对应tnsnames.ora

SQL> alter system set FAL_SERVER='lsnode2' scope=spfile;

SQL> alter system set FAL_CLIENT='lsnode1' scope=spfile;

SQL> alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=spfile;


------------------------------------------------------------------------------------------------------------------------------------------------------
step6 把节点一主库设为归档模式, 且拷贝oradata目录, 静态参数文件, 口令文件, admin目录到节点二; 在节点二上应用在节点一生成的备库控制文件

sql>shutdown immediate;
sql>startup mount;
sql>alter database archivelog;
sql>alter database open;


sql>shutdown immediate
sql>startup mount;
sql>alter database create standby controlfile as '/opt/oracle/oradata/standbyctl.ctl'; 在节点一生成的备库控制文件, 在节点二上应用在节点一生成的备库控制文件
拷贝节点一整个oradata目录包括在节点一生成的备库控制文件及其下的归档目录arch, 整个/opt/oracle/admin目录, 静态参数文件initdgdemo.ora, 口令文

件./product/10.2.0/dbs/orapwdgdem到节点二

scp -r ... root@192.168.1.189:/opt/...        -r 表示拷贝目录


-------------------------------------------------------------------------------------------------------------------------------------------------------
step7 在节点二的备库中替换拷贝过来的目录和文件且重建spfile

节点二
# chown -R oracle:oinstall *     改变拷贝过来目录/文件的属主

SQL> startup pfile='/opt/oracle/product/10.2.0/dbs/initdgdemo.ora' nomount;
SQL> create spfile from pfile='/opt/oracle/product/10.2.0/dbs/initdgdemo.ora';
SQL> shutdown immediate;

-------------------------------------------------------------------------------------------------------------------------------------------------------
step8 修改节点二及备库参数

节点二
ip = 192.168.1.189
hosts = note2
oracle_sid = dgdemo
节点2连接字符串 = LSNODE2


配置节点二主库参数

SQL> alter system set db_unique_name='uqn_node2' scope=spfile;


SQL>alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(uqn_node1,uqn_node2)' scope=spfile;


SQL> alter system set log_archive_dest_1='location=/opt/oracle/oradata/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=uqn_node2' scope=spfile;


SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=lsnode1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=uqn_node1' scope=spfile;


SQL> alter system set  LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=spfile;


SQL> alter system set  LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=spfile;

 

配置节点二备库参数
fal_server=lsnode1
SQL> alter system set FAL_SERVER='lsnode1' scope=spfile;

fal_client=lsnode2
SQL> alter system set FAL_CLIENT='lsnode2' scope=spfile;


STANDBY_FILE_MANAGEMENT=AUTO
SQL> alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=spfile;


***
修改备库控制文件类型为standby, 即用standbyctl.ctl替换**1.ctl, **2.ctl
SQL> alter system set control_files='/opt/oracle/oradata/standbyctl.ctl' scope=spfile;

---------------------------------------------------------------------------------------------------------------------------------------------------------
step9 在节点一启动侦听且打开主库

启动节点一主库侦听
#lsnrctl start

启动主库, 打开主库
SQL> startup mount;
SQL> alter database open;


---------------------------------------------------------------------------------------------------------------------------------------------------------
step11 在节点二启动侦听及备库

启动节点二备库侦听
#lsnrctl start

重新关闭备节点数据库并以standby方式启动到mount状态下:
SQL> startup nomount;
SQL> alter database mount standby database;

将备库节点更改到接受主库节点redo日志模式下:
SQL> alter database recover managed standby database disconnect from session;

查看切换状态:
SQL> select switchover_status from v$database;

---------------------------------------------------------------------------------------------------------------------------------------------------------
step12 测试节点一上主库与节点二备库
在节点一主库切换日志
SQL> alter system switch logfile;
 

在节点一主库及节点二备库查看是否已应用切换的日志
SQL> select name from v$archived_log;

停止节点二备库应用主库日志
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;