实战Oracle RAC迁移项目第1篇:RAC-RAC的DG搭建

最近有个项目要干,对现有生产的RAC进行一个改造

客户原有两个IBM P710小型机要替换成国产浪潮K1 power s914小型机。(额,国产化替代也算,不要问我为啥国产的机器和原来的小型机可以做ADG。。。)

开干前,我再用模拟环境还原一下整个项目的操作流程。由于整个过程比较长,我预计分3篇文章来分别对各个环境进行实验(我这实验环境没有小型机拉,用LINUX代替,原理1毛1样)

关于如何搭建RAC-单机的ADG可以参考我的另一篇文章:搭建记录:RAC到单实例搭建Dataguard

  那么先开始第1篇:RAC-RAC主备搭建

1、现有环境及目标

1.1、现有环境

现有模拟环境如下图所示

2台数据库RAC主机(两台主机心跳线直连),灾备机房有1个单机DG容灾,现有示意图如下:

1.2、项目目标计划

计划新增2节点RAC主机,替换原有两台数据库RAC。

替换之后原有两台RAC做为主中心备库,改用另1台存储数据进行存储(还需要做一次存储迁移)

改造步骤大致如下:

第1步,先在原有双活存储上划出1部分空间给新搭建的RAC点节;(这部分比较简单我就不实验了)

第2点,进行DATAGUARD迁移,主备切换,新的RAC节点切换成主节点,原有的变成备节点;(实验内容1)

第3步,修改IP地址,把原主RAC的IP(PUBLIC-IP/VIP/SCAN)都配置到新的RAC节点上;(实验内容2)

第4步,恢复RAC-RAC-单机DG环境;(实验内容2)

第5点,替换后的旧RAC主机切换存储,项目完成。(实验内容3)

改造之后如下图所示:

1.3、详细内容配置如下:

项目

RAC01

RAC02

单机DG

计划新增RAC1

计划新增RAC2

操作系统版本

redhat 6.9

redhat 6.9

redhat 6.9

redhat 6.9

redhat 6.9

数据库版本

11.2.0.4

11.2.0.4

11.2.0.4

11.2.0.4

11.2.0.4

GI版本

11.2.0.4

11.2.0.4

11.2.0.4

11.2.0.4

11.2.0.4

hostname

rac01

rac02

oracle

rac01

rac02

实例名

orcl1

orcl2

orcl

orcl1

orcl2

db_unique_name

primary

primary

orcldg

orclorcl

数据磁盘组路径

+DATA

+DATA

/u01/app/oracle/oradata/orcldg

+DATA

+DATA

归档路径

+DATA

+DATA

/u01/app/oracle/oradata/orcldg/archivelog

+DATA

+DATA

1.4、现有环境HOSTS文件

目前主库RAC的HOSTS

192.168.56.10 rac1
192.168.56.11 rac2
10.10.10.1 rac1-priv
10.10.10.2 rac2-priv
192.168.56.12 rac1-vip
192.168.56.13 rac2-vip
192.168.56.14 rac-scan

目前备库RAC的HOSTS

192.168.56.30 rac1
192.168.56.31 rac2
10.10.10.1 rac1-priv
10.10.10.2 rac2-priv
192.168.56.32 rac1-vip
192.168.56.33 rac2-vip
192.168.56.20 rac-scan

1.5、目前主库的数据文件路径

为了和真实环境下,我也按生产搞了一下(生产库之前不知道谁搭建的DG,把库的db_unique_name给改成了primary),显示的位置都比较奇怪。

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/system.256.1086172033
+DATA/orcl/datafile/sysaux.257.1086172033
+DATA/orcl/datafile/undotbs1.258.1086172033
+DATA/orcl/datafile/users.259.1086172033
+DATA/orcl/datafile/undotbs2.267.1086172237
+DATA/orcl/datafile/prod.273.1086172629
+DATA/primary/datafile/users.297.1147790221
+DATA/primary/datafile/users.331.1147792495
+DATA/primary/datafile/users.335.1147792667
+DATA/primary/datafile/users.338.1147793229
+DATA/primary/datafile/users.339.1147793259
+DATA/primary/datafile/users.353.1147806089
+DATA/primary/datafile/users.378.1147818285

13 rows selected.

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
+DATA/orcl/onlinelog/group_2.264.1086172199
+DATA/orcl/onlinelog/group_2.265.1086172203
+DATA/orcl/onlinelog/group_1.262.1086172195
+DATA/orcl/onlinelog/group_1.263.1086172197
+DATA/orcl/onlinelog/group_3.268.1086172281
+DATA/orcl/onlinelog/group_3.269.1086172283
+DATA/orcl/onlinelog/group_4.270.1086172287
+DATA/orcl/onlinelog/group_4.271.1086172289
+DATA/primary/onlinelog/group_11.274.1147787227
+DATA/primary/onlinelog/group_12.275.1147787229
+DATA/primary/onlinelog/group_13.276.1147787231
+DATA/primary/onlinelog/group_14.277.1147787233
+DATA/primary/onlinelog/group_15.278.1147787235
+DATA/primary/onlinelog/group_21.279.1147787239
+DATA/primary/onlinelog/group_22.280.1147787241
+DATA/primary/onlinelog/group_23.281.1147787243
+DATA/primary/onlinelog/group_24.282.1147787245
+DATA/primary/onlinelog/group_25.283.1147787247

18 rows selected.

2、搭建RAC-RAC的DG环境

2.1、RAC备库上创建数据库

在搭建好的11G RAC环境使用dbca创建数据库

dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbname orcl  -sid orcl -sysPassword oracle -systemPassword oracle -datafileDestination '+DATA' -redoLogFileSize 50 -recoveryAreaDestination '+DATA' -storageType ASM -asmsnmpPassword system  -emConfiguration NONE -diskGroupName 'DATA' -responseFile NO_VALUE -characterset ZHS16GBK -nationalCharacterSet AL16UTF16 -sampleSchema true -automaticMemoryManagement true -totalMemory 1024  -nodeinfo rac1,rac2
Copying database files
1% complete
3% complete
9% complete
15% complete
21% complete
27% complete
30% complete
Creating and starting Oracle instance
32% complete
36% complete
40% complete
44% complete
45% complete
48% complete
50% complete
Creating cluster database views
52% complete
70% complete
Completing Database Creation
73% complete
76% complete
85% complete
94% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/orcl/orcl.log" for further details. 

也可以用响应文件来弄,创建响应文件my.rsp内容如下

[CREATEDATABASE]
GDBNAME = "orcl"
SID = "orcl"
TEMPLATENAME = "General_Purpose.dbc"
SYSPASSWORD="oracle"
SYSTEMPASSWORD="oracle"
SYSMANPASSWORD="oracle"
EMCONFIGURATION = "NONE"
DATAFILEDESTINATION="+DATA"
RECOVERYAREADESTINATION="+DATA"
STORAGETYPE="ASM"
DISKGROUPNAME="DATA"
CHARACTERSET="ZHS16GBK"
NATIONALCHARACTERSET="AL16UTF16"
AUTOMATICMEMORYMANAGEMENT = "TRUE"
TOTALMEMORY = "800"
NODELIST = "rac1,rac2"

然后执行

dbca -createDatabase -silent -responseFile my.rsp

关于DBCA静默创建,我这里简单加一下帮助,大家可以自己研究一下

[oracle@rac1 trace]$ dbca -h
dbca  [-silent | -progressOnly | -customCreate] {<command> <options> }  | { [<command> [options] ] -responseFile  <response file > } [-continueOnNonFatalErrors <true | false>]
Please refer to the manual for details.
You can enter one of the following command:

Create a database by specifying the following parameters:
        -createDatabase
                -templateName <name of an existing template in default location or the complete template path>
                [-cloneTemplate]
                -gdbName <global database name>
                [-RACOneNode
                        -RACOneNodeServiceName  <Service name for the service to be created for RAC One Node database.>]
                [-policyManaged | -adminManaged <Policy managed or Admin managed Database, default is Admin managed database>]
                        [-createServerPool <To create ServerPool which will be used by the database to be created>]
                        [-force <To create serverpool by force when adequate free servers are not available. This may affect already running database>]
                        -serverPoolName <One serverPool Name in case of create server pool and comma separated list of serverPool name in case of use serverpool>
                        -[cardinality <Specify cardinality for new serverPool to be created, default is the number of qualified nodes>]
                [-sid <database system identifier prefix>]
                [-sysPassword <SYS user password>]
                [-systemPassword <SYSTEM user password>]
                [-emConfiguration <CENTRAL|LOCAL|ALL|NONE>
                        -dbsnmpPassword <DBSNMP user password>
                        -sysmanPassword <SYSMAN user password>
                        [-hostUserName <Host user name for EM backup job>
                         -hostUserPassword <Host user password for EM backup job>
                         -backupSchedule <Daily backup schedule in the form of hh:mm>]
                        [-centralAgent <Enterprise Manager central agent home>]]
                [-disableSecurityConfiguration <ALL|AUDIT|PASSWORD_PROFILE|NONE>
                [-datafileDestination <destination directory for all database files> |  -datafileNames <a text file containing database objects such as controlfiles, tablespaces, redo log files and spfile to their corresponding raw device file names mappings in name=value format.>]
                [-redoLogFileSize <size of each redo log file in megabytes>]
                [-recoveryAreaDestination <destination directory for all recovery files>]
                [-datafileJarLocation  <location of the data file jar, used only for clone database creation>]
                [-storageType < CFS | ASM >
                        [-asmsnmpPassword     <ASMSNMP password for ASM monitoring>]
                         -diskGroupName   <database area disk group name>
                         -recoveryGroupName       <recovery area disk group name>
                [-nodelist <node names separated by comma for the database>]
                [-characterSet <character set for the database>]
                [-nationalCharacterSet  <national character set for the database>]
                [-registerWithDirService <true | false>
                        -dirServiceUserName    <user name for directory service>
                        -dirServicePassword    <password for directory service >
                        -walletPassword    <password for database wallet >]
                [-listeners  <list of listeners to configure the database with>]
                [-variablesFile   <file name for the variable-value pair for variables in the template>]]
                [-variables  <comma separated list of name=value pairs>]
                [-initParams <comma separated list of name=value pairs>]
                [-sampleSchema  <true | false> ]
                [-memoryPercentage <percentage of physical memory for Oracle>]
                [-automaticMemoryManagement ]
                [-totalMemory <memory allocated for Oracle in MB>]
                [-databaseType <MULTIPURPOSE|DATA_WAREHOUSING|OLTP>]]

Configure a database by specifying the following parameters:
        -configureDatabase
                -sourceDB    <Database unique name for RAC Database and SID for Single Instance Database>
                [-sysDBAUserName     <user name  with SYSDBA privileges>
                 -sysDBAPassword     <password for sysDBAUserName user name>]
                [-registerWithDirService|-unregisterWithDirService|-regenerateDBPassword <true | false>
                        -dirServiceUserName    <user name for directory service>
                        -dirServicePassword    <password for directory service >
                        -walletPassword    <password for database wallet >]
                [-disableSecurityConfiguration <ALL|AUDIT|PASSWORD_PROFILE|NONE>
                [-enableSecurityConfiguration <true|false>
                [-emConfiguration <CENTRAL|LOCAL|ALL|NONE>
                        -dbsnmpPassword <DBSNMP user password>
                        -sysmanPassword <SYSMAN user password>
                        [-hostUserName <Host user name for EM backup job>
                         -hostUserPassword <Host user password for EM backup job>
                         -backupSchedule <Daily backup schedule in the form of hh:mm>]
                        [-centralAgent <Enterprise Manager central agent home>]]


Create a template from an existing database by specifying the following parameters:
        -createTemplateFromDB
                -sourceDB    <service in the form of <host>:<port>:<sid>>
                -templateName      <new template name>
                -sysDBAUserName     <user name  with SYSDBA privileges>
                -sysDBAPassword     <password for sysDBAUserName user name>
                [-maintainFileLocations <true | false>]


Create a clone template from an existing database by specifying the following parameters:
        -createCloneTemplate
                -sourceSID    <source database sid>
                -templateName      <new template name>
                [-sysDBAUserName     <user name  with SYSDBA privileges>
                 -sysDBAPassword     <password for sysDBAUserName user name>]
                [-maintainFileLocations <true | false>]
                [-datafileJarLocation       <directory to place the datafiles in a compressed format>]

Generate scripts to create database by specifying the following parameters:
        -generateScripts
                -templateName <name of an existing template in default location or the complete template path>
                -gdbName <global database name>
                [-scriptDest       <destination for all the scriptfiles>]

Delete a database by specifying the following parameters:
        -deleteDatabase
                -sourceDB    <Database unique name for RAC Database and SID for Single Instance Database>
                [-sid    <local instance_name of source database>]
                [-sysDBAUserName     <user name  with SYSDBA privileges>
                 -sysDBAPassword     <password for sysDBAUserName user name>]

Add an instance to a cluster database by specifying the following parameters:
        -addInstance
                -gdbName <global database name>
                -nodelist <node name for the new instance to add>
                [-instanceName <instance name for the new instance to add>]
                [-sysDBAUserName     <user name  with SYSDBA privileges>]
                 -sysDBAPassword     <password for sysDBAUserName user name>
                [-updateDirService <true | false>
                        -dirServiceUserName    <user name for directory service>
                        -dirServicePassword    <password for directory service >]

Delete an instance from a cluster database by specifying the following parameters:
        -deleteInstance
                -gdbName <global database name>
                -instanceName <instance name for the instance to be removed>
                [-nodelist <node name for the instance to be removed>]
                [-sysDBAUserName     <user name  with SYSDBA privileges>]
                 -sysDBAPassword     <password for sysDBAUserName user name>
                [-updateDirService <true | false>
                        -dirServiceUserName    <user name for directory service>
                        -dirServicePassword    <password for directory service >]
Query for help by specifying the following options: -h | -help

2.2、RAC备库增加静态监听

RAC1节点切到grid用户,增加静态监听,确认监听生效。

[root@rac1 ~]# su - grid
[grid@rac1 ~]$ cd /g01/app/11.2.0/grid/network/admin/
[grid@rac1 admin]$ cat listener.ora
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))            # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME= PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
        (GLOBAL_DBNAME = orcl)
        (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
        (SID_NAME=orcl1)
    )
  )
[grid@rac1 admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 19-DEC-2023 19:47:50

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                19-DEC-2023 09:17:06
Uptime                    0 days 10 hr. 30 min. 43 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /g01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /g01/app/grid/diag/tnslsnr/rac1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.30)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.32)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
  Instance "orcl1", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

RAC2节点切换到Grid用户,增加静态监听,确认监听生效。

[root@rac2 ~]# su - grid
[grid@rac2 ~]$ cd /g01/app/11.2.0/grid/network/admin/
[grid@rac2 admin]$ cat listener.ora
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))            # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME= PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
        (GLOBAL_DBNAME = orcl)
        (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
        (SID_NAME=orcl2)
    )
  )
  [grid@rac2 admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 19-DEC-2023 19:47:32

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                19-DEC-2023 09:17:16
Uptime                    0 days 10 hr. 30 min. 16 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /g01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /g01/app/grid/diag/tnslsnr/rac2/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.31)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.33)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
  Instance "orcl2", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[grid@rac2 admin]$

2.3、RAC备库增加参数

alter system set db_file_name_convert='+DATA','+DATA'  scope=spfile;
alter system set log_file_name_convert='+DATA','+DATA'  scope=spfile;
alter system set fal_client='orcl'  scope=spfile;
alter system set fal_server='primary'  scope=spfile;
alter system set log_archive_config='DG_CONFIG=(primary,orcl)'  scope=spfile;
alter system set log_archive_dest_1='location=+DATA valid_for=(all_logfiles,all_roles) db_unique_name=orcl'  scope=spfile;
alter system set log_archive_dest_2='service=primary  ASYNC NOAFFIRM valid_for=(online_logfiles,primary_role) db_unique_name=primary'  scope=spfile;
alter system set log_archive_format='%t_%s_%r.dbf'  scope=spfile;
alter system set standby_file_management='AUTO'  scope=spfile;

2.4、RAC备库修改Tnsnames.ora

这里需要在RAC备库的两个节点$ORACLE_HOME/network/admin/tnsname.ora增加如下内容。

PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.12)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.13)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
  RACDG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.32)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.33)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

RAC主库的tnsnames.ora需要添加RAC备库的监听

RACDG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.32)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.33)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

2.5、拷贝口令文件到RAC备库

在RAC主库,拷贝主库口令文件到RAC备库2个节点,并进行md5校验

[oracle@rac1 ~]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs/
[oracle@rac1 dbs]$ scp -r orapworcl1 oracle@192.168.56.30:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl1
orapworcl1                                                                                                       100% 1536     1.5KB/s   00:00
[oracle@rac1 dbs]$ scp -r orapworcl1 oracle@192.168.56.31:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl2
orapworcl1                                                                                                       100% 1536     1.5KB/s   00:00
[oracle@rac1 dbs]$ md5sum orapworcl1
1636465ada9d006d0e1828c6a0bc4812  orapworcl1

去到RAC备库2个节点,分别进行下口令文件校验。

[oracle@rac1 dbs]$ pwd
/u01/app/oracle/product/11.2.0/dbhome_1/dbs
[oracle@rac1 dbs]$ md5sum orapworcl1
1636465ada9d006d0e1828c6a0bc4812  orapworcl1

[oracle@rac2 admin]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs/
[oracle@rac2 dbs]$ md5sum orapworcl2
1636465ada9d006d0e1828c6a0bc4812  orapworcl2

2.6、关闭RAC备数据库,清理环境

在RAC备库的RAC1节点,使用oracle用户执行关闭备库

su - oracle
srvctl stop database -d orcl -o abort

清理环境,删除旧的数据文件

[grid@rac2 ~]$ asmcmd
ASMCMD> lsdg
State    Type    Rebal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  EXTERN  N         512   4096  4194304     12288     6668                0            6668              0             N  DATA/
MOUNTED  NORMAL  N         512   4096  1048576      9216     8290             3072            2609              0             Y  VOTE/
ASMCMD> cd data/orcl
ASMCMD> rm -rf CONTROLFILE
ASMCMD> rm -rf DATAFILE
ASMCMD> rm -rf ONLINELOG
ASMCMD> mkdir CONTROLFILE
ASMCMD> mkdir DATAFILE
ASMCMD> mkdir ONLINELOG

启动数据库单实例

sqlplus / as sysdba
startup nomount;

2.7、在备库RAC1节点执行duplicate 复制

rman target sys/oracle@primary auxiliary sys/oracle@racdg
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE NOFILENAMECHECK;

以下为输出

[oracle@rac1 admin]$ rman target sys/oracle@primary auxiliary sys/oracle@racdg

Recovery Manager: Release 11.2.0.4.0 - Production on Tue Dec 19 20:44:54 2023

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1613952925)
connected to auxiliary database: ORCL (not mounted)

RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE NOFILENAMECHECK;

Starting Duplicate Db at 19-DEC-23
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=194 instance=orcl1 device type=DISK

contents of Memory Script:
{
   backup as copy reuse
   targetfile  '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl2' auxiliary format
 '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl1'   ;
}
executing Memory Script

Starting backup at 19-DEC-23
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=205 instance=orcl2 device type=DISK
Finished backup at 19-DEC-23

contents of Memory Script:
{
   sql clone "alter system set  control_files =
  ''+DATA/orcl/controlfile/current.352.1156020305'', ''+DATA/orcl/controlfile/current.351.1156020305'' comment=
 ''Set by RMAN'' scope=spfile";
   backup as copy current controlfile for standby auxiliary format  '+DATA/orcl/controlfile/current.350.1156020305';
   restore clone controlfile to  '+DATA/orcl/controlfile/current.349.1156020305' from
 '+DATA/orcl/controlfile/current.350.1156020305';
   sql clone "alter system set  control_files =
  ''+DATA/orcl/controlfile/current.350.1156020305'', ''+DATA/orcl/controlfile/current.349.1156020305'' comment=
 ''Set by RMAN'' scope=spfile";
   shutdown clone immediate;
   startup clone nomount;
}
executing Memory Script

sql statement: alter system set  control_files =   ''+DATA/orcl/controlfile/current.352.1156020305'', ''+DATA/orcl/controlfile/current.351.1156020305'' comment= ''Set by RMAN'' scope=spfile

Starting backup at 19-DEC-23
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=+DATA/orcl/controlfile/snap_control.f tag=TAG20231219T204506 RECID=30 STAMP=1156020311
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 19-DEC-23

Starting restore at 19-DEC-23
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 19-DEC-23

sql statement: alter system set  control_files =   ''+DATA/orcl/controlfile/current.350.1156020305'', ''+DATA/orcl/controlfile/current.349.1156020305'' comment= ''Set by RMAN'' scope=spfile

Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area     801701888 bytes

Fixed Size                     2257520 bytes
Variable Size                339742096 bytes
Database Buffers             452984832 bytes
Redo Buffers                   6717440 bytes

contents of Memory Script:
{
   sql clone 'alter database mount standby database';
}
executing Memory Script

sql statement: alter database mount standby database
RMAN-05529: WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to disk group only.

contents of Memory Script:
{
   set newname for tempfile  1 to
 "+data";
   switch clone tempfile all;
   set newname for datafile  1 to
 "+data";
   set newname for datafile  2 to
 "+data";
   set newname for datafile  3 to
 "+data";
   set newname for datafile  4 to
 "+data";
   set newname for datafile  5 to
 "+data";
   set newname for datafile  6 to
 "+data";
   set newname for datafile  7 to
 "+data";
   set newname for datafile  8 to
 "+data";
   set newname for datafile  9 to
 "+data";
   set newname for datafile  10 to
 "+data";
   set newname for datafile  11 to
 "+data";
   set newname for datafile  12 to
 "+data";
   set newname for datafile  13 to
 "+data";
   backup as copy reuse
   datafile  1 auxiliary format
 "+data"   datafile
 2 auxiliary format
 "+data"   datafile
 3 auxiliary format
 "+data"   datafile
 4 auxiliary format
 "+data"   datafile
 5 auxiliary format
 "+data"   datafile
 6 auxiliary format
 "+data"   datafile
 7 auxiliary format
 "+data"   datafile
 8 auxiliary format
 "+data"   datafile
 9 auxiliary format
 "+data"   datafile
 10 auxiliary format
 "+data"   datafile
 11 auxiliary format
 "+data"   datafile
 12 auxiliary format
 "+data"   datafile
 13 auxiliary format
 "+data"   ;
   sql 'alter system archive log current';
}
executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to +data in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting backup at 19-DEC-23
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=+DATA/orcl/datafile/system.256.1086172033
output file name=+DATA/orcl/datafile/system.348.1156020355 tag=TAG20231219T204554
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:45
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=+DATA/orcl/datafile/sysaux.257.1086172033
output file name=+DATA/orcl/datafile/sysaux.347.1156020401 tag=TAG20231219T204554
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:35
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=+DATA/orcl/datafile/undotbs2.267.1086172237
output file name=+DATA/orcl/datafile/undotbs2.346.1156020437 tag=TAG20231219T204554
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07
channel ORA_DISK_1: starting datafile copy
input datafile file number=00006 name=+DATA/orcl/datafile/prod.273.1086172629
output file name=+DATA/orcl/datafile/prod.345.1156020443 tag=TAG20231219T204554
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07
channel ORA_DISK_1: starting datafile copy
input datafile file number=00007 name=+DATA/primary/datafile/users.297.1147790221
output file name=+DATA/orcl/datafile/users.344.1156020451 tag=TAG20231219T204554
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=+DATA/orcl/datafile/undotbs1.258.1086172033
output file name=+DATA/orcl/datafile/undotbs1.343.1156020455 tag=TAG20231219T204554
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile copy
input datafile file number=00008 name=+DATA/primary/datafile/users.331.1147792495
output file name=+DATA/orcl/datafile/users.342.1156020457 tag=TAG20231219T204554
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile copy
input datafile file number=00009 name=+DATA/primary/datafile/users.335.1147792667
output file name=+DATA/orcl/datafile/users.341.1156020459 tag=TAG20231219T204554
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile copy
input datafile file number=00010 name=+DATA/primary/datafile/users.338.1147793229
output file name=+DATA/orcl/datafile/users.340.1156020461 tag=TAG20231219T204554
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile copy
input datafile file number=00011 name=+DATA/primary/datafile/users.339.1147793259
output file name=+DATA/orcl/datafile/users.378.1156020461 tag=TAG20231219T204554
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=+DATA/orcl/datafile/users.259.1086172033
output file name=+DATA/orcl/datafile/users.377.1156020463 tag=TAG20231219T204554
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile copy
input datafile file number=00012 name=+DATA/primary/datafile/users.353.1147806089
output file name=+DATA/orcl/datafile/users.376.1156020463 tag=TAG20231219T204554
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile copy
input datafile file number=00013 name=+DATA/primary/datafile/users.378.1147818285
output file name=+DATA/orcl/datafile/users.375.1156020465 tag=TAG20231219T204554
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:02
Finished backup at 19-DEC-23

sql statement: alter system archive log current

contents of Memory Script:
{
   switch clone datafile all;
}
executing Memory Script

datafile 1 switched to datafile copy
input datafile copy RECID=30 STAMP=1156020467 file name=+DATA/orcl/datafile/system.348.1156020355
datafile 2 switched to datafile copy
input datafile copy RECID=31 STAMP=1156020467 file name=+DATA/orcl/datafile/sysaux.347.1156020401
datafile 3 switched to datafile copy
input datafile copy RECID=32 STAMP=1156020468 file name=+DATA/orcl/datafile/undotbs1.343.1156020455
datafile 4 switched to datafile copy
input datafile copy RECID=33 STAMP=1156020468 file name=+DATA/orcl/datafile/users.377.1156020463
datafile 5 switched to datafile copy
input datafile copy RECID=34 STAMP=1156020468 file name=+DATA/orcl/datafile/undotbs2.346.1156020437
datafile 6 switched to datafile copy
input datafile copy RECID=35 STAMP=1156020468 file name=+DATA/orcl/datafile/prod.345.1156020443
datafile 7 switched to datafile copy
input datafile copy RECID=36 STAMP=1156020468 file name=+DATA/orcl/datafile/users.344.1156020451
datafile 8 switched to datafile copy
input datafile copy RECID=37 STAMP=1156020468 file name=+DATA/orcl/datafile/users.342.1156020457
datafile 9 switched to datafile copy
input datafile copy RECID=38 STAMP=1156020469 file name=+DATA/orcl/datafile/users.341.1156020459
datafile 10 switched to datafile copy
input datafile copy RECID=39 STAMP=1156020469 file name=+DATA/orcl/datafile/users.340.1156020461
datafile 11 switched to datafile copy
input datafile copy RECID=40 STAMP=1156020469 file name=+DATA/orcl/datafile/users.378.1156020461
datafile 12 switched to datafile copy
input datafile copy RECID=41 STAMP=1156020469 file name=+DATA/orcl/datafile/users.376.1156020463
datafile 13 switched to datafile copy
input datafile copy RECID=42 STAMP=1156020469 file name=+DATA/orcl/datafile/users.375.1156020465
Finished Duplicate Db at 19-DEC-23

2.8、RAC主库修改参数

增加RAC备库的参数,原有为primary,orcldg分别为RAC主库、DG单机

其中service对应tnsname里的名称,后面du_nique_name就是字面的意思了

alter system set log_archive_config='DG_CONFIG=(primary,orcl,orcldg)'  scope=both;
alter system set log_archive_dest_3='service=racdg  ASYNC NOAFFIRM valid_for=(online_logfiles,primary_role) db_unique_name=orcl'  scope=both;

2.9、RAC备库启动同步进程

登录备库RAC节点,执行同步命令:

alter database recover managed standby database disconnect from session;

这个是停止的命令,需要的时候再用

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

这个是OPEN后,使用ADG同步的命令

alter database recover managed standby database using current logfile disconnect from session;

启动同步,检查备库日志,可以接收到主库发来的归档日志

3、总结

至此第1篇完结,接下来我准备一下,再更新第2篇。

总体来说RAC到RAC的DG和RAC到单机的DG区别不是很大

需要注意的就是:

1、RAC也要配置静态监听,不然duplicate时候会连不上。

2、如果RAC备库的db_unique_name与库名不一样的话有几种方法(19c简单的多,可以dbca -silent -createDuplicateDB 时直接指定,一键搞定备库,可以参考许冲玉大佬的文章oracle 19c rac dataguard 配置 - 墨天轮 (modb.pro)

a)可以在静默创建命令后加参数(不太推荐,因为有个BUG:DBCA Silent Mode Is Not Setting DB_UNIQUE_NAME Even Though It Is Specified In DBCA Template File. (Doc ID 1508337.1),据说是模板文件的问题,导致命令行加参数修改不生效,如非要用这个方法,可以按我下面操作执行,我试了好几回终于成功了!):

示例,先去asm磁盘组里创建orcltest的目录(如果不创建就会报错,创建SPFILE失败)
ASMCMD> cd data
ASMCMD> mkdir orcltest
然后DBCA建库
dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbname orcltest  -sid orcltest -sysPassword oracle -systemPassword oracle -datafileDestination '+DATA' -redoLogFileSize 50 -recoveryAreaDestination '+DATA' -storageType ASM -asmsnmpPassword system  -diskGroupName 'DATA' -responseFile NO_VALUE -characterset ZHS16GBK -nationalCharacterSet AL16UTF16 -sampleSchema true -automaticMemoryManagement true -totalMemory 1024  -nodeinfo rac1,rac2  -initParams db_unique_name=test -initParams db_unique_name=test
创建过程可查看如下日志
/u01/app/oracle/cfgtoollogs/dbca/test/trace

b)(推荐做法)图形建库时指定参数

c)就是正常建库,之后去库里改,但是这么改完,每次启动时alert里都会有个告警

ERROR: failed to establish dependency between database dgorcl and diskgroup resource ora.DATA.dg

虽说这样也不影使用,就是看着别扭

d) (推荐做法)你可以不用像我一样dbca创建个库出来,手动写参数创建实例,创建db_unique_name数据目录,然后直接duplicate库,然后手动去注册下服务。

3、RAC备库要启动1个实例来进行操作。

也欢迎关注我的公众号【徐sir的IT之路】,一起学习!

————————————————————————————
公众号:徐sir的IT之路
CSDN :徐sir(徐慧阳)_数据库记录,系统集成-CSDN博客
墨天轮:徐sir的个人主页 - 墨天轮
PGFANS:PGFans问答社区:全球唯一的PostgreSQL中文技术交流社区
————————————————————————————

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Oracle RAC(Real Application Clusters)是Oracle公司提供的一种数据库集群方案,它可以实现高可用性和高性能的数据库集群。下面是Oracle RAC 19c集群搭建指南的一些主要步骤和要点。 1. 操作系统要求:首先,验证操作系统是否满足Oracle RAC 19c的要求。例如,必须使用受支持的操作系统版本,并正确设置操作系统参数。 2. 硬件要求:确保服务器硬件满足Oracle RAC 19c的要求。这包括处理器、内存、网络和存储等方面。 3. 安装Oracle Grid Infrastructure:先安装和配置Oracle Grid Infrastructure,在所有的集群节点上安装相同版本的Oracle Grid Infrastructure,并创建共享的存储。 4. 创建Oracle Clusterware:安装和配置Oracle Clusterware,这包括配置集群网络和集群存储等。 5. 安装Oracle Database 软件:在每个集群节点上安装相同版本的Oracle Database软件。确保所有节点上的软件版本一致。 6. 创建数据库:使用Oracle Database软件创建数据库。在创建数据库时,选择RAC数据库选项,并配置适当的参数和选项。 7. 配置连接和负载均衡:在客户端机器上配置连接到Oracle RAC集群的连接字符串,并配置合适的负载均衡策略。 8. 测试和优化集群:使用适当的测试工具和方法对Oracle RAC集群进行测试和优化,以确保系统的高可用性和高性能。 9. 运维和监控:建立适当的运维和监控机制,监控集群的状态和性能,并及时采取措施以确保集群的正常运行。 总结起来,Oracle RAC 19c集群的搭建需要正确安装和配置Oracle Grid Infrastructure和Oracle Clusterware,创建数据库,并配置适当的连接和负载均衡。同时还需要进行系统测试和优化,并建立适当的运维和监控机制。通过遵循这些步骤和要点,可以实现一个高可用性和高性能的Oracle RAC 19c数据库集群。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐sir(徐慧阳)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值