评论

收藏

[Oracle] oracle 19c RAC部署ADG手顺

数据库 数据库 发布于:2021-06-30 15:23 | 阅读数:261 | 评论:0

  oracle 19c RAC部署ADG手顺
  hostnamectl set-hostname 19c-adg
  1、DG基础环境
  ORACLE 主库RAC,scan-IP:111.111.111.155  SID:leodb   db_name='leodb'     db_unique_name=leodb 主机名:rac19c-01、rac19c-02
  ORACLE 备库          IP:111.111.111.150  SID:leodbadg   db_name='leodb'    db_unique_name=leodbadg 主机名:19c-adg
  

  主库归档目录物理路径:
  SQL> archive log list;
  Database log mode       Archive Mode
  Automatic archival       Enabled
  Archive destination       USE_DB_RECOVERY_FILE_DEST
  Oldest online log sequence     7
  Next log sequence to archive   8
  Current log sequence       8
  

  +DATA/LEODB/FLASHBACK
  

  主库DATAFILE物理路径
  +DATA/LEODB/DATAFILE
  

  主库REDO物理路径
  +DATA/LEODB/ONLINELOG
  

  主库字符集
  SQL> select * from nls_database_parameters;
  

  PARAMETER       VALUE
  ------------------------------ --------------------
  NLS_NCHAR_CHARACTERSET       AL16UTF16
  NLS_CHARACTERSET       AL32UTF8
  

  

  2、修改主库配置文件initLEODB.ora
  这里现在数据库里修改相关的参数,与DG的参数就只与几个参数相关,大概就是日志,文件的位置的转换,GAP的处理,其实GAP已经会自动的处理,不过这里我们还是介绍配置FAL_SERVER,FAL_CLIENT参数。在修改完之后重新创建了pfile文件
  先创建spfile,修改完后重新生成pfile
  SQL> alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(leodb,leodbadg)';
  SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=leodb';
  SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=leodbadg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=leodbadg';
  SQL> alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;
  SQL> alter system set FAL_SERVER=leodbadg;
  SQL> alter system set FAL_CLIENT=leodb;
  SQL> alter system set DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/leodbadg/','+DATA/LEODB/DATAFILE/' scope=spfile;
  SQL> alter system set LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/leodbadg/','+DATA/LEODB/ONLINELOG/' scope=spfile;
  SQL> alter system set STANDBY_FILE_MANAGEMENT=AUTO;
  SQL> create pfile='/home/oracle/initLEODB.ora' from spfile;
  DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT参数必须重启数据库生效
  下面是备份的主库pfile文件
  leodb1.__data_transfer_cache_size=0
  leodb2.__data_transfer_cache_size=0
  leodb1.__db_cache_size=398458880
  leodb2.__db_cache_size=394264576
  leodb1.__inmemory_ext_roarea=0
  leodb2.__inmemory_ext_roarea=0
  leodb1.__inmemory_ext_rwarea=0
  leodb2.__inmemory_ext_rwarea=0
  leodb1.__java_pool_size=0
  leodb2.__java_pool_size=0
  leodb1.__large_pool_size=4194304
  leodb2.__large_pool_size=4194304
  leodb1.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
  leodb2.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
  leodb1.__pga_aggregate_target=264241152
  leodb2.__pga_aggregate_target=264241152
  leodb1.__sga_target=792723456
  leodb2.__sga_target=792723456
  leodb1.__shared_io_pool_size=29360128
  leodb2.__shared_io_pool_size=29360128
  leodb1.__shared_pool_size=343932928
  leodb2.__shared_pool_size=348127232
  leodb1.__streams_pool_size=0
  leodb2.__streams_pool_size=0
  leodb1.__unified_pga_pool_size=0
  leodb2.__unified_pga_pool_size=0
  *.audit_file_dest='/u01/app/oracle/admin/leodb/adump'
  *.audit_trail='db'
  *.cluster_database=TRUE
  *.compatible='19.0.0'
  *.control_files='+DATA/LEODB/CONTROLFILE/current.261.1056020927'
  *.db_block_size=8192
  *.db_create_file_dest='+DATA'
  *.db_file_name_convert='/u01/app/oracle/oradata/leodbadg/','+DATA/LEODB/DATAFILE/'
  *.db_name='leodb'
  *.db_recovery_file_dest_size=10737418240
  *.db_recovery_file_dest='+DATA'
  *.diagnostic_dest='/u01/app/oracle'
  *.dispatchers='(PROTOCOL=TCP) (SERVICE=leodbXDB)'
  *.fal_client='LEODB'
  *.fal_server='LEODBADG'
  family:dw_helper.instance_mode='read-only'
  leodb1.instance_number=1
  leodb2.instance_number=2
  *.local_listener='-oraagent-dummy-'
  *.log_archive_config='DG_CONFIG=(leodb,leodbadg)'
  *.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=leodb'
  *.log_archive_dest_2='SERVICE=leodbadg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=leodbadg'
  *.log_archive_dest_state_1='ENABLE'
  *.log_file_name_convert='/u01/app/oracle/oradata/leodbadg/','+DATA/LEODB/ONLINELOG/'
  *.nls_language='AMERICAN'
  *.nls_territory='AMERICA'
  *.open_cursors=300
  *.pga_aggregate_target=252m
  *.processes=300
  *.remote_login_passwordfile='exclusive'
  *.sga_target=756m
  *.standby_file_management='AUTO'
  leodb2.thread=2
  leodb1.thread=1
  leodb1.undo_tablespace='UNDOTBS1'
  leodb2.undo_tablespace='UNDOTBS2'
  

  

  3、备库服务器配置一般和主库存在差异,建议先在备库根据实际环境创建一个数据库(开启归档和闪回,db_name、字符集要与主库一致),然后保留pfile删库,修改备库的配置文件:initLEODBADG.ora
  create pfile='/home/oracle/initLEODBADG.ora' from spfile;
  下面是新增了dataguard部分的参数后的pfile文件
  leodbadg.__data_transfer_cache_size=0
  leodbadg.__db_cache_size=2013265920
  leodbadg.__inmemory_ext_roarea=0
  leodbadg.__inmemory_ext_rwarea=0
  leodbadg.__java_pool_size=0
  leodbadg.__large_pool_size=16777216
  leodbadg.__oracle_base='/u01/app/oracle/'#ORACLE_BASE set from environment
  leodbadg.__pga_aggregate_target=922746880
  leodbadg.__sga_target=2734686208
  leodbadg.__shared_io_pool_size=134217728
  leodbadg.__shared_pool_size=553648128
  leodbadg.__streams_pool_size=0
  leodbadg.__unified_pga_pool_size=0
  *.audit_file_dest='/u01/app/oracle/admin/leodbadg/adump'
  *.audit_trail='db'
  *.compatible='19.0.0'
  *.control_files='/u01/app/oracle/oradata/leodbadg/control01.ctl','/u01/app/oracle/fast_recovery_area/leodbadg/control02.ctl'
  *.db_block_size=8192
  *.db_name='leodb'
  *.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
  *.db_recovery_file_dest_size=8256m
  *.diagnostic_dest='/u01/app/oracle'
  *.dispatchers='(PROTOCOL=TCP) (SERVICE=leodbadgXDB)'
  *.log_archive_format='%t_%s_%r.dbf'
  *.nls_language='AMERICAN'
  *.nls_territory='AMERICA'
  *.open_cursors=300
  *.pga_aggregate_target=868m
  *.processes=300
  *.remote_login_passwordfile='EXCLUSIVE'
  *.sga_target=2604m
  *.undo_tablespace='UNDOTBS1'
  #For data guard
  *.db_unique_name='leodbadg'
  *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(leodb,leodbadg)'
  *.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/fast_recovery_area/leodbadg/archivelog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=leodbadg'
  *.LOG_ARCHIVE_DEST_2='SERVICE=leodb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=leodb'
  *.FAL_SERVER=leodb
  *.FAL_CLIENT=leodbadg
  *.DB_FILE_NAME_CONVERT='+DATA/LEODB/DATAFILE/','/u01/app/oracle/oradata/leodbadg/'
  *.LOG_FILE_NAME_CONVERT='+DATA/LEODB/ONLINELOG/','/u01/app/oracle/oradata/leodbadg/'
  *.STANDBY_FILE_MANAGEMENT=AUTO
  

  创建相关目录
  mkdir -p /u01/app/oracle/admin/leodbadg/adump
  mkdir -p /u01/app/oracle/oradata/leodbadg/
  mkdir -p /u01/app/oracle/fast_recovery_area/leodbadg/archivelog
  

  注意:
  1、Linux端配置的pfile文件中,所有windows的路径都要用大写,因为在duplication过程中,windows端都是按照大写路径来传输的!
  如果用小写或者大小写混合,则无法识别路径,会有问题!
  2、在duplication过程中,虽然是在主库操作,但是datafile和logfile的路径转换却认的是备库的pfile文件中的转换路径!
  db_file_name_convert参数
  

  因为rac是用的asm的,standby用的文件系统,目录不一样,需要转换。
  所以了解了一下log_file_name_convert、db_file_name_convert参数。
  1> 参数的作用:
  db_file_name_convert 主数据库和备用数据库的数据文件转换目录对映(如果两数据库的目录结构不一样),
  如果有多个对映,逐一指明对映关系。
  2> 该参数应该配置在主还是备?
  备库,这个参数不能动态配置,需要重启实例,如果在主库配置需要重启主库,对于不能停的数据库是不允许的。
  3> 该参数的写法:
  db_file_name_convert='+RACDATA/racdb/datafile/','/oradata/standby/'
  

  

  

  6、  修改主库的listener.ora文件(grid用户执行) ------如果要主备切换演练,则要做。如果不做切换后的新备库无法从新主库接收数据。
  1节点添加如下内容:
  SID_LIST_LISTENER =
  (SID_LIST =
  (SID_DESC = 
  (GLOBAL_DBNAME = leodb) 
  (ORACLE_HOME = /u01/app/19.3.0/grid) 
  (SID_NAME = leodb1) 
  )
  )
  2节点添加如下内容:
  SID_LIST_LISTENER =
  (SID_LIST =
  (SID_DESC = 
  (GLOBAL_DBNAME = leodb) 
  (ORACLE_HOME = /u01/app/19.3.0/grid) 
  (SID_NAME = leodb2) 
  )
  )
  重启监听
  srvctl stop listener -n rac19c-01
  srvctl stop listener -n rac19c-02
  srvctl start listener -n rac19c-01
  srvctl start listener -n rac19c-02
  

  

  7、  修改主库的tnsnames.ora文件
  增加DG备库连接串(RAC环境所有节点都要配置,oracle用户进入ORACLE_HOME/network/admin)
  LEODBADG =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 19c-adg)(PORT = 1521))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = leodbadg)
  )
  )
  

  

  8、  修改备库的listener.ora文件
  

  # listener.ora Network Configuration File: /u01/app/oracle//product/19.3.0/dbhome_1/network/admin/listener.ora
  # Generated by Oracle configuration tools.
  

  LISTENER =
  (DESCRIPTION_LIST =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 19c-adg)(PORT = 1521))
  )
  )
  

  SID_LIST_LISTENER =
  (SID_LIST =
  (SID_DESC =
  (GLOBAL_DBNAME = leodbadg)
  (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)
  (SID_NAME = leodbadg)
  )
  )
  

  --SID_LIST_LISTENER部分为新增内容,GLOBAL_DBNAME不能少,少的了话后面主库rman连接过来会报错,本次就发生了这个问题,补上这一行就好了。
  --重启监听
  

  

  

  

  9、  修改备库的tnsnames.ora文件
  LEODBADG =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 19c-adg)(PORT = 1521))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = leodbadg)
  )
  )
  

  LISTENER_IPDBADG =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 19c-adg)(PORT = 1521))
  

  LEODB =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = rac19c-scan)(PORT = 1521))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = leodb)
  )
  )
  LEODB1 =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = rac19c-01)(PORT = 1521))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = leodb)
  (INSTANCE_NAME = leodb1)
  )
  )
  

  LEODB2 =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = rac19c-02)(PORT = 1521))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = leodb)
  (INSTANCE_NAME = leodb2)
  )
  )
  

  orapwd file=orapwLEODBADG password=oracle(为防止密码问题导致无法访问,最好直接把主库的orapw文件拷贝过来然后更名orapwSID就可以了)
  12c rac密码文件默认存放在asm上,不再是$ORACLE_HOME/dbs目录下
  ASMCMD> pwcopy +DATA/LEODB/PASSWORD/pwdleodb.256.1056020773 /home/grid/orapwLEODBADG
  copying +DATA/LEODB/PASSWORD/pwdleodb.256.1056020773 -> /home/grid/orapwLEODBADG
  然后拷贝到备机$ORACLE_HOME/dbs目录下
  

  主库和备库都启动监听:lsnrctl start
  

  10、设置服务器为归档模式
  

  alter database archivelog
  

  设置主数据库为日志强制写状态
  

  alter database force logging;
  

  查看状态日志强制写状态为YES
  select log_mode,force_logging from v$database;
  LOG_MODE     FORCE_LOGGING
  ------------ ---------------------------------------
  ARCHIVELOG   YES
  

  11、查看主库数据库的日志组个数与大小,因为我们创建standby日志组的个数是每个节点日志组个数+1再与thread的积,size不能小于原日志文件的大小。
  

  SQL> select group#,THREAD#,bytes/1024/1024 from v$log;
  

  GROUP#    THREAD# BYTES/1024/1024
  ---------- ---------- ---------------
   1    1  200
   2    1  200
   3    2  200
   4    2  200
  

  SQL> select member from v$logfile;
  

  MEMBER
  --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  +DATA/LEODB/ONLINELOG/group_2.263.1056020931
  +DATA/LEODB/ONLINELOG/group_1.262.1056020931
  +DATA/LEODB/ONLINELOG/group_3.266.1056021723
  +DATA/LEODB/ONLINELOG/group_4.267.1056021725
  

  

  12、创建standby日志组,位置与原日志组相同的路径。创建完成后查询是否成功  创建6个standby 日志组
  

  SQL> alter database add standby logfile '+DATA/LEODB/ONLINELOG/standby01.log' size 200m;
  

  alter database add standby logfile '+DATA/LEODB/ONLINELOG/standby01.log' size 200m;
  alter database add standby logfile '+DATA/LEODB/ONLINELOG/standby02.log' size 200m;
  alter database add standby logfile '+DATA/LEODB/ONLINELOG/standby03.log' size 200m;
  alter database add standby logfile '+DATA/LEODB/ONLINELOG/standby04.log' size 200m;
  alter database add standby logfile '+DATA/LEODB/ONLINELOG/standby05.log' size 200m;
  alter database add standby logfile '+DATA/LEODB/ONLINELOG/standby06.log' size 200m;
  

  col member for a60
  select group#,status,type,member from v$logfile;
  

  13、使用之前创建的initLEODBADG.ora文件启动备库到nomount状态
  

  SELECT ROUND(SUM(BYTES)/1024/1024/1024,2)||'GB' FROM DBA_DATA_FILES;
  源环境datafile大小:1.87GB 
  

  duplicate开始
  在主库上通过rman进行复制备库(注意在这一步之前必须退出备库的所有连接,否则会报错)
  rman target sys/oracle auxiliary sys/oracle@LEODBADG
  configure device type disk parallelism 10;
  

  rman>duplicate target database for standby nofilenamecheck from active database;
  

  ---也可使用下面语句(主库开3个通道,备库开3个通道):
  run
  { 
  allocate channel c1 type disk;
  allocate channel c2 type disk;
  allocate channel c3 type disk;
  allocate AUXILIARY channel c4 type disk;
  allocate AUXILIARY channel c5 type disk;
  allocate AUXILIARY channel c6 type disk;
  duplicate target database for standby nofilenamecheck from active database;
  release channel c1;
  release channel c2;
  release channel c3;
  release channel c4;
  release channel c5;
  release channel c6;
  }
  

  备库查询
  SQL> select open_mode from v$database;
  OPEN_MODE
  --------------------
  MOUNTED
  

  把备库启动到open only下面。并recover
  SQL> alter database open read only;
  为了方便实时查询,恢复自动恢复状态。
  在备库上启动数据库到恢复管理模式,并开始准备从主库接受归档日志的传输。
  SQL> alter database recover managed standby database using current logfile disconnect from session;
  

  

  13.主库执行:
  select process,status from v$managed_standby;
  查看进程,看有没有LNS进程
  SQL> select process,status from v$managed_standby;
  

  PROCESS    STATUS
  ------------------ ------------------------
  DGRD   ALLOCATED
  ARCH   CLOSING
  DGRD   ALLOCATED
  ARCH   CLOSING
  ARCH   CLOSING
  ARCH   CLOSING
  LNS   OPENING
  DGRD   ALLOCATED
  LNS   WRITING
  

  9 rows selected.
  

  验证standby能否接收日志传输
  

  

  在备库端查看其角色是否已经是physical standby
  select DATABASE_ROLE,open_mode from v$database;
  DATABASE_ROLE OPEN_MODE
  ---------------- --------------------
  PHYSICAL STANDBY READ ONLY WITH APPLY
  

  在主库查看其角色
  select DATABASE_ROLE,open_mode from gv$database;
  DATABASE_ROLE    OPEN_MODE
  ---------------- --------------------
  PRIMARY          READ WRITE
  PRIMARY          READ WRITE
  

  在备库查看data guard为哪种日志接受方式
  select process,client_process,sequence#,status from v$managed_standby;
  

  检查当前备库的模式
  select protection_mode from v$database;
  PROTECTION_MODE
  --------------------
  MAXIMUM PERFORMANCE
  

  主备库检查当前最大sequence
  select max(sequence#) from v$archived_log;
  

  在备库查看日志的队列情况
  select thread#,sequence#,creator,applied,first_time,next_time from v$archived_log order by sequence#;
  

  THREAD#  SEQUENCE# CREATOR APPLIED   FIRST_TIM NEXT_TIME
  ---------- ---------- ------- --------- --------- ---------
  1         28 ARCH    YES       21-MAY-21 21-MAY-21
  1         29 ARCH    YES       21-MAY-21 21-MAY-21
  2         44 ARCH    YES       21-MAY-21 21-MAY-21
   
  其中applied字段应该为YES,如果为NO就使用偶redo没有些过来,需要关注了。
  

  在主库进行强制归档
  ALTER SYSTEM ARCHIVE LOG CURRENT;
  alter system switch logfile;
  

  检查下两边的日志同步情况
  select thread#,sequence#,creator,applied,first_time,next_time from v$archived_log where applied='YES' order by sequence#;
  这里注意,在备库创建之前的redo归档是不会写过来的。
  

  

  查看DG是否正常工作
  select dest_id,error,status from v$archive_dest where dest_id=2;
  SQL> select dest_id,error,status from v$archive_dest where dest_id=2;
  

  DEST_ID ERROR     STATUS
  ---------- ----------------------------------------------------------------- ------------------
   2     VALID
  

  error值为空则正常
  

  主库操作
  --创建用户
  create user dgtest identified by oracle;
  grant dba to dgtest;
  

  

  

  --创建表
  create table dgtest (
  id number(9) not null primary key,
  classname varchar2(40) not null
  );
  insert into dgtest values(28,'class one');
  commit;
  

  

  

  刚才在sys用户下也创建了这个表,可以一起查看
  为区分,分别插入两条数据:
  sys用户:
  insert into dgtest values(27,'sys one');
  

  dgtest用户:
  insert into dgtest values(29,'detest one');
  

  在备库执行查询:
  select * from sys.dgtest;
  select * from dgtest.dgtest;
  

  drop tablespace dfeip including contents and datafiles;
  drop user dgtest cascade
  


  
关注下面的标签,发现更多相似文章