OS :
linux1
linux2
Oracle software:
Oracle database 11.2.0.1 64bit
两个主机安装Oracle软件
1上传数据库安装包,并且解压
2配置主机
检查安装包
rpm -qa | grep binutils
rpm -qa | grep compat-libstdc++
rpm -qa | grep elfutils-libelf
rpm -qa | grep elfutils-libelf-devel
rpm -qa | grep elfutils-libelf-devel-static
rpm -qa | grep gcc
rpm -qa | grep gcc-c++
rpm -qa | grep glibc
rpm -qa | grep glibc-common
rpm -qa | grep glibc-devel
rpm -qa | grep glibc-headers
rpm -qa | grep kernel-headers
rpm -qa | grep ksh
rpm -qa | grep libaio
rpm -qa | grep libaio-devel
rpm -qa | grep libgcc
rpm -qa | grep libgomp
rpm -qa | grep libstdc++
rpm -qa | grep libstdc++-devel
rpm -qa | grep make
rpm -qa | grep sysstat
安装必要的软件包
yum install compat-libstdc++ elfutils-libelf-devel elfutils-libelf-devel-static gcc-c++ glibc-devel glibc-headers kernel-headers ksh libaio-devel libstdc++-deve
rpm -ivh compat-libstdc++-33-3.2.3-69.el6.x86_64.rpm
yum install unixODBC unixODBC-devel
rpm -q --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" \
binutils \
compat-libstdc++-33 \
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 \
numactl \
unixODBC \
unixODBC-devel \
| grep "not installed" | grep -v grep | awk '{print "yum install -y " $2 }'
编辑hosts文件
[root@linux2 ~]# cat /etc/hosts
127.0.0.1 linux2 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@linux1 ~]# cat /etc/hosts
127.0.0.1 linux1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
配置/etc/sysctl.conf
cat >> /etc/sysctl.conf <<EOF
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 = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
EOF
sysctl -p
配置/etc/security/limits.conf
cat >> /etc/security/limits.conf <<EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
EOF
配置/etc/pam.d/login
cat >> /etc/pam.d/login <<EOF
session required pam_limits.so
EOF
配置/etc/profile
cat >> /etc/profile <<EOF
if [ \$USER = "oracle" ]; then
if [ \$SHELL = "/bin/ksh" ];then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
EOF
配置/etc/csh.login
cat >> /etc/csh.login <<EOF
if( \$USER == "oracle" ) then
limit maxproc 16384
limit descriptors 65536
umask 022
endif
EOF
添加用户、配置目录
/usr/sbin/groupadd oinstall
/usr/sbin/groupadd dba
/usr/sbin/useradd -g oinstall -G dba oracle
passwd oracle
mkdir -p /u01/app/oracle/product/11.2.0/dbhome_1
chown -R oracle:oinstall /u01/app/
chmod -R 775 /u01/app/
配置环境变量
su - oracle
vim .bash_profile
ORACLE_BASE=/u01/app/oracle
ORACLE_SID=demo
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_BASE ORACLE_SID ORACLE_HOME
export PATH=$PATH:$ORACLE_HOME/bin
. .bash_profile
关闭防火墙和selinux
chkconfig iptables off
service iptables stop
vim /etc/selinux/config 修改SELINUX=disabled ,重启后生效
setenforce 0 ,不需要重启,立即生效,只限于当次
创建/etc/oraInst.loc文件,内容如下
[oracle@linux1 database]$ cat /etc/oraInst.loc
inventory_loc=/u01/app/oraInventory
inst_group=oinstall
安装的过程中缺少很多必要的32bit的包 【参考--没有解决问题】
cd /etc/yum.repos.d
wget http://public-yum.oracle.com/public-yum-ol6.repo
yum install
参考<http://www.itpub.net/thread-1613588-1-1.html>
下载安装过程中提示的缺少的包
http://yunpan.cn/QCP6uRyqsCx5m 提取码 b6c7
rpm -ivh *.rpm --force --nodeps
cd $ORACLESOFT_mount/database
./runInstaller -silent -debug -force \
FROM_LOCATION=/software/database/stage/products.xml \
oracle.install.option=INSTALL_DB_SWONLY \
UNIX_GROUP_NAME=oinstall \
INVENTORY_LOCATION=/u01/app/oraInventory \
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 \
ORACLE_HOME_NAME="Oracle111" \
ORACLE_BASE=/u01/app/oracle \
oracle.install.db.InstallEdition=EE \
oracle.install.db.isCustomInstall=false \
oracle.install.db.DBA_GROUP=dba \
oracle.install.db.OPER_GROUP=dba \
DECLINE_SECURITY_UPDATES=true
. /u01/app/oraInventory/orainstRoot.sh
. /u01/app/oracle/product/11.2.0/dbhome_1/root.sh
配置监听
[oracle@linux1 admin]$ vim listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linux1)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
Lsnrctl start
在节点2上建立静态监听 |
|
[oracle@linux2 admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linux2)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = standby)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = standby)
)
)
[oracle@linux2 admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
STANDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linux2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = standby)
)
)
DEMO =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.122.101)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = demo)
)
)
主节点建库
[oracle@linux1 ~]$ vim /home/oracle/dbca.rsp
[GENERAL]
RESPONSEFILE_VERSION = "11.2.0"
OPERATION_TYPE = "createDatabase"
[CREATEDATABASE]
GDBNAME = "demo"
SID = "demo"
TEMPLATENAME = "General_Purpose.dbc"
SYSPASSWORD = "oracle"
SYSTEMPASSWORD = "oracle"
SYSMANPASSWORD = "oracle"
DBSNMPPASSWORD = "oracle"
DATAFILEDESTINATION ="/u01/app/oracle/oradata"
STORAGETYPE=FS
CHARACTERSET = "AL32UTF8"
DATABASETYPE = "MULTIPURPOSE"
AUTOMATICMEMORYMANAGEMENT = "FALSE"
TOTALMEMORY =8192
[oracle@linux1 ~]$ dbca -silent -responseFile /home/oracle/dbca.rsp
复制数据库文件
1% 已完成
3% 已完成
11% 已完成
18% 已完成
26% 已完成
37% 已完成
正在创建并启动 Oracle 实例
40% 已完成
45% 已完成
50% 已完成
55% 已完成
56% 已完成
60% 已完成
62% 已完成
正在进行数据库创建
66% 已完成
70% 已完成
73% 已完成
85% 已完成
96% 已完成
100% 已完成
有关详细信息, 请参阅日志文件 "/u01/app/oracle/cfgtoollogs/dbca/demo/demo.log
[oracle@linux1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Thu Jul 24 00:59:43 2014
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select instance_name from V$instance;
INSTANCE_NAME
----------------
demo
主库上登录备库测试
[oracle@linux1 admin]$ sqlplus sys/oracle@standby as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Thu Jul 24 01:43:48 2014
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
主库上准备
开启归档日志
mkdir /u01/app/arch/demo -p
SQL> create pfile='/home/oracle/initdemo.ora' from spfile;
alter system set log_archive_dest_1='location=/u01/app/arch/demo' scope=spfile;
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
archive log list;
启用force logging;
ALTER DATABASE FORCE LOGGING;
如果没有密码文件,则创建密码文件
orapwd file=orapwdemo password=oracle entries=5
创建备用 redo 日志
SQL> col file_name for a50
SQL> set pagesize 1000 linesize 400
SQL> select lf.group#,member as file_name,bytes/1024/1024 as size_MB from v$logfile lf,v$log l where lf.group#=l.group# order by group#;
GROUP# FILE_NAME SIZE_MB
---------- -------------------------------------------------- ----------
1 /u01/app/oracle/oradata/demo/redo01.log 50
2 /u01/app/oracle/oradata/demo/redo02.log 50
3 /u01/app/oracle/oradata/demo/redo03.log 50
注意:创建的standby redo大小需要和主库的redo大小保持一致
SQL> col member for a50
SQL> select type,member from v$logfile;
alter database add standby logfile group 4 ('/u01/app/oracle/oradata/demo/standby04.log') size 50m;
alter database add standby logfile group 5 ('/u01/app/oracle/oradata/demo/standby05.log') size 50m;
alter database add standby logfile group 6 ('/u01/app/oracle/oradata/demo/standby06.log') size 50m;
alter database add standby logfile group 7 ('/u01/app/oracle/oradata/demo/standby07.log') size 50m;
修改参数
修改之前做一次spfile备份
create pfile='/home/oracle/demoinit.ora' from spfile;
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(demo,standby)';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/arch/demo VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=demo';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=standby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby';
alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;
alter system set FAL_SERVER=standby;
alter system set FAL_CLIENT=demo;
alter system set DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/standby/','/u01/app/oracle/oradata/demo/' scope=spfile;
alter system set LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/standby/','/u01/app/oracle/oradata/demo/' scope=spfile;
******修改主库和备库的listener.ora 和 tnsname.ora******
这部分 已经在上面做过了
备库上准备
复制主库的密码文件
scp orapwdemo 192.168.122.102:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/
mv orapwdemo orapwstandby
建立归档路径
mkdir /u01/app/arch/standby -p
因为我是先建立了standby实例,然后直接删除了datafiles 所以目录 不用重新建立
创建一个临时intistandby.ora
[oracle@linux2 ~]$ cat intistandby.ora
*.db_name='demo'
*.db_unique_name='standby'
*.diagnostic_dest='/u01/app/oracle'
*.open_cursors=300
*.processes=150
*.db_block_size=8192
启动到nomount状态
SQL> startup nomount pfile='/home/oracle/intistandby.ora';
ORACLE instance started.
Total System Global Area 217157632 bytes
Fixed Size 2211928 bytes
Variable Size 159387560 bytes
Database Buffers 50331648 bytes
Redo Buffers 5226496 bytes
Rman duplicate
在主库上sys/oracle as sysdba登录
sqlplus sys/oracle@standby as sysdba
测试登录成功
主库上使用rman duplicat from active database 进行建立dataguard
run {
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate channel prmy3 type disk;
allocate channel prmy4 type disk;
allocate auxiliary channel stby type disk;
duplicate target database for standby from active database
spfile
parameter_value_convert 'demo','standby'
set db_unique_name='standby'
set db_file_name_convert='/u01/app/oracle/oradata/demo/','/u01/app/oracle/oradata/standby/'
set log_file_name_convert='/u01/app/oracle/oradata/demo/','/u01/app/oracle/oradata/standby/'
set control_files='/u01/app/oracle/oradata/standby/control01.ctl'
set log_archive_max_processes='5'
set fal_client='standby'
set fal_server='demo'
set standby_file_management='AUTO'
set log_archive_config='dg_config=(demo,standby)'
set log_archive_dest_1 = 'LOCATION=/u01/app/arch/standby VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby'
set log_archive_dest_2='service=demo ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=demo'
;
}
在备库上打开realtime-apply
SQL> alter database recover managed standby database using current logfile disconnect from session;
**********************************************************************************************
select open_mode from v$database;
因为有备重做日志,所以可以加using current logfile 语句,实现实时应用
select sequence#, applied from v$archived_log where applied='YES' order by sequence#;
alter database recover managed standby database cancel;
alter database open read only;
alter database recover managed standby database using current logfile disconnect from session;
**********************************************************************************************
yum groupinstall "X Window System"
yum groupinstall "Desktop"