前几篇博文完整介绍了如何从搭建VirtualBox环境到安装配置Oracle 19c RAC的过程,传送门如下:

利用VirtualBox在Oracle Linux 7安装Oracle 19c RAC Part1-安装虚拟机

利用VirtualBox在Oracle Linux 7安装Oracle 19c RAC Part2-准备系统环境

利用VirtualBox在Oracle Linux 7安装Oracle 19c RAC Part3-安装Oracle Grid Infrastructure 19c

利用VirtualBox在Oracle Linux 7安装Oracle 19c RAC Part4-数据库安装和配置

本来整个系列文章算是完结,但是实在对于Oracle 18c后创建数据库的漫长时间难于忍受,因此在创建数据库时个人总是会用静默安装代替图形界面的安装。云时代,软件的安装部署本来应该是越来越简便快捷才对,不明白O记为啥会自己作死,非得要做一个这么漫长的过程,真是会让你等得怀疑人生。刚开始安装的时候老是会怀疑电脑是不是挂掉了。

这一篇文章算是画蛇添足,介绍怎么生成响应文件并静默安装。

DBCA静默安装数据库

有人会说我也知道静默安装方便,但是响应文件的指令不熟悉,不知从何入手去写,网上找到的响应文件资源也不一定适合。那该如何生成适合自己环境的响应文件呢?

这要从上一节利用VirtualBox在Oracle Linux 7安装Oracle 19c RAC Part4-数据库安装和配置说起。我们可以在图形向导运行dbca,在第14步dbca总结页面时,按“Save Response File…”,把响应文件保存起来,这样就得到了适合当前环境的dbca响应文件了。在这一步,直接按Cancel,取消数据库的创建。

用oracle用户登录系统,运行dbca -silent -createDatabase命令静默安装方式创建数据库。

[oracle@ol7-19-rac1 ~]$ source db_env
[oracle@ol7-19-rac1 ~]$ dbca -silent -createDatabase \
-responseFile /home/oracle/dbca.rsp \
-sysPassword mypassword\
-systemPassword mypassword \
-dbsnmpPassword mypassword \
-pdbAdminPassword mypassword \
-ignorePreReqs
Prepare for db operation
7% complete
Copying database files
27% complete
Creating and starting Oracle instance
28% complete
31% complete
35% complete
37% complete
40% complete
Creating cluster database views
41% complete
53% complete
Completing Database Creation
57% complete
59% complete
60% complete
Creating Pluggable Databases
64% complete
80% complete
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the logfiles at:
/u01/app/oracle/cfgtoollogs/dbca/cdbrac.
Database Information:
Global Database Name:cdbrac
System Identifier(SID) Prefix:cdbrac
Look at the log file “/u01/app/oracle/cfgtoollogs/dbca/cdbrac/cdbrac0.log” for further details.
[oracle@ol7-19-rac1 ~]$

利用静默安装的方式创建数据库,会比图形界面方式快很多。

删除数据库

如果运行dbca静默安装过程中出现数据库名已存在的[DBT-10317]等错误提示,可以用dbca -silent -deleteDatabase命令从系统中清除数据库信息,重新运行dbca -silent -createDatabase命令。

[FATAL] [DBT-10317] Specified GDB Name (cdbrac) already exists.
ACTION: Specify a different GDB Name that does not already exist.
[WARNING] [DBT-10328] Specified GDB Name (cdbrac) may have a potential conflict with an already existing database on the system.
ACTION: Specify a different GDB Name that does not conflict with existing databases on the system.
[WARNING] [DBT-10331] Specified SID Prefix (cdbrac) may have a potential conflict with an already existing database on the system.
CAUSE: The specified SID Prefix without the trailing numeric characters (cdbrac) may have a potential conflict with an already existing database on the system.
ACTION: Specify a different SID Prefix that does not conflict with existing databases on the system.

以下是静默运行删除数据库命令的示例输出。

[oracle@ol7-19-rac1 ~]$ dbca -silent -deleteDatabase -sourceDB cdbrac -sysPassword mypassword -systemPassword mypassword
[WARNING] [DBT-11503] The instance (cdbrac1) is not running on the local node. This may result in partial delete of Oracle database.
CAUSE: A locally running instance is required for complete deletion of Oracle database instance and database files.
ACTION: Specify a locally running database, or execute DBCA on a node where the database instance is running.
[WARNING] [DBT-19202] The Database Configuration Assistant will delete the Oracle instances and datafiles for your database. All information in the database will be destroyed.
Prepare for db operation
32% complete
Connecting to database
39% complete
42% complete
45% complete
48% complete
[WARNING] The data files for database with DB_NAME “cdbrac” could not be determined because the database could not be started. DBCA will proceed with the database deletion.
65% complete
Updating network configuration files
68% complete
Deleting instances and datafiles
77% complete
87% complete
97% complete
100% complete
Database deletion completed.
Look at the log file “/u01/app/oracle/cfgtoollogs/dbca/cdbrac/cdbrac.log” for further details.

上一节我们完成了Oracle Grid Infrastructure 19c集群软件的安装,并且在两个节点成功启动了服务。本节我们开始Oracle数据库19c软件的安装和DB配置。

[heading]解压Oracle Database 19c安装包[/heading]

把之前下载的Oracle数据库19c的压缩包文件LINUX.X64_193000_db_home.zip上传到ol7-19-rac1的home目录下。

使用oracle用户登录到ol7-19-rac1,把安装包解压到$ORACLE_HOME下。

[oracle@ol7-19-rac1 ~]$ source db_env
[oracle@ol7-19-rac1 ~]$ cd $ORACLE_HOME
[oracle@ol7-19-rac1 db_1]$ pwd
/u01/app/oracle/product/19/db_1
[oracle@ol7-19-rac1 db_1]$ unzip ~/LINUX.X64_193000_db_home.zip

[heading]Oracle数据库19c软件安装[/heading]

使用oracle用户登录节点一“ol7-19-rac1”,开始进行数据库软件的安装配置。

[oracle@ol7-19-rac1 ~]$ source db_env
[oracle@ol7-19-rac1 ~]$ cd $ORACLE_HOME
[oracle@ol7-19-rac1 db_1]$ pwd
/u01/app/oracle/product/19/db_1
[oracle@ol7-19-rac1 db_1]$ ./runInstaller

启动数据库安装图形界面。

进入数据库配置向导,选择”Set Up Software Only”,Next

数据库安装选项,选择”Oracle Real Application Clusters database installation”,Next

节点选择,确认两个节点都选上,参照GI安装配置好节点的SSH connectivity,Next

数据库版本选择企业版“Enterprise Edition”,Next

安装位置确认是设置好的目录,Next

操作系统用户组,对应之前创建的用户组,Next

root脚本运行方式,选择手工运行,Next

前提检查结果忽略,Next

总结页面,保存响应文件,点Install正式开始数据库的安装配置。

安装程序在所有节点上复制并配置Oracle数据库软件,最后弹出root脚本执行页面。

按照提示,分别在两个节点执行root.sh脚本,OK完成Oracle数据库软件的配置。

[root@ol7-19-rac1 ~]# /u01/app/oracle/product/19/db_1/root.sh
Performing root user operation.

The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/19/db_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of “dbhome” have not changed. No need to overwrite.
The contents of “oraenv” have not changed. No need to overwrite.
The contents of “coraenv” have not changed. No need to overwrite.

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
[root@ol7-19-rac1 ~]#

[heading]创建ASM磁盘组[/heading]

使用asmca应用对之前虚拟的共享磁盘创建ASM磁盘组,以供RAC存储数据库文件。

[oracle@ol7-19-rac1 ~]$ asmca


启动ASM管理图形界面,点击左侧的Disk Groups

点击Create,如下图所示创建两个磁盘组,一个DATA,一个FRA,冗余选择External(None)

确认新创建的磁盘组的状态都是MOUNTED,点Exit退出ASM磁盘管理向导。

[heading]创建Oracle数据库实例[/heading]

现在所有的准备工作都就绪,最后的一步工作等着我们,就是使用DBCA命令创建Oracle数据库实例。

[oracle@ol7-19-rac1 ~]$ source db_env
[oracle@ol7-19-rac1 ~]$ cd $ORACLE_HOME
[oracle@ol7-19-rac1 db_1]$ pwd
/u01/app/oracle/product/19/db_1
[oracle@ol7-19-rac1 db_1]$ dbca

运行dbca,启动数据库创建图形界面

进入创建数据库向导,默认”Create a database”,Next

创建模式,选择”Advanced configuration”进阶配置,Next

部署类型,选择通用或事务处理“General Purpose or Transaction Processing”,Next

节点选择RAC集群所有的节点机器。

数据库ID设置,数据库名和SID设置为cdbracc,同时创建一个PDB实例,名称默认设置为pdb

存储选择ASM,数据库文件位置选择默认选项,Next

快速恢复先不启用,如果需要可以在数据库创建后打开。Next

Data Vault选项暂不启用,Next

配置选项可以选择数据库的字符集、是否安装示例数据库等,本次安装我们选用默认的AL32UTF8字符集,Next

管理选项启用EM,端口默认5500,Next

设置数据库管理员用户密码,为了测试方便,我们所有管理员使用相同密码,Next

创建选项,按照默认,Next

安装前提条件检查,忽略警告信息,Next

DBCA总结页面,保存响应文件,按Finish,开始数据库创建。

注:这一步保存响应文件很重要。从Oracle 18c开始,DBCA创建数据库是一个漫长的过程,个人对此行径深恶痛绝,等待数据库创建完成的过程简直是浪费生命。更推荐于使用静默安装的方式去完成数据库的创建

数据库创建进程开始,可冲杯咖啡打盘游戏,晚上的话建议你回家睡觉明天再来,需要漫长的等待才能完成,估计需要几个小时。

数据库创建成功后,Close关闭向导。(在本次安装其实我没有用这种方式创建数据库,而是使用静默安装的方式,所以最后完成的截图缺失)。

[heading]验证Oracle 19c RAC状态[/heading]

使用crsctl stat res -t 命令查看集群资源的状态,确认“ol7-19-rac1”和”ol7-19-rac2″两个节点的资源在线,数据库实例已经正常Open。

[oracle@ol7-19-rac1 ~]$ crsctl stat res -t
——————————————————————————–
Name Target State Server State details
——————————————————————————–
Local Resources
——————————————————————————–
ora.LISTENER.lsnr
ONLINE ONLINE ol7-19-rac1 STABLE
ONLINE ONLINE ol7-19-rac2 STABLE
ora.chad
ONLINE ONLINE ol7-19-rac1 STABLE
ONLINE ONLINE ol7-19-rac2 STABLE
ora.net1.network
ONLINE ONLINE ol7-19-rac1 STABLE
ONLINE ONLINE ol7-19-rac2 STABLE
ora.ons
ONLINE ONLINE ol7-19-rac1 STABLE
ONLINE ONLINE ol7-19-rac2 STABLE
ora.proxy_advm
OFFLINE OFFLINE ol7-19-rac1 STABLE
OFFLINE OFFLINE ol7-19-rac2 STABLE
——————————————————————————–
Cluster Resources
——————————————————————————–
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
1 ONLINE ONLINE ol7-19-rac1 STABLE
2 ONLINE ONLINE ol7-19-rac2 STABLE
3 ONLINE OFFLINE STABLE
ora.CRS.dg(ora.asmgroup)
1 ONLINE ONLINE ol7-19-rac1 STABLE
2 ONLINE ONLINE ol7-19-rac2 STABLE
3 OFFLINE OFFLINE STABLE
ora.DATA.dg(ora.asmgroup)
1 ONLINE ONLINE ol7-19-rac1 STABLE
2 ONLINE ONLINE ol7-19-rac2 STABLE
3 ONLINE OFFLINE STABLE
ora.FRA.dg(ora.asmgroup)
1 ONLINE ONLINE ol7-19-rac1 STABLE
2 ONLINE ONLINE ol7-19-rac2 STABLE
3 ONLINE OFFLINE STABLE
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE ol7-19-rac1 STABLE
ora.asm(ora.asmgroup)
1 ONLINE ONLINE ol7-19-rac1 Started,STABLE
2 ONLINE ONLINE ol7-19-rac2 Started,STABLE
3 OFFLINE OFFLINE STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
1 ONLINE ONLINE ol7-19-rac1 STABLE
2 ONLINE ONLINE ol7-19-rac2 STABLE
3 OFFLINE OFFLINE STABLE
ora.cdbrac.db
1 ONLINE ONLINE ol7-19-rac1 Open,HOME=/u01/app/o
racle/product/19/db_
1,STABLE
2 ONLINE ONLINE ol7-19-rac2 Open,HOME=/u01/app/o
racle/product/19/db_
1,STABLE
ora.cvu
1 ONLINE ONLINE ol7-19-rac1 STABLE
ora.ol7-19-rac1.vip
1 ONLINE ONLINE ol7-19-rac1 STABLE
ora.ol7-19-rac2.vip
1 ONLINE ONLINE ol7-19-rac2 STABLE
ora.qosmserver
1 ONLINE ONLINE ol7-19-rac1 STABLE
ora.scan1.vip
1 ONLINE ONLINE ol7-19-rac1 STABLE
——————————————————————————–
[oracle@ol7-19-rac1 ~]$

使用sqlplus / as sysdba登录数据库实例,验证数据库工作正常。

[oracle@ol7-19-rac1 ~]$ db_env
[oracle@ol7-19-rac1 ~]$ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 – Production on Sun Nov 10 16:47:56 2019
Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle. All rights reserved.Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.3.0.0.0

SQL> select inst_id, name, open_mode from gv$database;

INST_ID NAME OPEN_MODE
———- ——— ——————–
1 CDBRAC READ WRITE
2 CDBRAC READ WRITE

SQL> show con_id

CON_ID
——————————
1
SQL> show con_name

CON_NAME
——————————
CDB$ROOT
SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED READ ONLY NO
3 PDB READ WRITE NO
SQL> alter session set container = pdb;

Session altered.

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
3 PDB READ WRITE NO
SQL> select name from v$datafile;

NAME
——————————————————————————–
+DATA/CDBRAC/96E556785DFD2B87E0536501000ADE9C/DATAFILE/system.274.1023893537
+DATA/CDBRAC/96E556785DFD2B87E0536501000ADE9C/DATAFILE/sysaux.275.1023893539
+DATA/CDBRAC/96E556785DFD2B87E0536501000ADE9C/DATAFILE/undotbs1.273.1023893537
+DATA/CDBRAC/96E556785DFD2B87E0536501000ADE9C/DATAFILE/undo_2.277.1023893681
+DATA/CDBRAC/96E556785DFD2B87E0536501000ADE9C/DATAFILE/users.278.1023893707

SQL>

至此,我们完成了利用VirtualBox在Oracle Linux 7.5上安装配置Oracle数据库19c RAC的所有工作,可以尽情的测试Oracle数据库19c的各种新特性了。

上一节我们完成了Oracle 19c RAC安装环境的准备,这一节正式开始Oracle Grid Infrastructure 19c的安装。

确认虚拟机ol7-19-rac1和ol7-19-rac2处于启动状态。

[heading]解压Oracle Grid Infrastructure 19c安装包[/heading]

把之前下载的Oracle Grid Infrastructure 19c压缩包文件LINUX.X64_193000_grid_home.zip上传到ol7-19-rac1的home目录下。

使用oracle用户登录到ol7-19-rac1,把安装包解压到$ORACLE_HOME下。

[oracle@ol7-19-rac1 ~]$ source grid_env
[oracle@ol7-19-rac1 ~]$ cd $ORACLE_HOME
[oracle@ol7-19-rac1 grid]$ pwd
/u01/app/19/grid
[oracle@ol7-19-rac1 grid]$ unzip ~/LINUX.X64_193000_grid_home.zip

[heading]安装Oracle Grid Infrastructure 19c[/heading]

安装包解压完成后,切换到root用户,安装/u01/app/19/grid/cv目录下cvuqdisk-1.0.10-1.rpm包。

[root@ol7-19-rac1 ~]# cd /u01/app/19/grid/cv
[root@ol7-19-rac1 cv]# ls
admin cvdata cvutl remenv rpm
[root@ol7-19-rac1 cv]# cd rpm
[root@ol7-19-rac1 rpm]# rpm -Uvh cvuqdisk-1.0.10-1.rpm
Preparing… ################################# [100%]
Using default group oinstall to install package
Updating / installing…
1:cvuqdisk-1.0.10-1 ################################# [100%]
[root@ol7-19-rac1 rpm]#

切换回oracle用户,运行gridSetup.sh进行Oracle Grid Infrastructure 19c安装。

[oracle@ol7-19-rac1 ~]$ cd $ORACLE_HOME
[oracle@ol7-19-rac1 grid]$ ./gridSetup.sh

Grid Setup

进入Grid Infrastructure 19c的图形安装界面。

Grid 1

选择”Configure Oracle Grid Infrastructure for a New Cluster”,点Next

接受默认的”Configure an Oracle Standalone Cluster”,Next

SCAN设置,把集群名设置为我们配置文件的名字”ol7-19″,端口选择默认的1521,点击Next

集群节点配置,点击Add,增加第二个节点ol7-19-rac2信息,OK

增加节点后,点击”SSH connectivity…“,设置节点间SSH互连。

输入操作系统用户oracle的密码,点击Setup进行设置。

 

节点间SSH连通测试通过后点OK,按Next

网络接口设置,把enp0s8的用途改为”ASM & Private”,Next

存储选择”Use Oracle Flex ASM for storage“,Next

Configure Grid Infrastructure Management Repository选择默认的No, Next

创建名为CRS的ASM磁盘组,选择/dev/asm-orc1,/dev/asm-ocr2和/dev/asm-ocr3三个磁盘,Next

输入ASM密码,Next

Failure Isolation,选择默认的不使用IPMI,Next

Management Options,不注册EM,Next

选择管理员对应的操作系统用户组,Next

安装位置,选择默认的Oracle Base,Next

安装位置,默认位置,Next

Root脚本运行方式,选择手工安装,Next

系统前提条件检查,有swap和SCAN的警告及DNS服务的失败信息,不影响安装,所以选择忽略,Next

安装信息总结,确认无误后保存响应文件,点Install进行GI安装。

正式安装GI,耐心等待文件复制及两个节点设置完成。

至执行root脚本提示出现时,分别按提示在两个节点执行orainstRoot.sh和root.sh脚本。

以下是脚本在节点一“ol7-19-rac1”的执行输出。

[root@ol7-19-rac1 rpm]# /u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.
[root@ol7-19-rac1 rpm]# /u01/app/19/grid/root.sh
Performing root user operation.The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/19/gridEnter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin …
Copying oraenv to /usr/local/bin …
Copying coraenv to /usr/local/bin …Creating /etc/oratab file…
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Relinking oracle with rac_on option
Using configuration parameter file: /u01/app/19/grid/crs/install/crsconfig_params
The log of current session can be found at:
/u01/app/oracle/crsdata/ol7-19-rac1/crsconfig/rootcrs_ol7-19-rac1_2019-11-08_02-46-09PM.log
2019/11/08 14:49:52 CLSRSC-594: Executing installation step 1 of 19: ‘SetupTFA’.
2019/11/08 14:49:53 CLSRSC-594: Executing installation step 2 of 19: ‘ValidateEnv’.
2019/11/08 14:49:53 CLSRSC-363: User ignored prerequisites during installation
2019/11/08 14:49:53 CLSRSC-594: Executing installation step 3 of 19: ‘CheckFirstNode’.
2019/11/08 14:49:56 CLSRSC-594: Executing installation step 4 of 19: ‘GenSiteGUIDs’.
2019/11/08 14:49:57 CLSRSC-594: Executing installation step 5 of 19: ‘SetupOSD’.
2019/11/08 14:49:57 CLSRSC-594: Executing installation step 6 of 19: ‘CheckCRSConfig’.
2019/11/08 14:49:57 CLSRSC-594: Executing installation step 7 of 19: ‘SetupLocalGPNP’.
2019/11/08 14:50:22 CLSRSC-594: Executing installation step 8 of 19: ‘CreateRootCert’.
2019/11/08 14:50:28 CLSRSC-594: Executing installation step 9 of 19: ‘ConfigOLR’.
2019/11/08 14:50:32 CLSRSC-4002: Successfully installed Oracle Trace File Analyzer (TFA) Collector.
2019/11/08 14:51:08 CLSRSC-594: Executing installation step 10 of 19: ‘ConfigCHMOS’.
2019/11/08 14:51:08 CLSRSC-594: Executing installation step 11 of 19: ‘CreateOHASD’.
2019/11/08 14:51:16 CLSRSC-594: Executing installation step 12 of 19: ‘ConfigOHASD’.
2019/11/08 14:51:17 CLSRSC-330: Adding Clusterware entries to file ‘oracle-ohasd.service’
2019/11/08 14:53:53 CLSRSC-594: Executing installation step 13 of 19: ‘InstallAFD’.
2019/11/08 14:54:01 CLSRSC-594: Executing installation step 14 of 19: ‘InstallACFS’.
2019/11/08 14:56:00 CLSRSC-594: Executing installation step 15 of 19: ‘InstallKA’.
2019/11/08 14:56:08 CLSRSC-594: Executing installation step 16 of 19: ‘InitConfig’.ASM has been created and started successfully.[DBT-30001] Disk groups created successfully. Check /u01/app/oracle/cfgtoollogs/asmca/asmca-191108PM025722.log for details.

2019/11/08 15:20:15 CLSRSC-482: Running command: ‘/u01/app/19/grid/bin/ocrconfig -upgrade oracle oinstall’
CRS-4256: Updating the profile
Successful addition of voting disk b7bdb62a9f7c4f6ebf500c3ead350ca2.
Successful addition of voting disk 1142140776854f78bf2267c0f315a1ed.
Successful addition of voting disk 0816bcfc38c54fbdbf34954f90898764.
Successfully replaced voting disk group with +CRS.
CRS-4256: Updating the profile
CRS-4266: Voting file(s) successfully replaced
## STATE File Universal Id File Name Disk group
— —– —————– ——— ———
1. ONLINE b7bdb62a9f7c4f6ebf500c3ead350ca2 (/dev/asm-ocr1) [CRS]
2. ONLINE 1142140776854f78bf2267c0f315a1ed (/dev/asm-ocr2) [CRS]
3. ONLINE 0816bcfc38c54fbdbf34954f90898764 (/dev/asm-ocr3) [CRS]
Located 3 voting disk(s).
2019/11/08 15:25:32 CLSRSC-594: Executing installation step 17 of 19: ‘StartCluster’.
2019/11/08 15:29:34 CLSRSC-343: Successfully started Oracle Clusterware stack
2019/11/08 15:29:35 CLSRSC-594: Executing installation step 18 of 19: ‘ConfigNode’.
2019/11/08 15:37:07 CLSRSC-594: Executing installation step 19 of 19: ‘PostConfig’.
2019/11/08 15:38:58 CLSRSC-325: Configure Oracle Grid Infrastructure for a Cluster … succeeded
[root@ol7-19-rac1 rpm]#

在第一个节点执行完root脚本后,继续在第二个节点执行,全部成功完成后点OK,继续GI配置。

最后成功完成GI安装,Close退出安装向导。

[heading]验证Oracle Grid Infrastructure集群状态[/heading]

安装完Oracle Grid Infrastructure集群后,可以使用crsctl stat res -t命令查看集群资源状态信息。

[oracle@ol7-19-rac1 ~]$ crsctl stat res -t
——————————————————————————–
Name Target State Server State details
——————————————————————————–
Local Resources
——————————————————————————–
ora.LISTENER.lsnr
ONLINE  ONLINE        ol7-19-rac1        STABLE
ONLINE  ONLINE        ol7-19-rac2        STABLE
ora.chad
ONLINE  ONLINE         ol7-19-rac1        STABLE
ONLINE  ONLINE         ol7-19-rac2        STABLE
ora.net1.network
ONLINE  ONLINE          ol7-19-rac1        STABLE
ONLINE  ONLINE          ol7-19-rac2        STABLE
ora.ons
ONLINE ONLINE           ol7-19-rac1        STABLE
ONLINE ONLINE           ol7-19-rac2        STABLE
ora.proxy_advm
OFFLINE  OFFLINE          ol7-19-rac1       STABLE
OFFLINE  OFFLINE          ol7-19-rac2       STABLE
——————————————————————————–
Cluster Resources
——————————————————————————–
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
1                   ONLINE  ONLINE        ol7-19-rac1      STABLE
2                   ONLINE  ONLINE        ol7-19-rac2       STABLE
3                   OFFLINE  OFFLINE                                STABLE
ora.CRS.dg(ora.asmgroup)
1                    ONLINE  ONLINE        ol7-19-rac1       STABLE
2                    OFFLINE  OFFLINE                                STABLE
3                    OFFLINE  OFFLINE                                STABLE
ora.LISTENER_SCAN1.lsnr
1                    ONLINE  ONLINE        ol7-19-rac1        STABLE
ora.asm(ora.asmgroup)
1                    ONLINE  ONLINE         ol7-19-rac1       Started,STABLE
2                    ONLINE  OFFLINE                                  STABLE
3                    OFFLINE  OFFLINE                                 STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
1                       ONLINE  ONLINE       ol7-19-rac1        STABLE
2                       ONLINE  ONLINE       ol7-19-rac2        STABLE
3                       OFFLINE  OFFLINE                                STABLE
ora.cvu
1                       ONLINE  ONLINE        ol7-19-rac1       STABLE
ora.ol7-19-rac1.vip
1                         ONLINE ONLINE         ol7-19-rac1      STABLE
ora.ol7-19-rac2.vip
1                        ONLINE  ONLINE          ol7-19-rac2     STABLE
ora.qosmserver
1                        ONLINE  ONLINE           ol7-19-rac1     STABLE
ora.scan1.vip
1                        ONLINE  ONLINE           ol7-19-rac1      STABLE
——————————————————————————–
[oracle@ol7-19-rac1 ~]$

确认两个节点的资源都成功启动,可以进行Oracle数据库19c软件在集群上的安装。

 

 

 

 

上一节中我们完成了Oracle Linux虚拟机的安装,本节继续进行系统的配置,完成Oracle数据库19c RAC的安装准备工作。

[heading]Oracle安装前提[/heading]

以root用户登录系统虚机ol7-19-rac1,运行以下命令安装Oracle数据库19c依赖包

$ yum install -y oracle-database-preinstall-19c

安装完成运行以下命令更新内核参数

$ /sbin/sysctl -p

创建Oracle安装所需的组与用户

$ groupadd -g 54321 oinstall $ groupadd -g 54322 dba
$ groupadd -g 54323 oper
$ groupadd -g 54324 backupdba
$ groupadd -g 54325 dgdba
$ groupadd -g 54326 kmdba
$ groupadd -g 54327 asmdba
$ groupadd -g 54328 asmoper
$ groupadd -g 54329 asmadmin
$ groupadd -g 54330 racdba
$
$ useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,asmoper,admadmin,racdba oracle

设置oracle用户密码

$ passwd oracle

编辑/etc/hosts文件,增加以下内容

# Public
10.0.1.101 ol7-19-rac1
10.0.1.102 ol7-19-rac2
# Private
192.168.1.101 ol7-19-rac1-priv
192.168.1.102 ol7-19-rac2-priv
# Virtual
10.0.1.103 ol7-19-rac1-vip
10.0.1.104 ol7-19-rac2-vip
# SCAN
10.0.1.105 ol7-19-scan

确认IP地址对应的网卡均设置为开机启动。 关闭SELinux,编辑/etc/selinux/config文件,设置

SELINUX=disabled

关闭防火墙,运行以下命令

$ systemctl stop firewalld
$ systemctl disable firewalld

关闭chrony服务

$ systemctl stop chronyd
$ systemctl disable chronyd

创建Oracle 19c RAC所需的目录并修改权限

$ mkdir -p /u01/app/19/grid
$ mkdir -p /u01/app/oracle/product/19/db_1
$ chown -R oracle:oinstall /u01
$ chmod -R 775 /u01/

用oracle用户登录系统,在”/home/oracle/.bash_profile”最后一行增加以下内容

# Oracle Settings
export TMP=/tmp
export TMPDIR=$TMP

export ORACLE_HOSTNAME=ol7-19-rac1
export ORACLE_UNQNAME=CDBRAC
export ORACLE_BASE=/u01/app/oracle
export GRID_HOME=/u01/app/19/grid
export DB_HOME=$ORACLE_BASE/product/19/db_1
export ORACLE_HOME=$DB_HOME
export ORACLE_SID=cdbrac1
export ORACLE_TERM=xterm
export BASE_PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$BASE_PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

alias grid_env=’. /home/oracle/grid_env’
alias db_env=’. /home/oracle/db_env’

创建名为”/home/oracle/grid_env“的文件,设置集群用户环境,在文件中加入以下内容

export ORACLE_SID=+ASM1
export ORACLE_HOME=$GRID_HOME
export PATH=$ORACLE_HOME/bin:$BASE_PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

创建名为”/home/oracle/db_env”的文件,设置数据库用户环境,在文件中加入以下内容

export ORACLE_SID=cdbrac1
export ORACLE_HOME=$DB_HOME
export PATH=$ORACLE_HOME/bin:$BASE_PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

关闭系统

shutdown -r now

[heading]创建共享存储[/heading] 从Linux主机Ubuntu系统硬盘中划分空间,虚拟出出两台主机可以同时看到的共享LUN,3个1G的盘用作OCR和Voting Disk,其余分了3个12G的盘规划做用做数据盘和FRA。

$ mkdir -p /data1/u04/ol7-19-rac
$ cd /data1/u04/ol7-19-rac
$
$ # Create the disks and associate them with VirtualBox as virtual media.
$ VBoxManage createhd --filename asm-ocr1.vdi --size 1024 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm-ocr2.vdi --size 1024 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm-ocr3.vdi --size 1024 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm-data1.vdi --size 12288 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm-data2.vdi --size 12288 --format VDI --variant Fixed
$ VBoxManage createhd --filename asm-data3.vdi --size 12288 --format VDI --variant Fixed
$
$ # Connect them to the VM.
$ VBoxManage storageattach ol7-19-rac1 --storagectl "SATA" --port 1 --device 0 --type hdd --medium asm-ocr1.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac1 --storagectl "SATA" --port 2 --device 0 --type hdd --medium asm-ocr2.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac1 --storagectl "SATA" --port 3 --device 0 --type hdd --medium asm-ocr3.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac1 --storagectl "SATA" --port 4 --device 0 --type hdd --medium asm-data1.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac1 --storagectl "SATA" --port 5 --device 0 --type hdd --medium asm-data2.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac1 --storagectl "SATA" --port 6 --device 0 --type hdd --medium asm-data3.vdi --mtype shareable
$
$ # Make shareable.
$ VBoxManage modifyhd asm-ocr1.vdi --type shareable
$ VBoxManage modifyhd asm-ocr2.vdi --type shareable
$ VBoxManage modifyhd asm-ocr3.vdi --type shareable
$ VBoxManage modifyhd asm-data1.vdi --type shareable
$ VBoxManage modifyhd asm-data2.vdi --type shareable
$ VBoxManage modifyhd asm-data3.vdi --type shareable

启动虚机”ol7-19-rac1″,用root用户登录系统,确认刚刚创建的共享磁盘已成功绑定。

[root@ol7-19-rac1 ~]# cd /dev
[root@ol7-19-rac1 dev]# ls sd*
sda sda1 sda2 sdb sdc sdd sde sdf sdg
[root@ol7-19-rac1 dev]#

使用fdisk命令对新建的磁盘从sdb到sdg进行分区。

[root@ol7-19-rac1 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x62be91cf.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won’t be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It’s strongly recommended to
switch off the mode (command ‘c’) and change display units to
sectors (command ‘u’).
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4, default 1):
First cylinder (1-652, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-652, default 652):
Using default value 652
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@ol7-19-rac1 ~]#

所有磁盘分区完成后,再运行ls命令的结果应该如下所示。

[root@ol7-19-rac1 dev]# ls sd*
sda sda2 sdb1 sdc1 sdd1 sde1 sdf1 sdg1
sda1 sdb sdc sdd sde sdf sdg
[root@ol7-19-rac1 dev]#

配置UDEV规则,创建或编辑文件”/etc/scsi_id.config”,增加以下内容。

options=-g

查看磁盘的SCSI ID

[root@ol7-19-rac1 dev]# /usr/lib/udev/scsi_id -g -u -d /dev/sdb
1ATA_VBOX_HARDDISK_VBb5781d10-5cdd8626
[root@ol7-19-rac1 dev]# /usr/lib/udev/scsi_id -g -u -d /dev/sdc
1ATA_VBOX_HARDDISK_VBdaa6933f-45a7bbd7
[root@ol7-19-rac1 dev]# /usr/lib/udev/scsi_id -g -u -d /dev/sdd
1ATA_VBOX_HARDDISK_VBff9e560e-3053c1ed
[root@ol7-19-rac1 dev]# /usr/lib/udev/scsi_id -g -u -d /dev/sde
1ATA_VBOX_HARDDISK_VB0ce057db-89d80b0f
[root@ol7-19-rac1 dev]# /usr/lib/udev/scsi_id -g -u -d /dev/sdf
1ATA_VBOX_HARDDISK_VB38c72c62-65c8b2ce
[root@ol7-19-rac1 dev]# /usr/lib/udev/scsi_id -g -u -d /dev/sdg
1ATA_VBOX_HARDDISK_VB15992f0b-6cff3aca
[root@ol7-19-rac1 dev]#

使用上面的磁盘ID,修改”/etc/udev/rules.d/99-oracle-asmdevices.rules” 文件内容。

KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VBb5781d10-5cdd8626", SYMLINK+="asm-ocr1", OWNER="oracle", GROUP="asm admin", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VBdaa6933f-45a7bbd7", SYMLINK+="asm-ocr2", OWNER="oracle", GROUP="asm admin", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VBff9e560e-3053c1ed", SYMLINK+="asm-ocr3", OWNER="oracle", GROUP="asm admin", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VB0ce057db-89d80b0f", SYMLINK+="asm-data1", OWNER="oracle", GROUP="as madmin", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VB38c72c62-65c8b2ce", SYMLINK+="asm-data2", OWNER="oracle", GROUP="as madmin", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VB15992f0b-6cff3aca", SYMLINK+="asm-data3", OWNER="oracle", GROUP="as madmin", MODE="0660"

加载更新后的磁盘分区表

[root@ol7-19-rac1 dev]# /sbin/partprobe /dev/sdb1
[root@ol7-19-rac1 dev]# /sbin/partprobe /dev/sdc1
[root@ol7-19-rac1 dev]#/sbin/partprobe /dev/sdd1
[root@ol7-19-rac1 dev]# /sbin/partprobe /dev/sde1
[root@ol7-19-rac1 dev]# /sbin/partprobe /dev/sdf1
[root@ol7-19-rac1 dev]# /sbin/partprobe /dev/sdg1

测试并验证规则正常工作

[root@ol7-19-rac1 dev]# /sbin/udevadm test /block/sdb/sdb1

重新加载UDEV规则

[root@ol7-19-rac1 dev]# /sbin/udevadm control --reload-rules

现在新增的磁盘规则应该生效,查看确认可列出所有磁盘。如果没有看到,重新修改配置文件。

[root@ol7-19-rac1 dev]# ls -al /dev/asm*
lrwxrwxrwx 1 root root 4 Nov 9 20:50 /dev/asm-data1 -> sde1
lrwxrwxrwx 1 root root 4 Nov 9 20:55 /dev/asm-data2 -> sdf1
lrwxrwxrwx 1 root root 4 Nov 9 20:55 /dev/asm-data3 -> sdg1
lrwxrwxrwx 1 root root 4 Nov 9 20:55 /dev/asm-ocr1 -> sdb1
lrwxrwxrwx 1 root root 4 Nov 9 20:26 /dev/asm-ocr2 -> sdc1
lrwxrwxrwx 1 root root 4 Nov 9 20:25 /dev/asm-ocr3 -> sdd1


/dev/asm:
[root@ol7-19-rac1 dev]#

成功为配置好RAC集群所需的共享磁盘,关闭虚机”ol7-19-rac1″。

[root@ol7-19-rac1 dev]# shutdown -h now

[heading]创建第二台虚机[/heading] 打开VirtualBox管理界面,右键点击左侧的”ol7-19-rac1″,在弹出菜单选择”Clone”。把新机器命名为”ol7-19-rac2″,Next完成第二台虚机的创建。 Clone VM 虚机创建后,在Linux主机运行以下命令,绑定共享磁盘到新建的虚机。

$ VBoxManage storageattach ol7-19-rac2 --storagectl "SATA" --port 1 --device 0 --type hdd --medium asm-ocr1.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac2 --storagectl "SATA" --port 2 --device 0 --type hdd --medium asm-ocr2.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac2 --storagectl "SATA" --port 3 --device 0 --type hdd --medium asm-ocr3.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac2 --storagectl "SATA" --port 4 --device 0 --type hdd --medium asm-data1.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac2 --storagectl "SATA" --port 5 --device 0 --type hdd --medium asm-data2.vdi --mtype shareable
$ VBoxManage storageattach ol7-19-rac2 --storagectl "SATA" --port 6 --device 0 --type hdd --medium asm-data3.vdi --mtype shareable

启动”ol7-19-rac2″,以root用户登录,更新主机名及IP地址信息。
  • 主机名:ol7-19-rac2
  • enp0s3: IP=10.0.1.102 Netmask=255.255.255.0
  • enp0s8: IP=192.168.1.102 Netmask=255.255.255.0
修改”/home/oracle/.bash_profile”,”/home/oracle/grid_env”和”/home/oracle/db_env”文件,对应更新ORACLE_HOSTNAME和ORACLE_SID值。 重启虚拟机”ol7-19-rac2″,用root用户登录系统,重新加载磁盘分区和UDEV规则,确认可以查看到所有asm有磁盘。 至此,我们完成了Oracle 19c RAC安装的准备工作。关闭虚机,备份虚拟机后准备进行Grid Infrastructure的安装。

$ zip PreGrid.zip *.vdi

 

[heading]起因[/heading]

Oracle于9月份举办了针对合作伙伴的Oracle数据库19c新功能培训,并号召ISV进行国内第一轮的应用系统数据库认证。请郭老板着手准备认证所需的资料,没想到郭同学一再跳票,问了原因才知道是没有RAC环境导致,自告奋勇在公司服务器上帮他搭建环境。想着装RAC无非是举手之劳,没想到凭着以前的经验安装Oracle RAC,还是踩了不少的坑,是为之记。

[heading]所需软件[/heading]

在安装前,准备好搭建环境所需的软件。

[heading]安装VirtualBox[/heading]

我是在Ubuntu 19.10下安装VirtualBox软件,使用以下命令完成安装,如果是其他Linux发行版或者Windows请运行相应命令。

$ sudo dpkg -i virtualbox-6.0_6.0.14-133895~Ubuntu~bionic_amd64.deb

创建虚机 我们计划部署两节点的RAC,所以先创建一个虚机,配置好RAC所需的环境参数,然后复制虚机得到第二个节点。 启动VirtualBox,点击工具栏的New按钮,名称设置为ol7-19-rac1,操作系统类型为Linux,版本为Oracle(64-bit),点击Next 设置“16384”做为内存大小,点击Next。 Memory Size 硬盘页面接受默认的创建新虚拟硬盘,点击Create。 Hard Disk 进入硬盘创建向导,接受默认的VDI硬盘类型,点击Next Hard disk file type 存储方式接受默认的“Dynamically allocated”,点Next Storage on physical hard disk 接受默位置,设置硬盘尺寸为100G,点击Create完成虚拟机的创建。 File location and size 新建名称为“ol17-19-rac1”的虚拟机将在窗口左边列出(忘了截图,用最后的图代替:)),右边窗口点Network链接。 VM List 确认Adapter 1已启用,并设置为Bridged Adapter(因为安装RAC环境要在公司内部网络测试,所以设置为Bridged,如果本机如果本机测试可设置为NAT)。点击Adapter 2页 Adapter 1 确认Adapter 2已启用,并且设置为“Internal Network”。 Adapter 2 点击左侧页面的System,把Boot Order列表中的Floppy去掉。完成虚机的设置。

[heading]在虚机安装Oracle Linux[/heading]

在新创建虚机把光驱映射到下载好的Oracle Linux 7.5的光盘映像文件V975367-01.iso,点击Start启动虚机。 利用光盘启动系统,按I进入Oracle Linux 7.5的安装。 选择以下包进行Oracle Linux的安装
  • Server with GUI
  • Hardware Monitoring Utilities
  • Large Systems Performance
  • Network file system client
  • Performance Tools
  • Compatibility Libraries
  • Development Tools
并对主机名及IP地址进行以下设置: 主机名:ol7-19-rac1 enp0s3: IP=10.0.1.101 Netmask=255.255.255.0 enp0s8: IP=192.168.1.101 Netmask=255.255.255.0 完成虚机Oracle Linux 7.5的安装,重启进入系统。 刚装完系统可能存在虚拟机系统中鼠标移位或者鼠标不工作等情况,可点击VirtualBox的Devices菜单,选择Insert Guest Additions CD images…,装载虚机工具光盘。 在虚拟机Oracle Linux系统里点击Run完成虚机驱动程序的安装(如果出错可通过yum upgrade升级Linux内核解决)。 下一步我们将在虚机系统里进行安装的准备配置,并生成第二台虚拟机。  

习惯于从Oracle的github站点下载dockerfile,修改后生成自己所需的镜像。但是最近有个项目,自己生成镜像文件后发现磁盘居然满了,连容器都没法跑起来。查了一下镜像占用的磁盘空间,一下子被数字吓到了。


$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE


1c98d8816e19 About an hour ago 3.57GB


localhost/oracle/soasuite 12.2.1.3 078faf1a877d 7 days ago 13.5GB


oracle/fmw-infrastructure 12.2.1.3 d37d67bf7981 8 days ago 5.56GB


oracle/database 18.3.0-ee d9b807a62d9b 2 weeks ago 18GB

被动辄10几个G镜像,这容器怎么跑。但是为了项目可以快速测试,也只能想办法减少镜像的尺寸。看到github上有人吐槽这个问题,O记的工程师建议是去Oracle Container Registry上pull镜像。

去https://container-registry.oracle.com看了一眼,发现同样的image确实要小很多。于是从善如流,决定pull镜像下来用。

先login到站点


docker login container-registry.oracle.com

输入用户名密码后,运行pull镜像命令,连续试了几次都是报了镜像not found: does not exist or no pull access的错。

查了老半天原因,最后发现原来坑爹的O记是需要在Oracle Container Registry的页面上接受协议,才能有下载到镜像。

登录网站,在你需要下载的镜像页面点击协议,在弹出窗口接受协议,然后页面会显示当前用户协议的有效时间。再到系统里用命令pull镜像,正常下载。

Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。

在安装或者维护数据库的过程中,可以通过DBCA对CDB进行静默删除(别问我为什么知道:))。步骤如下:

#dbca -silent -deleteDatabase -sourceDB CDB数据库名

耐心等待至命令完成,正常情况下会出现以下提示:

 
Connecting to database
4% complete
9% complete
14% complete
19% complete
23% complete
28% complete
47% complete
Updating network configuration files
52% complete
Deleting instance and datafiles
76% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/condb0.log" for further details.

一客户升级系统,准备把数据库升级到12C,操作系统切换到Redhat 7,而他们家系统管理员不但不熟Oracle数据库,还不熟Linux。只好请客户开了个Teamview连接,远程帮他们安装系统。因为连Linux都是供应商帮忙装了,没有装X window,只能选择静默安装了。开搞。

[heading]安装依赖包[/heading]

要说安装包最方便的方式,莫过于利用Oracle官方的源了。

# cd /etc/yum.repos.d

# wget http://yum.oracle.com/public-yum-ol7.repo

#vim public-yum-ol7.repo

把文件按如下修改:

[highlight dark=”no”][ol7_latest]
name=Oracle Linux $releasever Latest ($basearch)
baseurl=https://yum.oracle.com/repo/OracleLinux/OL7/latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1[/highlight]

然后运行oracle-database-server-12cR2-preinstall安装依赖包。

#yum install oracle-database-server-12cR2-preinstall

如果有问题可以采用以下方式。

#vim req-rpm.txt

在文件输入以下包名。

[highlight]binutils
compat-libcap1
compat-libstdc++-33
gcc
gcc-c++
glibc
glibc-devel
ksh
libgcc
libstdc++
libstdc++-devel
libaio
libaio-devel
libXext
libXtst
libX11
libXau
libxcb
libXi
make
sysstat
libXmu
libXt
libXv
libXxf86dga
libdmx
libXxf86misc
libXxf86vm
xorg-x11-utils
xorg-x11-xauth[/highlight]

保存退出后,运行以下命令安装。

#yum install `awk ‘{print $1}’  req-rpm.txt`

[heading]配置系统参数[/heading]

#vim /etc/sysctl.conf

增加以下内容:

[highlight]–kernel parameters for 12C installation
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500[/highlight]

使用内核参数生效

#/sbin/sysctl -p

#vim /etc/security/limits.conf

–shell limits for users oracle 12C

[highlight]oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768[/highlight]

#cat /etc/selinux/config

确认SELINUX设置如下:

[highlight dark=”no”]SELINUX=permissive
setenforce Permissive
[/highlight]

#service iptables stop

#chkconfig iptables off

[heading]创建oracle用户和组[/heading]

#groupadd -g 54321 oinstall

#groupadd -g 54322 dba

#groupadd -g 54323 oper

#useradd –u 54321 –g oinstall –G dba,oracle,oper

#passwd oracle

#mkdir –p /u01
#chown oracle:dba /u01
#chmod 775 /u01

[heading]安装数据库[/heading]

#su oracle

#unzip linuxx64_12201_database.zip

在解压文件夹的/database/response目录下,复制db_install.rsp文件到/home/oracle/oinstall/oracle/database目录下。

#vim db_install.rsp

[highlight]oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/12.2.0.1/dbhome_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=dba
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true[/highlight]

#./runInstaller -silent -responseFile
/home/oracle/oinstall/database/db_install.rsp

完成数据库软件安装,切到root用户,运行以下脚本。

# /u01/app/oraInventory/orainstRoot.sh

#/u01/app/oracle/product/12.2.0.1/dbhome_1/root.sh

完成数据库软件安装。

[heading]静默创建数据库[/heading]

类似上面步骤,复制dbca.rsp到当前目录。

#vim dbca.rsp

[highlight]gdbName=orcl
sid=orcl
databaseConfigType=SI
createAsContainerDatabase=false
templateName=General_Purpose.dbc
sysPassword=oracle12C
systemPassword=oracle12C
emConfiguration=NONE
datafileDestination=/u01/oradata
recoveryAreaDestination=/u01/recovery_area
storageType=FS
characterSet=AL32UTF8
sampleSchema=TRUE[/highlight]

#export ORACLE_HOME=/u01/app/oracle/product/12.2.0.1/dbhome_1

#export PATH=$ORACLE_HOME/bin:$PATH.

#dbca -silent -createDatabase -responseFile dbca.rsp

完成数据库创建。

[heading]创建监听器[/heading]

类似上面步骤,复制netca.rsp到当前目录。

#netca -silent  -responseFile netca.rsp

完成安装后,验证监听器状态正常。

#lsnrctl status

计划把公司应用后台的数据库服务也统一迁移到docker上,因此起了在docker上部署Oracle数据库的念头。记得以前在docker hub上看到过现成的数据库image,上去一搜,发现不是版本太低就是说被O记要求删除。既然是这样,那O记官方有没以支持呢?放狗一搜,发现O记官方在github上有专门的docker images项目,包含了Java、数据库、应用等等的镜像生成文件。就算是自己生成镜像文件,这些资料也对写Dockerfile很有参考价值。

在github上下载Oracle数据库的docker文件,在OTN下载好Oracle Database 12C的安装包,把zip文件置于OracleDatabase/dockerfiles/12.0.0.2目录下,然后开始Oracle数据库docker的无脑安装 。

1.运行dockerfiles下的buildDockerImage.sh命令

从Oracle Linux的slim-7版本生成数据库镜像文件,该命令支持生成Oracle数据库企业版、标准版和XE版本。俺使用的是企业版。


# ./buildDockerImage.sh -v 12.1.0.2 -e -i

该脚本命令参数说明如下:

-v: version to build
Choose one of: 11.2.0.2 12.1.0.2
-e: creates image based on 'Enterprise Edition'
-s: creates image based on 'Standard Edition 2'
-x: creates image based on 'Express Edition'
-i: ignores the MD5 checksums

开始配置环境,复制安装文件,静默安装数据库,最后生成镜像。大概需要10来分钟时间。

[highlight dark=”no”]注:在生成数据库镜像前,请特别留意Docker的存储驱动配置必须btrfs或overlay2,如果使用aufs在生成过程中会出现各种问题,俺还特意在github上特意开了issue讨论这个问题。[/highlight]

2.在docker容器中运行Oracle数据库


docker run --name \
-p :1521 -p :5500 \
-e ORACLE_SID= \
-e ORACLE_PDB= \
-e ORACLE_CHARACTERSET= \
-v [:]/opt/oracle/oradata \
oracle/database:12.1.0.2-ee

Parameters:
–name: The name of the container (default: auto generated)
-p: The port mapping of the host port to the container port.
Two ports are exposed: 1521 (Oracle Listener), 5500 (OEM Express)
-e ORACLE_SID: The Oracle Database SID that should be used (default: ORCLCDB)
-e ORACLE_PDB: The Oracle Database PDB name that should be used (default: ORCLPDB1)
-e ORACLE_CHARACTERSET:
The character set to use when creating the database (default: AL32UTF8)
-v The data volume to use for the database.
Has to be owned by the Unix user “oracle” or set appropriately.
If omitted the database will not be persisted over container recreation.

懒癌发作,直到春节假期才下定决心把公司的基础架构都迁移到Docker上,随之而来的是一大堆应用重新部署及系统重构的工作。公司大量的应用是基于Oracle数据库构建,所以安装Oracle Database变成了首要任务。虽然安装配置数据库是小菜一碟,但是习惯了登录OTN网站下载安装文件然后照步骤安装,在Linux环境下碰到的第一个问题是在Console的环境下没有浏览器,而下载Oracle 数据库安装文件需要登录OTN网站并同意Oracle的License协议方能下载。

虽然可能利用cookies export这些工具来实现,但是习惯了使用最简单的方法解决问题,直接利用Firefox浏览器可以达到这个目的。在工作计算机上用Firefox登录OTN网站,同意协议后点击下载你所需的数据库安装文件,当下载开始后点击暂停下载,然后在下载任务上右键,选择复制下载链接。

然后登录到Linux终端,用Wget加上复制的链接就可以实现在Linux终端下载OTN文件。