设为首页 收藏本站
查看: 760|回复: 0

[经验分享] Oracle 12c dataguard云上挖坑记--为某机场贵宾业务部署oracle 12c到云端

[复制链接]

尚未签到

发表于 2018-9-21 11:46:44 | 显示全部楼层 |阅读模式
  项目需求
  据称现有环境为多节点RAC,管理成本高,主要体现在没有专业技术人家对基础设施进行维护。迁移到云上以后,基础设施维护就节省掉了。而且后边容量扩充易如反掌,远程维护之类也比物理环境去现场操作方便许多。
  但在云上,oracle RAC实现的两个前提条件--共享存储及心跳网络,不被正式支持,因此要在云上部署oracle RAC用于生产环境,不是一个好的解决方案。经过多轮讨论,一致同意在百度云部署单实例oracle 12c,以dataguard方式来保护数据可用性。
  当然,相对与RAC,单实例的系统负载能力要差很多;同样是两个节点,RAC两节点是同时对外提供读写服务,而单实例dataguard,只有一台设备对外提供服务,而另一台只能做备用,与主库进行数据同步而已。考虑到实际业务访问量不大的情况,这样做也在可接受范围。
  基础设施
  两台云主机,临时绑定公网ip,20M独享带宽。
  资源配置为:cpu 8core,内存32G,系统盘50G,云盘1000G。
  云主机默认没有swap,因此用这1000G云盘的部分做swap,其余用于安装目录及数据目录。

  操作系统版本已经有别人选好,版本为CentOS>  曾经在阿里云部署了几套oracle 11g,用的centos 7,在执行正式安装指令./runInstaller 时,多要一步操作,即以oracle帐号帐号执行 export DISPLAY=:1,不然无法进行下一步。具体参考我以前的文章“阿里云部署oracle 11g”,连接地址为http://blog.51cto.com/sery/2107701 。
  软件使用oracle 12c,有正式授权,让我自己去官网下载。这还真费事,先下载到自己的个人电脑(不能直接用wget,需要输入用户名及密码验证—也许我不懂怎么在命令行拼接这个下载的url),再上传到云主机。接近4G的文件,下载、上传花了太多时间,唉!
  oracle安装前的准备
  主要步骤有:准备交换分区及数据分区、修改主机名、修改系统相关配置及依赖包、准备桌面环境。
  ◎准备准备交换分区及数据分区
  ◆准备交换分区
  fdisk /dev/vdb
  mkswap /dev/vdb1
  swapon /dev/vdb1
  Fdisk操作过程中,分区代码选“82”,大小为18G。执行完上述操作后,用命令free –m检查是否生效。
DSC0000.jpg

  由上图可知,交换分区确实被加载到系统。为了让交换分区随系统开机加载,需要修改文件/etc/fstab,加入的内容等描述完加数据分区以后,一并贴出。
  ◆准备数据分区
  fdisk /dev/vdb
  mkfs.ext4 /dev/vdb2
  mkdir /u01
  mount /dev/vdb2 /u01
  为使挂接永久生效,需要对文件/etc/fstab做修改,加入交换分区及数据分区以后,/etc/fstab文件的内容如下所示:
DSC0001.jpg

  修改完以后,重启一下系统,用df –h 及 free –m 执行一下,看是否自动挂载交换分区及数据分区。
  ◎修改主机名
  云服务器的主机名,总是莫名其妙,看起来很是不爽。改主机名,有两个目的,一个是登录系统便于辨识,另外一个原因是服务器之间通讯用短词比ip地址省事。需要注意的是,操作系统版本不一样,修改主机名的方式也可能不同。比如centos 7,就有一个/etc/hostname文件来关联。对于centos 6及以前版本,与主机名有关系的文件大概有:/etc/sysconfig/network,/etc/sysconfig/network-scriptes/ifcfg-eth0,/etc/hosts。有时候出问题,很可能就在这些文件里主机名的设定,建议挨个检查。下面只列出两个云主机的/etc/hosts内容:
  [root@oradb162 ~]# more   /etc/hosts
  127.0.0.1   localhost localhost.localdomain localhost4   localhost4.localdomain4
  ::1         localhost localhost.localdomain   localhost6 localhost6.localdomain6
  #192.168.0.4 instance-umns7cw3-2   instance-umns7cw3-2.novalocal
  192.168.0.4   oradb162
  192.168.0.5   oradb95
  [root@oradb95 ~]# more   /etc/hosts
  127.0.0.1   localhost localhost.localdomain localhost4   localhost4.localdomain4
  ::1         localhost localhost.localdomain   localhost6 localhost6.localdomain6
  192.168.0.5 oradb95 oradb95.novalocal
  192.168.0.4 oradb162
  改完后,如果执行hostname没见效果,再检查一遍与主机名相关文件的设置,然后重启系统试试。主机名生效后,用设定的名称代替ip地址,两机互ping测试网络连通性。
  ◎准备桌面环境
  大部分情况下,我都用远程桌面方式安装oracle,这有助于把控整个安装过程,直观了解安装进展及发生的问题。桌面环境由xwindow及vncserver组成,默认情况下,云主机是没有安装这两个工具。多次实践证明,vncserve配合xwindow为最佳组合,安装完就能用,不蓝屏或灰屏。具体的安装步骤如下:
  yum groupinstall "X   Window System" "Desktop" -y
  yum install tigervnc-server   -y
  安装完这两个工具以后,只需要启动vncserver,设置好用户名和密码,注意输出,用客户端连接的时候需要使用。
DSC0002.jpg

  连接成功以后,没有黑屏灰屏,恭喜!
  ◎修改系统相关配置及依赖包
  步骤比较繁杂,因为经常要安装部署oracle,我就写了一个脚本,该脚本在11g及12c都有效,其内容为:
  [root@oradb95 ~]# more oracle_rep.bash
  #!/bin/bash
  #writed by sery 2012-05-16
  #########################################
  #install depending packages                       #
  #########################################
  yum install gcc* gcc-* gcc-c++-*   glibc-devel-* glibc-headers-* compat-libstdc* \
  libstdc* elfutils-libelf-devel*   libaio-devel* \
  sysstat* unixODBC-* pdksh-* ksh   compat-libcap1
  ########################################
  #add groups,user and create dir        #
  ########################################
  /usr/sbin/groupadd -g 501 oinstall
  /usr/sbin/groupadd -g 502 dba
  useradd -u 1000 -g oinstall -G dba   oracle
  mkdir /u01/app/
  mkdir -p /u01/app/oraInventory
  mkdir -p /u01/app/oracle
  chown -R oracle:oinstall /u01/app
  chmod -R 775 /u01/app
  ##############################################
  #modify    sysctl.conf                                    #
  ##############################################
  cat >> /etc/sysctl.conf    /etc/security/limits.conf   >/etc/pam.d/login
  ################################################
  # setting user oracle env                                   #
  ################################################
  cat >> /home/oracle/.bash_profile     SQL> select   count(*) from v$session;
  COUNT(*)
  ----------
  46
  如果得到如上的结果,可以认为一切正常。
  前边我强调过,oracle 默认系统表空间太小,需要调整。有两种方法:一种是sqlplus客户端进去执行alter 语句,另一种是em浏览器方式。其实都是去操纵那个sql语句而已。下边以图形方式来演示这个更改过程,看起来更直观一些.
DSC0003.jpg

  鼠标点左侧“+SYSTEM”,选中文件那行,如下图:
DSC0004.jpg

  点菜单“操作”下拉列表框,选“调整大小”项,弹出具体的操作框,如下两图所示:
DSC0005.jpg

DSC0006.jpg

  填写大小为2G,不急着确定,点“显示 SQL”,可得到实际sql语句如下:
  ALTER DATABASE DATAFILE   '/u01/app/oracle/oradata/GBDB/datafile/o1_mf_system_fl1mqhrq_.dbf' RESIZE 2G;
  瞧,是不是跟sqlplus敲代码的效果一样呢?默认是810M,现在点“确定”按钮是更改生效。到oracle数据库目录实际查看,看文件大小是否发生改变。
  [oracle@oradb162 datafile]$ cd /u01/app/oracle/oradata/GBDB/datafile/
  [oracle@oradb162 datafile]$ du -hs *
  551M    o1_mf_sysaux_fl1msk5v_.dbf
  2.1G      o1_mf_system_fl1mqhrq_.dbf
  2.3M    o1_mf_temp_fl1mw9p0_.tmp
  71M     o1_mf_undotbs1_fl1mtnct_.dbf
  5.1M    o1_mf_users_fl1mtojb_.dbf
  嘿嘿,没骗人呢,文件大小确实变化了。再用此方法,把辅助表空间调成1G的容量。
  Datagurd实现过程
  主备两机都需要操作,而且操作方法有差异,在描述中,我会特别标明,不至于让他人困惑。
  两台服务器的监听器随oracle 12c的安装已经自动配置完成,默认监听并没有生成文件,需要手动或者执行netca去生成。
  ◆主库的监听文件内容为:
  [oracle@oradb162 admin]$ pwd
  /u01/app/oracle/product/12.2.0/network/admin
  [oracle@oradb162 admin]$ more listener.ora
  # listener.ora Network Configuration   File: /u01/app/oracle/product/12.2.0/network/admin/listener.ora
  # Generated by Oracle configuration   tools.
  LISTENER =
  (DESCRIPTION_LIST =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = oradb162)(PORT = 1521))
  (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
  )
  )
  SID_LIST_LISTENER=
  (SID_LIST =
  (SID_DESC =
  (GLOBAL_DBNAME = gbdb)
  (ORACLE_HOME =/u01/app/oracle/product/12.2.0)
  (SID_NAME = gbdb)
  )
  )
  
  ◆备库的监听文件内容为:
  
  [oracle@oradb162 admin]$ pwd
  /u01/app/oracle/product/12.2.0/network/admin
  [oracle@oradb162 admin]$ more listener.ora
  # listener.ora Network Configuration   File: /u01/app/oracle/product/12.2.0/network/admin/listener.ora
  # Generated by Oracle configuration   tools.
  LISTENER =
  (DESCRIPTION_LIST =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = oradb95)(PORT = 1521))
  (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
  )
  )
  SID_LIST_LISTENER=
  (SID_LIST =
  (SID_DESC =
  (GLOBAL_DBNAME = gbdb)
  (ORACLE_HOME =/u01/app/oracle/product/12.2.0)
  (SID_NAME = gbdb)
  )
  )
  ◎配置本地命名服务
  两台服务器进行相同的操作。继续在vnc客户端,终端窗口以oracle帐号执行netca(开始用文本编辑器编写tnsname.ora文件,总是不行。比如第一行要定格,不要有空格等,书写要求太严。后用图形创建,创建完查看文件,即不出错,又了解实质)。鼠标选取第三项,如图所示:
DSC0007.jpg

  选取“add”点“Next”按钮,“Service Name”填“gbdb”,接着点几次“Next”,到填“Host name”这里填写“oradb162(与/etc/hosts设定相一致)”,如下图所示:
DSC0008.jpg

  配置完这个,再重复此操作,把oradb95给加上。执行完毕后,tnsname.ora的内容为:
  [oracle@oradb95 admin]$ more tnsnames.ora
  # tnsnames.ora Network Configuration   File: /u01/app/oracle/product/12.2.0/network/admin/tnsnames.ora
  # Generated by Oracle configuration   tools.
  ORADB162 =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = oradb162)(PORT = 1521))
  )
  (CONNECT_DATA =
  (SERVICE_NAME = gbdb)
  )
  )
  ORADB95 =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = oradb95)(PORT = 1521))
  )
  (CONNECT_DATA =
  (SERVICE_NAME =   gbdb)
  )
  )
  这样再也不用担心书写格式、写漏括号“)”啥的了。
  得检验这些设置有没有用,在两台服务器分别执行如下指令进行验证:
  [oracle@oradb95 admin]$ tnsping oradb95
  TNS Ping Utility for Linux: Version   12.2.0.1.0 - Production on 15-JUN-2018 12:08:46
  Copyright (c) 1997, 2016, Oracle.  All rights reserved.
  Used parameter files:
  Used TNSNAMES adapter to resolve the   alias
  Attempting to contact (DESCRIPTION =   (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oradb95)(PORT = 1521)))   (CONNECT_DATA = (SERVICE_NAME = oradb95)))
  OK   (0 msec)
  [oracle@oradb95 admin]$ tnsping oradb162
  TNS Ping Utility for Linux: Version   12.2.0.1.0 - Production on 15-JUN-2018 12:08:51
  Copyright (c) 1997, 2016, Oracle.  All rights reserved.
  Used parameter files:
  Used TNSNAMES adapter to resolve the   alias
  Attempting to contact (DESCRIPTION =   (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oradb162)(PORT = 1521)))   (CONNECT_DATA = (SERVICE_NAME = oradb162)))
  OK   (0 msec)
  
  ◎主库启用归档及force logging强制记录日志
  1、归档操作:检查主库是否处于归档,如果不是,则启用它,具体指令如下(启用要在mount下进行):
  SQL> archive   log list;
  Database   log mode              No Archive Mode
  Automatic   archival             Disabled
  Archive destination            USE_DB_RECOVERY_FILE_DEST
  Oldest online log sequence     11
  Current log sequence           13

  SQL>>
  Database>  SQL> archive   log list;
  Database   log mode              Archive Mode
  Automatic   archival             Enabled
  Archive destination            USE_DB_RECOVERY_FILE_DEST
  Oldest online log sequence     11
  Next log sequence to archive   13
  Current log sequence           13

  SQL>>
  Database>  2、force logging强制记录日志:先检查是否启用,如未则启用之(可在数据库open状态下执行),步骤如下:
  SQL> select   force_logging from v$database;
  FORCE_LOGGING
  ---------------------------------------
  NO

  SQL>>
  Database>  SQL> select   force_logging from v$database;
  FORCE_LOGGING
  ---------------------------------------
  YES
  ◎为备库准备控制文件
  在主库上执行如下操作,生成的文件存放到一个临时的位置,后边等其它文件都到齐后,再把它移动到合适的位置。我参考好多文档,都在创建者玩意,但实际上我用rman复制方式创建备库,根本就不需要这个控制文件。分析原因,应该是这样:备库以 startup nomount pfile 方式启动实例,只读取参数文件而已;主库以rman同时连主备库,以指令“duplicate target database”从主库复制所需文件,也包括了控制文件。

  SQL>>
  Database>  
  ◎主库创建standby redo log
  尽量与主库现有的日志文件大小相一致,创建的组不少于系统现有的。
  查当前日志组大小

  SQL> select   GROUP#,BYTES/1024/1024>
  GROUP#    >  ---------- ---------- ----------------   ---
  1        200 CURRENT          NO
  2        200 INACTIVE         YES
  3        200 INACTIVE         YES
  查存储路径
  SQL> select   MEMBER from v$logfile;
  MEMBER
  --------------------------------------------------------------------------------
  /u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_3_fl1mvv1j_.log
  /u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_3_fl1mvvkc_.log
  /u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_2_fl1mvv0q_.log
  /u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_2_fl1mvvfs_.log
  /u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_1_fl1mvty3_.log
  /u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_1_fl1mvvgd_.log
  6 rows selected.
  ###一个组两个成员,路径不同,大小内容完全一致。
  [root@oradb162 ~]# diff   /u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_3_fl1mvv1j_.log   /u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_3_fl1mvvkc_.log
  [root@oradb162 ~]# du   /u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_3_fl1mvvkc_.log
  204804    /u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_3_fl1mvvkc_.log
  [root@oradb162 ~]#   du /u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_3_fl1mvv1j_.log
  204804    /u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_3_fl1mvv1j_.log
  创建新的日志组,也存放在两个位置

  SQL>>
  Database>
  SQL>>
  Database>
  SQL>>
  Database>
  SQL>>
  Database>  
  验证所创建的组
  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
  
  ◎准备初始化参数文件
  主库上生成文件,复制到备库,然后两个参数文件都需要做修改,以符合实际需求。主库上对参数的修改,可以直接在sqlplus里执行alter语句,但这不太保险,一旦出错,容易给自己造成压力。建议修改参数文件前,做个原始备份,然后修改此参数文件。万一将来以此修改过的参数文件生成服务器参数文件(spfile)出现异常,备份的那个参数文件就是后悔药。
  ◆执行以下指令生成参数文件:
  SQL>   create pfile='/home/oracle/initgd.ora' from   spfile;
  File created.
  修改修改前做个原始备份
  [oracle@oradb162 ~]$ pwd
  /home/oracle
  [oracle@oradb162 ~]$cp   initgd.ora initgd.ora.bk20180617
  复制一份参数文件initgd.ini到备库服务器的/home/oracle目录,等待修改。
  ◆修改主库参数文件/home/oracle/initgb.ora
  在源文件的基础上增加如下内容(一行太长,有些行自动换行了,书写时请注意):
  *.db_unique_name='oradb162'
  *.fal_client='oradb162'
  *.fal_server='oradb95'
  *.log_archive_config='DG_CONFIG=(oradb162,oradb95)'
  *.log_archive_dest_1='LOCATION=/u01/app/oracle/fast_recovery_area/gbdb/   VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oradb162'
  *.log_archive_dest_2='SERVICE=oradb95   LGWR ASYNC VALID_FOR=(ALL_LOGFILES,PRIMARY_ROLES) DB_UNIQUE_NAME=oradb95'
  *.log_archive_dest_state_1='ENABLE'
  *.log_archive_dest_state_2='ENABLE'
  *.standby_file_management='AUTO'
  ◆准备库参数文件/home/oracle/initgb.ora
  从主库复制文件,用同样路径。把所需文件放在/home/oracle目录,一来没权限不足的问题,而来不会与其它数据文件混在一起,等dataguard运行起来以后,这些文件就基本不再使用,不干扰后期维护。
  备库参数文件/home/oracle/initgb.ora的内容如下,与主库不同的地方,特别用底色做了标记。
  [oracle@oradb95 ~]$ more initgb.ora
  gbdb.__data_transfer_cache_size=0
  gbdb.__db_cache_size=7918845952
  gbdb.__inmemory_ext_roarea=0
  gbdb.__inmemory_ext_rwarea=0
  gbdb.__java_pool_size=67108864
  gbdb.__large_pool_size=100663296
  gbdb.__oracle_base='/u01/app/oracle'#ORACLE_BASE   set from environment
  gbdb.__pga_aggregate_target=3388997632
  gbdb.__sga_target=10099884032
  gbdb.__shared_io_pool_size=536870912
  gbdb.__shared_pool_size=1442840576
  gbdb.__streams_pool_size=0
  *.audit_file_dest='/u01/app/oracle/admin/gbdb/adump'
  *.audit_trail='db'
  *.compatible='12.2.0'
  *.control_files='/u01/app/oracle/oradata/GBDB/controlfile/o1_mf_fl1mvrh4_.ctl','/u01/app/oracle/fast_recovery_area/gbdb/GBDB/controlfile
  controlfile/o1_mf_fl1mvrls_.ctl'
  *.db_block_size=8192
  *.db_create_file_dest='/u01/app/oracle/oradata'
  *.db_name='gbdb'
  *.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area/gbdb'
  *.db_recovery_file_dest_size=8016m
  *.diagnostic_dest='/u01/app/oracle'
  *.dispatchers='(PROTOCOL=TCP) (SERVICE=gbdbXDB)'
  *.local_listener='LISTENER_GBDB'
  *.open_cursors=300
  *.pga_aggregate_target=3209m
  *.processes=640
  *.remote_login_passwordfile='EXCLUSIVE'
  *.sga_target=9627m
  *.undo_tablespace='UNDOTBS1'
  *.db_unique_name='oradb95'
  *.fal_client='oradb95'
  *.fal_server='oradb162'
  *.log_archive_config='DG_CONFIG=(oradb162,oradb95)'
  *.log_archive_dest_1='LOCATION=/u01/app/oracle/fast_recovery_area/gbdb/   VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oradb95'
  *.log_archive_dest_2='SERVICE=oradb162 LGWR ASYNC   VALID_FOR=(ALL_LOGFILES,PRIMARY_ROLES) DB_UNIQUE_NAME=oradb162'
  *.log_archive_dest_state_1='ENABLE'
  *.log_archive_dest_state_2='ENABLE'
  *.standby_file_management='AUTO'
  两台云服务器(主备库)资源配置、操作系统版本、oracle软件、目录结构完全一样,因此不需要做日志和数据文件转换。书写参数文件一定要仔细认真,我在这里踩了个大坑,整个端午节都耗在上边了。
  参数文件里边有几个值,要特别留意。db_name、db_unique_name、service,该怎么填?与哪些项目想关联,是必须弄清楚的。
  (1)   db_name:主备库用同样的名称,这里用的值是gbdb,oracle系统账号环境变量.bash_profile里边定义。
  (2)   db_unique:主库与备库不同,主库定义为oradb162,备库为oradb95,与系统的/etc/hosts定义相同,也可以不同。也可以在oracle系统账号环境变量.bash_profile里边也设定一下。
  (3)   service:这个最容易引起混淆,个人认为,应该是从tnsname.ora取值,取的是那个net service name,不是代码块里边那个service(代码块顶头的那行,没有括号,而真正的service,使用相同的设置gbdb,与sid也设定得一样了)。
  我犯的低级错误就在参数文件的log_archive_dest_1这一行,因为这行很长,转换到下一行了,担心不是一个正行,因此使用了删除,未曾留心,把DB_UNIQUE_NAME=oradb162的字符“a”给删掉,变成DB_UNIQUE_NAME=ordb162,配置完以后,死活不能同步数据。查看oracle告警日志,有log1目标找不到的信息,一直以为是监听器监或者是是本地名称服务tnsnames设置的问题呢。Sqlplus执行 show parameter log_archive_dest能得到一些有用信息。
  ◆备库服务器创建所需目录
  创建这些目录的依据来自参数文件/home/oracle/initgb.ora,需逐个核对创建。
  1、 创建控制文件目录:
  [oracle@oradb95 ~]$ mkdir   /u01/app/oracle/oradata/GBDB/controlfile -p
  [oracle@oradb95 ~]$ mkdir   /u01/app/oracle/fast_recovery_area/gbdb/GBDB/controlfile -p
  2、 创建归档日志目录:
  [oracle@oradb95 ~]$mkdir /u01/app/oracle/fast_recovery_area/gbdb -p
  这步重复了,在创建控制文件目录时,已经创建过了。
  3、 创建审计文件目录:
  [oracle@oradb95 ~]$ mkdir -p /u01/app/oracle/admin/gbdb/adump
  ◆备库服务器准备密码文件及控制文件
  这两个文件都来自于主库服务器,直接同步或者复制过来,注意不要改变文件的属主,即这些文件的属主是oracle和oinstall。
  1、 根据参数文件的定义,我们需要把控制文件分别同步到目录(这个步骤其实是多此一举了)/u01/app/oracle/oradata/GBDB/controlfile/,/u01/app/oracle/fast_recovery_area/gbdb/GBDB/controlfile/。
  [oracle@oradb95 ~]$  cp gdbd.ctl /u01/app/oracle/oradata/GBDB/controlfile [oracle@oradb95 ~]$  cp gdbd.ctl   /u01/app/oracle/fast_recovery_area/gbdb/GBDB/controlfile/
  2、 复制数据库密码文件到目录/u01/app/oracle/product/12.2.0/dbs.
  [oracle@oradb95 ~]$ cp orapwgbdb /u01/app/oracle/product/12.2.0/dbs
  文件位于什么位置,一定要跟定义及oracle规定相符合。一些人写的文档,不做强调,一顿乱贴;在哪个机器操作,主机命名,模棱两可,给初学者带来很多麻烦和困扰。
  实际上,备库有参数文件和密码文件就够了。如果在执行数据库复制过程出现异常,极有可能是备库的目录没有被创建,根据提示创建就行。控制文件会自动被复制过来,因此无需手动搞一遍。
  ◎复制数据库到备库
  分五个步骤,有顺序地进行。
  ◆第一步:主库以mount参数启动实例:
  SQL> startup mount   pfile='/home/oracle/initgb.ora';
  ORACLE instance started.
  Total System Global Area 1.0100E+10 bytes

  Fixed>
  Variable>  Database Buffers         8086618112 bytes
  Redo Buffers               21381120 bytes
  Database mounted.
  参数文件有错的话,换成原始备份的那个,就可以恢复到正常状况,比直接sql里改参数要保险一些。
  ◆第二步,备库启动oracle实例。一定要安装好oracle软件,复制主库的密码文件到对应的位置,还有那个参数文件,位置随意,能读取就行。
  [oracle@oradb95 ~]$ sqlplus / as   sysdba

  SQL*Plus:>  Copyright (c) 1982, 2016, Oracle.  All rights reserved.

  Connected to an>  SQL> startup nomount   pfile='/home/oracle/initgb.ora';
  ORACLE instance started.
  Total System Global Area 1.0100E+10 bytes

  Fixed>
  Variable>  Database Buffers         8086618112 bytes
  Redo Buffers               21381120 bytes
  注意:主库是mount参数,备库是nomount。nomount不需要使用控制文件。
  ◆第三步,rman连主备库,这个是在主库上进行的操作:
  [oracle@oradb162 oradata]$rman target sys/Oradb_162@oradb162 auxiliary   sys/Oradb_162@oradb95

  Recovery Manager:>  Copyright (c) 1982, 2017, Oracle and/or its   affiliates.  All rights reserved.
  connected to target database: GBDB (DBID=2214703447,   not open)
  connected to auxiliary database: GBDB (not   mounted)
  注意:连接字串只有@后边的服务名不同,其它要一样哟。为了不引起混乱,也可以简化成“rman target /  auxiliary sys/Oradb_162@oradb95”。
  ◆第四步,复制数据库到备库,还是在主库执行呢,就在rman提示符里边。
  RMAN>duplicate target database   for standby from active database nofilenamecheck;
  ………大量输出,略…………………
  这一步是容易出问题的地方,要注意看输出,最可能的原因就是需要的目录没有手工创建。另外,如果跟我想法相同(主备目录结构相同、oracle sid也相同),那么用rman复制时把参数“nofilenamecheck”加上。
  ◆第五步,主库打开数据库。

  SQL>>
  Database>  ◎启动备库,使其与主库同步

  SQL>>
  Database>  复制完数据库以后,备库把自己切换成mount状态了,因此无需人为干涉。
  ◎验证主备同步状况
  暴力一点,主库上创建一个表空间,等待片刻,分别查看两边文件的生成情况。

  SQL> create tablespace   WUHUSER  datafile   ‘/u01/app/oracle/oradata/whcrm/wuhuser01.fbf’>  登录到到备库,查看目录,看是否自动生成数据文件。
  [oracle@oradb95 oradata]$ pwd
  /u01/app/oracle/oradata
  [oracle@oradb95 oradata]$ ls -al
  total 4194332
  drwxr-xr-x    4 oracle oinstall       4096 Jun   19 10:43 .
  drwxrwxr-x 10 oracle oinstall       4096 Jun 18 14:15 ..
  drwxr-xr-x    3 oracle oinstall       4096 Jun   18 22:17 gbdb
  drwxr-xr-x    3 oracle oinstall       4096 Jun   18 15:27 GBDB
  -rw-r-----  1 oracle oinstall 4294975488 Jun 19 13:19   wuhuser01.dbf
  同时也查看两边的oracle告警日志,做进一步核实。再增一法,主备库查归档情况。
  主库执行

  SQL>>
  System>  SQL> select   SEQUENCE#,FIRST_TIME,NEXT_TIME ,APPLIED from v$archived_log;
  …………………………省略若干…………………
  SEQUENCE# FIRST_TIM NEXT_TIME APPLIED
  ---------- --------- --------- ---------
  46   19-JUN-18 19-JUN-18 NO
  46   19-JUN-18 19-JUN-18 YES
  47   19-JUN-18 19-JUN-18 NO
  47   19-JUN-18 19-JUN-18 YES
  48   19-JUN-18 19-JUN-18 NO
  48 19-JUN-18 19-JUN-18 NO
  94 rows selected.
  备库执行
  select SEQUENCE#,FIRST_TIME,NEXT_TIME ,APPLIED   from v$archived_log;
  …………………………省略若干…………………
  SEQUENCE# FIRST_TIM NEXT_TIME APPLIED
  ---------- --------- --------- ---------
  37   19-JUN-18 19-JUN-18 YES
  38   19-JUN-18 19-JUN-18 YES
  39   19-JUN-18 19-JUN-18 YES
  40   19-JUN-18 19-JUN-18 YES
  41   19-JUN-18 19-JUN-18 YES
  42   19-JUN-18 19-JUN-18 YES
  43   19-JUN-18 19-JUN-18 YES
  44   19-JUN-18 19-JUN-18 YES
  45   19-JUN-18 19-JUN-18 YES
  46   19-JUN-18 19-JUN-18 YES
  47 19-JUN-18   19-JUN-18 YES
  SEQUENCE#   FIRST_TIM NEXT_TIME APPLIED
  ---------- --------- --------- ---------
  48 19-JUN-18 19-JUN-18   IN-MEMORY
  
  34 rows selected.
  
  Dataguard主备角色切换
  为保证可靠性,需要进行主库->备库,备库->主库;原主库->主库,原备库->备库。能变过去也能变回来,方为好手。
  切换有操作顺序,需先在主库操作,使其变成备库,然后才可以在备库进行切换。
  ◎主库切换成备库
  查看主库切换状态:
  SQL> select switchover_status   from v$database;
  SWITCHOVER_STATUS
  --------------------
  TO STANDBY
  主库变备库:

  SQL>>
  Database>  主库再启动实例(现在角色是standby备库了)
  SQL> startup   mount;
  ORACLE instance started.
  Total System Global Area 1.0100E+10 bytes

  Fixed>
  Variable>  Database Buffers         8086618112 bytes
  Redo Buffers               21381120 bytes
  Database mounted.

  SQL>>
  Database>  ◎备库变主库
  主库活着的话,执行“select switchover_status from v$database;”得到的输出为“NOT ALLOWED”。主库转换成备库完成后,再执行这个指令,这时输出为:
  SQL> select switchover_status   from v$database;
  SWITCHOVER_STATUS
  --------------------
  TO PRIMARY
  备库角色切换到主库

  SQL>>
  Database>  数据库打开,这步别忘记了。

  SQL>>
  Database>  重复执行上述步骤,又可以把角色还原。为防止意外,我强烈建议他们再增加一个云主机,把oracle安装好,一旦主库故障,立即把备库提升成主库,同时把预留的那台做数据库服务,使之成为新的standby备库。发生故障的主库修复以后,准备好oracle,留着备用。
  老田有话说
  最近受邀在51CTO博客专栏出版《负载均衡高手炼成记》,依托自己十余年的IT运维经验,以实际工作经验为基础,介绍不同场景下,负载均衡的实现方式,以及负载均衡的日常维护。
  本专栏适合于一直徘徊在运维初级未找到入佳境之门的运维工程师,也适合对负载均衡有兴趣了解和学习的技术爱好者。跟着老田学完这个系列课程,不仅学知识,更是涨薪、升职、进心仪公司的一大捷径!
  《负载均衡高手炼成记》
DSC0009.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-599382-1-1.html 上篇帖子: oracle-12336621 下篇帖子: oracle导入sql文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表