目录
一、前期准备
1.1 工具和软件
1.2 网络规划
二、创建虚拟服务器
2.1 新建虚拟机
2.2 安装操作系统
2.6 克隆standby虚拟机
三、oracle install
一、配置环境变量
1、主机名配置
2、网络配置
3、配置Hosts文件
4、关闭防火墙
5、关闭 Selinux
6、配置 yum 源
7、安装依赖包
8、配置 hosts
9、创建用户和组
10、创建安装目录
11、配置 avahi-deamon
12、关闭透明大页和 numa
13、配置系统参数文件
14、配置系统资源限制
15、配置 pam.d
16、配置 /dev/shm
17、配置oracle用户环境变量
二、安装 Oracle 软件
四, 创建和配置数据库
五,standby 搭建
1. standby server 配置
2. scp pfile / orapwd file
3. 修改standby pfile
4. 创建standby 文件夹
5. configure listener
6. configure tnsnames.ora
7. rman duplicate standby
8. open standby and check
六, primary , standby switchover
七, 日常检查
八, 常见错误处理
九, standby 不同步处理
类型 | 名称 | 版本 |
---|---|---|
物理机OS | Windows 7 旗舰版 | 6.1 |
虚拟机软件 | VMware® Workstation 15 Pro | 15.5.0 build-14665864 |
虚拟机OS | Red Hat Enterprise Linux release 8.2 (Ootpa) | 8.2 x86-64 |
数据库软件 | Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 | 19.3.0.0.0 |
IP:192.168.72.10
hostname:rhel64
打开VMware® Workstation 15 Pro,新建虚拟机,选择典型模式;
选择“稍后安装操作系统”
在客户机操作系统类型里选择“Red Hat Enterprise Linux 8 64位”
输入虚拟机存储路径和名称
新增磁盘,此处新增磁盘将作为'/'根目录分区使用,因为后面会将Oracle Home单独挂载,所以无需太大,我这里分配了50GB,并选择了“将虚拟磁盘存储为单个文件”,寻求最佳性能;
基本硬件配置完成,接下来点击自定义硬件
内存:4096M
注:Oracle自12C开始,将单节点最低推荐内存设置为8GB,8GB以下也能安装,但是会出现警告提示;
电脑内存限制, 分配4G
CPU:1个×2核
可以根据自己的物理机CPU来分配,核心多就多分配点,虚拟化引擎建议勾选;
CD/DVD光驱选项里,添加操作系统镜像
rhel-8.2-x86_64-dvd.iso
大小:7.85G
主要的来了,网络适配器选项里,将原有网卡1更改为“仅主机模式”,然后再新增一张NAT模式的网卡2;
当然,你直接添加一张“仅主机模式”的网卡也可以,但是我习惯把Public网卡设置为网卡1,这样后期维护的时候不容易混淆,纯属个人习惯。
配置虚拟机
然后关闭自定义硬件界面,点击完成
(你问我为什么刚才自定义硬件的时候不添加,因为自定义硬件时没有添加硬盘的选项,必须关闭后再点击编辑设置才会出现,我也不知道为什么,垃圾VMware)
磁盘类型建议选择SCSI或者NVMe(如果虚拟机存储路径在NVMe SSD上的话会出现NVMe选项,否则无脑选SCSI)
选择创建新磁盘,大小分配60GB,仍然选择存储为单个文件,不建议勾选“立即分配所有空间”;
选择磁盘存储路径
最后完整的配置是这样的,总共修改了红框中的这几个选项,其他的选项随意配置。别忘记点击“确定”保存修改。
选择安装语言,可以在左侧下拉到最后选择中文,但因为一些众所周知的原因,我建议选择英语进行安装;
点击Continue进入配置界面
语言支持(Language Support)务必勾选英语,如果需要中文的话可以在左侧下拉找到中文,同时勾选;
时区根据实际所在的地区选择,中国大陆地区选择亚洲/上海,选择好以后顺便将时间调整正确(在生产环境中,时区和时间是极其重要的参数,勾选错误可能导致业务端产生不可挽回的后果);
接下来又到了重中之重,在软件选择(Software Selection)中,强烈建议非高玩选择Server with GUI,并在右侧附加选项里,勾选Performance Tools、Legacy UNIX Compatibility、Development Tools、Graphical Administration Tools和System Tools,尤其是Legacy UNIX Compatibility、Development Tools这两项,可以让你在后面安装Oracle时省事很多;
然后在网络&主机名(Network&Hostname)中,配置好HOSTNAME,并点击apply,网卡及IP地址暂不配置,因为后面要用到克隆,配置IP以后再克隆反而不方便;
最终配置概要如下,点击Begin Installation开始安装;
最后配置root密码,配置完成后点击左上角done(两次)返回
进度条滚完后,会提示你重启操作系统,然后会出现一个License协议,点击accepted接受,然后Finish Configuration
至此,操作系统安装完成,点击Next,最后会让你创建一个普通用户,随便创建一个就好;
pwd:oracle
root 用户登录
将前文准备好的虚拟机环境,使用VMware自带的克隆功能,克隆两台。
弹出克隆向导,按下列图示依次点击下一页
2.6 配置网络
root/ocm 123
设置oracle服务自启
https://www.cnblogs.com/LILEIYAO/p/17116648.html
在64位 OL8 或者 RHEL8 上安装 Oracle 19c 数据库和客户端的要求 (Doc ID 2696989.1)
https://blog.51cto.com/u_15735145/5546615
hostnamectl set-hostname rhel64
nmcli connection show nmcli connection modify ens160 ipv4.addresses 192.168.72.100/24 ipv4.gateway 192.168.72.1 ipv4.method manual autoconnect yes nmcli connection up ens160
[root@rhel64 ~]# ifconfig
ens160: flags=4163
inet 192.168.72.100 netmask 255.255.255.0 broadcast 192.168.72.255
192.168.72.10 rhel64
[root@rhel64 ~]# cat <
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service
vi /etc/selinux/config
SELINUX=disabled
[root@rhel64~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@rhel64 ~]# cat /etc/selinux/config
mkdir /mnt/dvd
df -h
mount /dev/sr0 /mnt/dvd
cp /etc/yum.repos.d/redhat.repo /etc/yum.repos.d/redhat.repo.bak
vi /etc/yum.repos.d/redhat.repo
[rhel6.4]
name=rhel6.4
baseurl=file:///mnt/dvd/BaseOS
gpgcheck=0
enabled=1
[AppStream]
name=AppStream
baseurl=file:///mnt/dvd/AppStream
enabled=1
gpgcheck=0
yum clean all
yum list
--18. 安装rpm包
bc
binutils
elfutils-libelf
elfutils-libelf-devel
fontconfig-devel
glibc
glibc-devel
ksh
libaio
libaio-devel
libXrender
libX11
libXau
libXi
libXtst
libgcc
libnsl
librdmacm
libstdc++
libstdc++-devel
libxcb
libibverbs
make
smartmontools
sysstat
rpm --query --queryformat "%{NAME}-%{VERSION}.%{RELEASE} (%{ARCH})\n" bc binutils elfutils-libelf elfutils-libelf-devel
fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libXrender libX11 libXau libXi libXtst libgcc libnsl librdmacm
libstdc++ libstdc++-devel libxcb libibverbs make smartmontools sysstat
yum install bc binutils elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel
libXrender libX11 libXau libXi libXtst libgcc libnsl librdmacm libstdc++ libstdc++-devel libxcb libibverbs make smartmontools
sysstat
--libaio
cd /mnt/dvd/BaseOS/Packages
[root@rhel64 Packages]# yum install libaio-devel-0.3.112-1.el8.x86_64.rpm
--AppStream
ksh --app
libstdc++-devel
cd /mnt/dvd/AppStream/Packages
[root@rhel64 Packages]# ls |grep ksh
ksh-20120801-254.el8.x86_64.rpm
[root@rhel64 Packages]# ls |grep libstdc++-
libstdc++-devel-8.3.1-5.el8.x86_64.rpm
[root@rhel64 Packages]# yum install ksh-20120801-254.el8.x86_64.rpm
[root@rhel64 Packages]# yum install gcc-toolset-9-libstdc++-devel-9.2.1-2.2.el8.x86_64.rpm
--other rpm
yum install unixODBC
yum install openssh
## 创建 oinstall dba oper 组
more /etc/oraInst.loc
grep oinstall /etc/group
/usr/sbin/groupadd -g 54321 oinstall
##Creating Operating System Privileges Groups
/usr/sbin/groupadd -g 54322 dba
/usr/sbin/groupadd -g 54323 oper
/usr/sbin/groupadd -g 54324 backupdba
/usr/sbin/groupadd -g 54325 dgdba
/usr/sbin/groupadd -g 54326 kmdba
/usr/sbin/groupadd -g 54327 asmdba
/usr/sbin/groupadd -g 54330 racdba
## 创建 oracle 用户
/usr/sbin/useradd -u 54321 -g oinstall -G dba,oper,asmdba,backupdba,dgdba,kmdba,racdba oracle
## 修改oracle 用户
/usr/sbin/usermod -u 54321 -g oinstall -G dba,oper,asmdba,backupdba,dgdba,kmdba,racdba oracle
## 修改 oracle 用户密码为 oracle
echo oracle | passwd --stdin oracle
## 检查 oracle 用户
id oracle
mkdir -p /u01/app/oraInventory
chown oracle:oinstall /u01/app/oraInventory
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/
官方文档建议关闭 avahi-deamon 和 NOZEROCONF
systemctl stop avahi-daemon.socket
systemctl stop avahi-daemon.service
systemctl disable avahi-daemon.service
systemctl disable avahi-daemon.socket
##关闭 NOZEROCONF
[root@rhel64 oracle]# echo "NOZEROCONF=yes" >>/etc/sysconfig/network
官方建议关闭透明大页和 numa,有一些 BUG 是由于这两个特性导致,并且打开对数据库的性能提升不大,因此直接关闭即可。
RHEL 7 可以直接修改内核来关闭透明大页和 numa:
12.1
方法1:
sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg [root@orcl19c soft]# grub2-mkconfig -o /boot/grub2/grub.cfg
透明大页和 numa 的配置需要重启主机生效,这里先不重启,等全部配置完之后再重启主机!
12.2 方法2:
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
cd /etc/default/
vi grub
GRUB_CMDLINE_LINUX="crashkernel=auto resume=UUID=b950d831-976e-4832-9ac5-d69e7586634d rd.lvm.lv=rhel/root rhgb quiet numa=off
transparent_hugepage=never"
grub2-mkconfig -o /boot/grub2/grub.cfg
cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
12.3. 关闭NUMA
#查看default 的grub 的entry
[root@rhel64 ~]# grubby --default-kernel
/boot/vmlinuz-4.18.0-193.el8.x86_64
#查看default grub的具体信息
[root@rhel64 ~]# grubby --info /boot/vmlinuz-4.18.0-193.el8.x86_64
index=0
kernel="/boot/vmlinuz-4.18.0-193.el8.x86_64"
args="ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet
transparent_hugepage=never $tuned_params"
root="/dev/mapper/rhel-root"
initrd="/boot/initramfs-4.18.0-193.el8.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (4.18.0-193.el8.x86_64) 8.2 (Ootpa)"
id="46ca3114911f4c528cfc0b50547dd2c6-4.18.0-193.el8.x86_64"
#更新args , 添加numa=off的参数
[root@rhel64 ~]# grubby --args=numa=off /boot/vmlinuz-4.18.0-193.el8.x86_64
no action specified
# 确认numa=off加入default grub中
[root@rhel64 ~]# grubby --info /boot/vmlinuz-4.18.0-193.el8.x86_64
#重启服务器
reboot
确认numa已经被禁用了
12.设置系统参数
修改内核参数
shmall 大于等于 shmmax 的值,以页为单位 /proc/sys/kernel/shmall
shmmax 物理内存大小的 1/2,以 bytes 为单位 /proc/sys/kernel/shmmax
##shmall's Calculation formula: physical memory 4G:(4*1024*1024*1024)/4096=1048576
##shmmax's Calculation formula: physical memory 4G:(4/2)*1024*1024*1024 -1=2147483647
[root@asm01 oracle]# cat >> /etc/sysctl.d/sysctl.conf <
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1048576
kernel.shmmax = 2147483647 #内存的50%, 以字节为单位
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
EOF
[root@asm01 oracle]# sysctl -p
--13. 修改资源限制 oracle soft nproc 2047 --2. set shm mount -o remount,size=4G /dev/shm su - oracle vi .bash_profile 18、设置OS运行级别 systemctl get-default 19、调整SWAP 依次执行以下命令,创建swap分区并挂载 [root@eita1 ~]# dd if=/dev/zero of=/swapfile bs=1M count=3072 20、数据库磁盘 --4. disk fdisk /dev/nvme0n2 创建u01目录,并将nvme0n2p1挂载至u01 [root@eita1 ~]# mkdir /u01 21、 Setting UDP and TCP Kernel Parameters Manually 23、设置network vi /etc/sysconfig/network 24、oracle limit 1. check OS --24. get oracle install soft [root@rhel64 ~]# /usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs/ cd / #注意从12C开始,oracle的安装文件(解压出来的所有文件)必须放在ORACLE_HOME目录下,本例是/u01/app/oracle/product/19.3.0/dbhome_1 [oracle@rhel64 database]$ /u01/app/database/perl/bin/perl: error while loading shared libraries: libnsl.so.1: cannot open http://digops.cc/posts/56682/ 5.该如何解决libnsl.so.1找不到的问题? 通过yum安装libnsl --1. create db [oracle@rhel64 admin]$ dbca --2. listener 配置listenner.ora sqlnet.ora tnsnames.ora的配置 cd /u19/app/oracle/product/19.2.0/dbhome_1/network/admin touch listenner.ora touch sqlnet.ora touch tnsnames.ora 分别将不同的配置文件进行填写 oracle@rhel64 admin]$ vi listener.ora SID_LIST_LISTENER= [oracle@rhel64 admin]$ vi tnsnames.ora 3. 启动监听器 lsnrctl start 4. test orcl db [oracle@rhel64 ~]$ sqlplus sys/oracle@orcl as sysdba check datafile, controlfile, logfile --6. db auto shutdown 由于上一步配置了listenner.ora,所以监听器启动可以启动我们配置的实例syc 1. set net card net card UUID primary server cd $ORACLE_HOME/dbs scp initorcl.ora [email protected]:/u01/app/oracle/product/19.3.0/dbhome_1/dbs/initorclst.ora scp orapworcl [email protected]:/u01/app/oracle/product/19.3.0/dbhome_1/dbs/orapworclst [oracle@rhel64st ~]$ cd $ORACLE_HOME/dbs oracle@rhel64st dbs]$ ls #dg #standby [oracle@rhel64st dbs]$ mkdir -p /u01/app/oracle/oradata/flash_recovery_area [oracle@rhel64st dbs]$ export ORACLE_SID=orclst LISTENER = SID_LIST_LISTENER= orcl= orclst= rman target sys/oracle@orcl auxiliary sys/oracle@orclst duplicate target database for standby from active database nofilenamecheck; SQL> alter database open; SQL> select name,open_mode,database_role from v$database; NAME OPEN_MODE DATABASE_ROLE --primary --secondary --dg startup --5.4 convert primary to secondary --step 4, 5, 6 --5.7 convert secondary to primary shutdown immediate; --5.8 check both --failover prepare step --failover --error 4 , 5 使用rman恢复缺失的日志 run { allocate channel c1 type 'sbt_tape'; allocate channel c2 type 'sbt_tape'; allocate channel c3 type 'sbt_tape'; allocate channel c4 type 'sbt_tape'; send 'NB_ORA_SERV=ynnbumaster, NB_ORA_CLIENT=gxr2db04dr'; restore archivelog from sequence 441 thread 1; release channel c1; release channel c2; release channel c3; release channel c4; } 重启MRP进程 开启实时同步 alter database recover managed standby database using current logfile disconnect from session; 这个时候MRP进程是起来的。 应用之后,检查ADG同步状态 SQL> select 'Primary :' "DB Role",thread#,max(sequence#) from v$archived_log where standby_dest='NO' group by thread# union select 'Standby :' "DB Role",thread#,max(sequence#) from v$archived_log where standby_dest='YES' and applied='YES' group by thread# order by thread#;
[root@asm01 oracle]# cat >> /etc/security/limits.conf <
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
oracle soft memlock 3145728
oracle hard memlock 3145728
EOF15、配置 pam.d
14. 设置PAM
[root@asm01 oracle]# cat >> /etc/pam.d/login <
EOF
--session required pam_limits.so
session required /lib64/security/pam_limits.so16、配置 /dev/shm
df -h /dev/shm
vi /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=4G 0 017、配置oracle用户环境变量
echo $SHELL
vi .bash_profile
umask 022
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=/u01/app/oracle/product/19.3.0/dbhome_1/bin:$PATH
systemctl set-default graphical.target
[root@eita1 ~]# free -h
[root@eita1 ~]# mkswap /swapfile
[root@eita1 ~]# swapon /swapfile
[root@eita1 ~]# ll /dev/nvm*
n p 1 enter enter enter w
[root@eita1 ~]# mkfs -t xfs /dev/nvme0n2p1
[root@eita1 ~]# mount /dev/nvme0n2p1 /u01
[root@eita1 ~]# vi /etc/fstab
/dev/nvme0n2p1 /u01 xfs defaults 0 0
cat /proc/sys/net/ipv4/ip_local_port_range
echo 9000 65500 > /proc/sys/net/ipv4/ip_local_port_range
restart the network
nmcli networking off && nmcli networking on
NETWORKING=yes
HOSTNAME=rhel64
GATEWAY=192.168.72.1
vi /etc/profile
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65535
fi
fi
cat /etc/redhat-release
uname -r
grep MemTotal /proc/meminfo
grep SwapTotal /proc/meminfo
df -h /tmp
free
uname -m
Error -107 cannot open connection!
--get oracle install soft
umount /mnt/hgfs
/usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs/
vmare setup share folder
cd /mnt/hgfs/oraclesoft/19c
cp LINUX.X64_193000_db_home.zip /u01/app/
mkdir soft
scp LINUX.X64_193000_db_home.zip 192.168.72.10:/soft/
unzip LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.3.0/dbhome_1
chown -R oracle:oinstall /u01/app/oracle/product/19.3.0/dbhome_1
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1
unzip 安装包.zip chown -R oracle:ointall 目录 chmod -R 775 目录
cd 目录
mv * /u01/app/oracle/product/19.3.0/dbhome_1二、安装 Oracle 软件
--oracle login
cd /u01/app/oracle/product/19.3.0/dbhome_1
[oracle@DATABASE db_1]$ export CV_ASSUME_DISTID=RHEL7.6
./runInstaller &
shared object file: No such file or directory
有两种方法可以解决:
yum install libnsl
通过修改软链接方式进行欺骗
在没有yum源的情况下可以考虑此方法
[root@rhel64 soft]# cd /lib64
[root@rhel64 lib64]# ln -s libnsl.so.2.0.0 libnsl.so.1
--run root.sh
[root@rhel64 /]# /u01/app/oraInventory/orainstRoot.sh
[root@rhel64 /]# /u01/app/oracle/product/19.3.0/dbhome_1/root.sh四, 创建和配置数据库
dbca create acp1 db
[oracle@rhel64 admin]$ vi sqlnet.ora
NAMES.DIRECTORY_PATH=(TNSNAMES,EZCONNECT)
LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.72.10)(PORT=1521))
)
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=salesdb.mycompany)
(SID_NAME=sid1)
(ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1)
)
)
orcl=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.72.10)(PORT=1521)
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=orcl)
)
)
[oracle@rhel64 ~]$ export ORACLE_SID=orcl
[oracle@rhel64 ~]$ sqlplus / as sysdba
SQL> select name from v$datafile;
SQL> select name from v$controlfile;
SQL> select member from v$logfile;
--5. db autostart
-slient install
https://blog.csdn.net/u010080562/article/details/122709155五,standby 搭建
1. standby server 配置
close rhel64st
generate new card
rhel64: 00:50:56:2A:45:F8
rhel64st:00:50:56:38:4D:F42. scp pfile / orapwd file
3. 修改standby pfile
init.ora initorclst.ora orapworcl
[oracle@rhel64st dbs]$ vi initorclst.ora
[oracle@rhel64st dbs]$ cat initorclst.ora
orcl.__data_transfer_cache_size=0
orcl.__db_cache_size=603979776
orcl.__inmemory_ext_roarea=0
orcl.__inmemory_ext_rwarea=0
orcl.__java_pool_size=16777216
orcl.__large_pool_size=16777216
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=637534208
orcl.__sga_target=939524096
orcl.__shared_io_pool_size=50331648
orcl.__shared_pool_size=234881024
orcl.__streams_pool_size=0
orcl.__unified_pga_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orclst/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/u01/app/oracle/oradata/ORCLST/control01.ctl','/u01/app/oracle/oradata/ORCLST/control02.ctl'
*.db_block_size=8192
*.db_name='orcl'
*.db_recovery_file_dest_size=16106127360
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.memory_target=1500m
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
DB_UNIQUE_NAME=orclst
LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,orclst)'
LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orclst'
LOG_ARCHIVE_DEST_2='SERVICE=orcl ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
FAL_SERVER=orcl
DB_FILE_NAME_CONVERT='/ORCL/','/ORCLST/'
LOG_FILE_NAME_CONVERT='/ORCL/','/ORCLST/'
STANDBY_FILE_MANAGEMENT=AUTO4. 创建standby 文件夹
[oracle@rhel64st dbs]$ mkdir -p /u01/app/oracle/admin/orclst/adump /u01/app/oracle/oradata/ORCLST/
[oracle@rhel64st dbs]$ sqlplus / as sysdba
SQL> startup nomount;
5. configure listener
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.72.202)(PORT=1521))
)
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=orclst)
(SID_NAME=orclst)
(ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1)
)
)
~
~ 6. configure tnsnames.ora
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.72.201)(PORT=1521)
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=orcl)
)
)
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.72.202)(PORT=1521)
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=orclst)
)
)
7. rman duplicate standby
8. open standby and check
SQL> recover managed standby database using current logfile disconnect from session;
--------- -------------------- ----------------
ORCL READ ONLY WITH APPLY PHYSICAL STANDBY
六, primary , standby switchover
SQL> alter database commit to switchover to primary with session shutdown;
七, 日常检查
--dg check 3 3 3 3
--1. instance mode
select instance_name,status from v$instance;
--2. db mode
select name,open_mode from v$database;
--3. protection mode
select name,database_role,protection_mode,protection_level from v$database;
--4. log parameter
show parameter log_archive_dest_2
--5. log applied
select sequence#,applied from v$archived_log order by sequence#;
--6. log process status
select process,status from v$managed_standby;
--7.dg status
select message_num,message from v$dataguard_status;
--8. switchover status
select switchover_status from v$database;
--9. log gap status
select status,gap_status from v$archive_dest_status ;
--1. force logging
select name,force_logging from v$database;
--2. log file path
select dest_name, status ,error from v$archive_dest;
--1. log gap
select * from v$archive_gap;
--dg shutdown 4 5 4 4 5
--1 check log primary ,standby
archive log list
--primary ,standby
--2. listener stop
lsrctl stop
--3. primary db stop
shutdown immediate;
--4. standby db stop
select name,open_mode from v$database;
alter database recover managed standby database cancel;
shutdown immediate;
--1. primary db, listener start
startup
lsnrctl start
--2. standby db, listener start
startup or startup mount
lsnrctl start
--3. log apply
alter database recover managed standby database using current logfile disconnect from session;
--4. log archive primary
alter system archive log current;
--5. check both log
archive log list;
--5. primary, secondary -switchover
--switchover is plan , no data loss, switchover again
--5.1 primary , secondary status
select status from v$instance;
select open_mode vrom v$database;
--5.2 switchover role and status primary =active
select name,database_role,switchover_status from v$database;
--5.3 switchover role and status secondary=standby to primary
select name,database_role,switchover_status from v$database;
ALTER DATABASE SWITCHOVER TO CHICAGO VERIFY;
alter database commit to switchover to physical standby with session shutdown;
--5.5 startup secondary to mount and check database_role
alter database recover managed standby database cancel;
shutdown immediate;
startup mount;
select name,database_role,switchover_status from v$database; --primary
--5.6 startup primary to mount
startup nomount;
alter database mount standby database;
alter database recover managed standby database disconnect from session
select name,database_role,switchover_status from v$database;
alter database recover managed standby database disconnect from session;
select name,database_role,switchover_status from v$database;
alter database commit to switchover to primary;
select name,database_role,switchover_status from v$database;
startup;
alter system switch logfile;
select name,database_role,switchover_status from v$database;
archive log list;
--1. on primary ,if can be mount ,send redo to target standby , if can't be mount skip this step
alter system flash redo to target_db_name;
--2. check target standby new archive number ,check if consistent with primary , if not scp no receive archive log
select unique thread# as thread,max(sequence#) over(partition by thread#) as last from v$archived_log;
--3. check target standby gap , scp missing archive log
select thread#,log_sequence#,high_sequence# from v$archive_gap;
--4. register lost archive file
alter database register physical logfile 'filespec1';
--1. stop standby log apply
alter database recover managed standby database cancel;
--2. finish log apply
alter database recover managed standby database finish;
or
alter database recover managed standby database finish force;
--3. check standby status
select switchover_status from v$database;
--4. convert standby to primary
alter database commit to switchover to primary with session shutdown;
--5. open new primary
alter database open;
--6. check new primary status
select name,open_mode ,database_role from v$database;
--1. ora-01111 add datafile error
--2. ora-01031 insufficient privileges error , recreate password file on primary and standby
--3. ora-03113 archived log error
--4. ora-16191 primary log shipping client not logged on standby,recreate password file on primary and standby
--log gap
--1. no archive log space
--2. network slow
--3. no start dg listener
--4. lost log
--5. dg down八, 常见错误处理
九, standby 不同步处理
先停止应用日志,恢复丢失的日志,重新开启应用日志。gap信息查看,所有节点restore,查看节点缺少哪些号,然后再去每个节点restore一遍,弄完重新同步一下,然后开启实时应用。
recover managed standby database cancel;