银河麒麟kylin-V10-SP3静默安装Oracle12CR2过程

前言

近期,由于CentOS 7停止了更新维护,且越来越多的国有企业都有国产化的需要,所以使用国产服务器系统的国有企业也越来越多了,其中银河麒麟Kylin-Server-V10-SP3就是一个不错的替代系统。

恰逢此时,有国有企业项目其中之一的需求就是将Oracle数据库迁移到国产达梦DM数据库中。要验证迁移Oracle数据库就必须要有Oracle环境,故而在这篇文章里我们研究为记录下在Kylin-Server-V10-SP3这个系统下静默安装Oracle12CR2过程。之后有时间再补充一些达梦的安装和迁移过程。

在阅读本文前,我默认你熟悉Linux系统,并知道一些简单的命令,同时也知道如何使用shell客户端工具连接到Linux系统中进行操作,本文就不再做额外的说明了。

一、检查确认环和安装依赖包

1、本文适用范围与环境、软件

Kylin-Server-V10-SP3环境,安装完后使用的IP为192.168.2.47。

[root@kyost ~]# uname -a
Linux kyost 4.19.90-89.11.v2401.ky10.x86_64 #1 SMP Tue May 7 18:33:01 CST 2024 x86_64 x86_64 x86_64 GNU/Linux
[root@kyost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether d2:62:9a:a5:e2:98 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.47/24 brd 192.168.2.255 scope global dynamic noprefixroute ens18
valid_lft 71873sec preferred_lft 71873sec
inet6 240e:350:ab82:3000::1e6/128 scope global dynamic noprefixroute
valid_lft 2647sec preferred_lft 2647sec
inet6 240e:350:ab82:3000:8ae6:10d:b790:cc1c/64 scope global dynamic noprefixroute
valid_lft 2647sec preferred_lft 2647sec
inet6 240e:350:ab82:3000:d062:9aff:fea5:e298/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2647sec preferred_lft 2647sec
inet6 fe80::2e58:a751:65af:742d/64 scope link noprefixroute
valid_lft forever preferred_lft forever

系统下载地址:https://iso.kylinos.cn/web_pungi/download/cdn/9D2GPNhvxfsF3BpmRbJjlKu0dowkAc4i/Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso

Oracle12CR2版本与下载(建议使用迅雷等P2P下载工具下载,或在官网登陆后使用带AuthParam参数的地址下载)

https://download.oracle.com/otn/linux/oracle12c/122010/linuxx64_12201_database.zip

2、安装相关依赖包

由于Kylin与CentOS同宗同源,所以这里我参考CentOS7在安装Oracle12时所需要的依赖包。使用root帐户登陆Kylin系统打开命令终端执行以下命令。

# 检查Kylin系统在安装Oracle12时缺少的依赖包
[root@kyost ~]# rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc-2.17 glibc-common glibc-devel glibc-headers ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel
binutils-2.34-31.p01.ky10.x86_64
未安装软件包 compat-libstdc++-33
未安装软件包 elfutils-libelf
未安装软件包 elfutils-libelf-devel
gcc-7.3.0-2020033101.58.p01.ky10.x86_64
未安装软件包 gcc-c++
未安装软件包 glibc-2.17
未安装软件包 glibc-headers
未安装软件包 ksh
libaio-0.3.112-5.p01.ky10.x86_64
未安装软件包 libaio-devel
libgcc-7.3.0-2020033101.58.p01.ky10.x86_64
libstdc++-7.3.0-2020033101.58.p01.ky10.x86_64
未安装软件包 libstdc++-devel
make-4.3-1.ky10.x86_64
sysstat-12.2.1-7.p01.ky10.x86_64
unixODBC-2.3.7-3.h1.ky10.x86_64
未安装软件包 unixODBC-devel
[root@kyost ~]#

可以看出默认安装好后的系统还是缺少10个软件包的。由于这里参考的是CentOS7的依赖包,且事实上在Kylin上使用包管理器从云上下载安装这些包也是有不少是找不到的,所以这里我找到了一个安装有CentOS7的服务器,在其上先下载这些包,再上传到Kylin服务器中使用即可。

# 在CentOS7中的操作
[root@homeser ~]# uname -a
Linux homeser 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

[root@homeser ~]# mkdir /root/orarpm/
# 使用yum将Kylin缺失的包下载到/root/orarpm/目录中
[root@homeser ~]# yum reinstall --downloadonly compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc-c++ glibc-2.17 glibc-headers ksh libaio-devel libstdc++-devel unixODBC-devel --downloaddir=/root/orarpm/

# 复制一个lib文件到/root/orarpm/目录中,这个文件后面安装Oracle12时需要,否则会报不少错也启动不了实例
[root@homeser ~]# cp /usr/lib64/libpthread_nonshared.a /root/orarpm/

上述的9个软件包和libpthread_nonshared.a文件,我也打包上传了一份,如有需要的也可自取:

通过网盘分享的文件:orarpm.zip
链接: https://pan.baidu.com/s/17cx2ze55OVypHSmy0eJB4Q?pwd=ep5w

切换回Kylin系统中,上传 orarpm.zip 包中的内容,到root目录,如下所示操作安装这些包。

[root@kyost ~]# cd /root
[root@kyost ~]# ll
总用量 10596
drwxr-xr-x 2 root root 6 8月 8 22:51 公共
drwxr-xr-x 2 root root 6 8月 8 22:51 模板
drwxr-xr-x 2 root root 6 8月 8 22:51 视频
drwxr-xr-x 2 root root 6 8月 8 22:51 图片
drwxr-xr-x 2 root root 6 8月 8 22:51 文档
drwxr-xr-x 2 root root 6 8月 8 22:51 下载
drwxr-xr-x 2 root root 6 8月 8 22:51 音乐
drwxr-xr-x 2 root root 6 8月 8 22:51 桌面
-rw------- 1 root root 2580 8月 8 22:46 anaconda-ks.cfg
-rw-r--r-- 1 root root 2915 8月 8 22:51 initial-setup-ks.cfg
-rw-r--r-- 1 root root 10839132 8月 9 14:45 orarpm.zip

# 解压orarpm.zip中的文件到当前目录
[root@kyost ~]# unzip orarpm.zip
Archive: orarpm.zip
inflating: compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
inflating: elfutils-libelf-0.176-5.el7.x86_64.rpm
inflating: elfutils-libelf-devel-0.176-5.el7.x86_64.rpm
inflating: gcc-c++-4.8.5-44.el7.x86_64.rpm
inflating: glibc-2.17-326.el7_9.3.x86_64.rpm
inflating: glibc-headers-2.17-326.el7_9.3.x86_64.rpm
inflating: ksh-20120801-144.el7_9.x86_64.rpm
inflating: libaio-devel-0.3.109-13.el7.x86_64.rpm
inflating: libpthread_nonshared.a
inflating: libstdc++-devel-4.8.5-44.el7.x86_64.rpm
inflating: unixODBC-devel-2.3.1-14.el7.x86_64.rpm

# 强制安装当前目录下的所有rpm包,并不检查相关依赖
[root@kyost ~]# rpm -ivh *.rpm --force --nodeps
警告:compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:glibc-2.17-326.el7_9.3 ################################# [ 10%]
警告:/etc/nsswitch.conf 已建立为 /etc/nsswitch.conf.rpmnew
2:elfutils-libelf-0.176-5.el7 ################################# [ 20%]
3:libstdc++-devel-4.8.5-44.el7 ################################# [ 30%]
4:gcc-c++-4.8.5-44.el7 ################################# [ 40%]
5:elfutils-libelf-devel-0.176-5.el7################################# [ 50%]
6:compat-libstdc++-33-3.2.3-72.el7 ################################# [ 60%]
7:glibc-headers-2.17-326.el7_9.3 ################################# [ 70%]
8:ksh-20120801-144.el7_9 ################################# [ 80%]
9:unixODBC-devel-2.3.1-14.el7 ################################# [ 90%]
10:libaio-devel-0.3.109-13.el7 ################################# [100%]

# 再次检查相关依赖,发现已经没有未安装的包了,至此我们可以进入下一步了
[root@kyost ~]# rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc-2.17 glibc-common glibc-devel glibc-headers ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel
binutils-2.34-31.p01.ky10.x86_64
compat-libstdc++-33-3.2.3-72.el7.x86_64
elfutils-libelf-0.176-5.el7.x86_64
elfutils-libelf-devel-0.176-5.el7.x86_64
gcc-7.3.0-2020033101.58.p01.ky10.x86_64
gcc-c++-4.8.5-44.el7.x86_64
glibc-2.17-326.el7_9.3.x86_64
glibc-common-2.28-98.p02.ky10.x86_64
glibc-devel-2.28-98.p02.ky10.x86_64
glibc-headers-2.17-326.el7_9.3.x86_64
ksh-20120801-144.el7_9.x86_64
libaio-0.3.112-5.p01.ky10.x86_64
libaio-devel-0.3.109-13.el7.x86_64
libgcc-7.3.0-2020033101.58.p01.ky10.x86_64
libstdc++-7.3.0-2020033101.58.p01.ky10.x86_64
libstdc++-devel-4.8.5-44.el7.x86_64
make-4.3-1.ky10.x86_64
sysstat-12.2.1-7.p01.ky10.x86_64
unixODBC-2.3.7-3.h1.ky10.x86_64
unixODBC-devel-2.3.1-14.el7.x86_64

# 复制文件到lib64和lib目录中,防止安装过程出现找不到文件的错误
[root@kyost ~]# cp libpthread_nonshared.a /usr/lib64/
[root@kyost ~]# cp libpthread_nonshared.a /usr/lib/

3、安装JDK1.8

本文使用到的 jdk-8u172-linux-x64.tar.gz 下载地址如下(建议使用迅雷这种P2P下载软件下载):

https://download.oracle.com/otn/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/jdk-8u172-linux-x64.tar.gz

其它更多的JDK历史版本下载请参考下方连接,但本文的JDK建议保持使用1.8版本的。

Java Archive | Oracle

将下载的 jdk-8u172-linux-x64.tar.gz 上传到 /root 目录后按以下操作。

[root@kylo ~]# cd /root/
[root@kylo ~]# tar -xf jdk-8u172-linux-x64.tar.gz
[root@kylo ~]# mkdir /usr/java/
[root@kylo ~]# mv jdk1.8.0_172/ /usr/java/
[root@kylo ~]# vi /etc/profile

# 按i键进入编辑,移动到最下方,添加以下内容后按 Esc 后再输入 :qw! 回车保存
# Set JAVA_HOME on /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_172
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

img

保存文件后,执行以下命令使配置生效,我们就可以查看当前的jdk是否安装完成了。

# 使配置生效
[root@kyost ~]# source /etc/profile

# 查看jdk的版本信息,这里输出了版本,就表示jdk配置生效了
[root@kyost ~]# java -version
openjdk version "1.8.0_402"
OpenJDK Runtime Environment Bisheng (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM Bisheng (build 25.402-b06, mixed mode)
[root@kyost ~]#

二、改操作系统配置参数

1、修改用户SHELL的限制

在Kylin中依然使用root登陆,依次执行以下命令。

[root@kyost ~]# vi /etc/security/limits.conf

# 在文件的最后追加以下内容后保存退出
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

img

2、修改/etc/pam.d/login文件

继续使用vi编辑文件。

[root@kyost ~]# vi /etc/pam.d/login

# 在文件的最后追加以下内容后保存退出
session required /lib/security/pam_limits.so
session required pam_limits.so

img

3、修改Linux内核

继续使用vi编辑文件。

[root@kyost ~]# vi /etc/sysctl.conf

# 在文件的最后追加以下内容后保存退出

# 设置最大打开文件数
fs.file-max = 6815744
fs.aio-max-nr = 1048576
# 共享内存的总量,8G内存设置:2097152*4k/1024/1024
#kernel.shmall = 2097152
# 最大共享内存的段大小,G换算成k计算
#kernel.shmmax = 2147483648
# 整个系统共享内存端的最大数
#kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
# 可使用的IPv4端口范围
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

img

PS:要使/etc/sysctl.conf更改立即生效,执行以下命令。输入:
sysctl -p

4、编辑/etc/profile文件增加oracle配置

继续使用vi编辑文件。

[root@kyost ~]# vi /etc/profile

# 在文件的最后追加以下内容后保存退出

# oracle 用户的配置
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi

img

PS:要使/etc/profile更改立即生效,执行以下命令。输入:
source /etc/profile

三、安装前的准备

1、创建相关用户和组

[root@kyost ~]# groupadd dba
[root@kyost ~]# groupadd oinstall
[root@kyost ~]# useradd -g oinstall -G dba -m oracle

# 更改刚创建的oracle用户的密码,这里的密码需要至少是8位的,且不能包含有用户名,本文的密码为:73GaLHZg8
[root@kyost ~]# passwd oracle
更改用户 oracle 的密码 。
新的密码:
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
[root@kyost ~]#

2、创建数据库软件目录权限

本文拟将数据库安装在 /app/oracle 目录下。依旧使用root权限执行以下命令。

# 数据库安装目录
mkdir -p /app/oracle/product/12.2.0/db_1
# 数据库创建及使用过程中的日志目录
mkdir -p /app/oracle/oraInventory
# 存放数据库的数据目录
mkdir -p /app/oracle/oradata
# 数据恢复目录和备份文件
mkdir -p /app/oracle/recovery
# 设置oracle用户访问权限的所有者
chmod -R 775 /app/oracle
chown -R oracle:oinstall /app/oracle

3、配置oracle用户环境变量

更改oracle用户的/home/oracle/.bash_profile文件配置Oracle的环境变量,在.bash_profile文件最后,配置Oracle的环境变量。

vi /home/oracle/.bash_profile

# 在文件的最后追加以下内容后保存退出

export ORACLE_BASE=/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib64:/usr/lib64:/usr/local/lib64
# oracle实例名称可更改,但不建议
export ORACLE_SID=orcl
# oracle实例数据编码格式,这里只建议使用AL32UTF8,好方便统一
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

PS:本文中只配置了oracle的用户环境变量,但没有对root用户配置,如有需要也可以编辑 /root/.bash_profile 文件给root用户也设置相关的环境变量,好方便使用各种oracle命令,而非要先进入命令所在的目录。

4、下载Oracel并解压

将上1.1中得到的 linuxx64_12201_database.zip 文件上传到 /root 目录中,执行命令解压后将安装文件移动到 /app/oracle 目录中。

cd /root/
[root@kyost ~]# unzip /root/linuxx64_12201_database.zip
mv database/ /app/oracle/
chown -R oracle:oinstall /app/oracle

至此安装前的准备工作已全部完成,下一步将进入安装过程。

四、安装Oracle数据库软件

1、修改静默安装的自动应答文件db_install.rsp

在Kylin中找到 /app/oracle/database/response/db_install.rsp 这个文件,可以先将其从Kylin下载到本地电脑中修改,再将修改后的文件覆盖即可。修改过程可按如下引导即可。

# 30行 安装类型,只装数据库软件
oracle.install.option=INSTALL_DB_SWONLY
# 35行 用户组
UNIX_GROUP_NAME=oinstall
# 42行 INVENTORY目录(不填就是默认值)
INVENTORY_LOCATION=/app/oracle/oraInventory
# 46行 oracle目录
ORACLE_HOME=/app/oracle/product/12.2.0/db_1
# 51行 oracle基本目录
ORACLE_BASE=/app/oracle
# 63行 oracle版本
oracle.install.db.InstallEdition=EE
# 80行
oracle.install.db.OSDBA_GROUP=dba
# 86行
oracle.install.db.OSOPER_GROUP=dba
# 91行
oracle.install.db.OSBACKUPDBA_GROUP=dba
# 96行
oracle.install.db.OSDGDBA_GROUP=dba
# 101行
oracle.install.db.OSKMDBA_GROUP=dba
# 106行
oracle.install.db.OSRACDBA_GROUP=dba
# 180行 数据库类型
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
# 185行,实例名称
oracle.install.db.config.starterdb.globalDBName=orcl
# 190行,实例名称
oracle.install.db.config.starterdb.SID=orcl
# 216行
oracle.install.db.config.starterdb.characterSet=AL32UTF8
# 386行
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
# 398行 设置安全更新(貌似是有bug,这个一定要选true,否则会无限提醒邮件地址有问题,终止安装。PS:不管地址对不对)
DECLINE_SECURITY_UPDATES=true

PS:另外本文涉及到的 db_install.rsp、dbca.rsp 这两个文件会提供一个改好的模板,下载后可直接使用。

通过网盘分享的文件:db_install&dbca.zip
链接: https://pan.baidu.com/s/1B2y9HkPOMEqQg59rr3j0XA?pwd=f7y2

2、安装Oracle

由于之前准备工作中已为Oracle的安装新建了用户,所以这里的安装全部是由oracle的身份进行的。

# 切换为oracle身份
[root@kyost ~]# su - oracle
# 使之前的配置文件立即生效
[oracle@kyost database]$ source /home/oracle/.bash_profile
[oracle@kyost ~]$ cd /app/oracle/database/install/
# 由于使用自带的unzip在Kylin中安装会出现unzip参数错误,所以这里不使用oracle自带的unzip软件
[oracle@kyost database]$ mv unzip unzip.bak
# 将unzip软件使用系统自带的unzip,并做了一个软链接
[oracle@kyost install]$ ln -s /usr/bin/unzip
# 切换到上一级目录
[oracle@kyost install]$ cd ..
# 注意这里后面的rsp文件只能使用绝对路径不能使用相对路径
[oracle@kyost database]$ ./runInstaller -force -silent -noconfig -ignorePrereq -ignoreSysPreReqs -responseFile /app/oracle/database/response/db_install.rsp
正在启动 Oracle Universal Installer...

检查临时空间: 必须大于 500 MB。 实际为 1454 MB 通过
检查交换空间: 必须大于 150 MB。 实际为 4061 MB 通过
准备从以下地址启动 Oracle Universal Installer /tmp/OraInstall2024-08-09_08-17-09PM. 请稍候...[oracle@kyost database]$ [WARNING] [INS-32055] 主产品清单位于 Oracle 基目录中。
操作: Oracle 建议将此主产品清单放置在 Oracle 基目录之外的位置中。
可以在以下位置找到本次安装会话的日志:
/app/oracle/oraInventory/logs/installActions2024-08-09_08-17-09PM.log

此时我们可以以root身份再开一个shell窗口,通过以下命令来查看安装进度。

[root@kyost ~]# tail -f /app/oracle/oraInventory/logs/installActions2024-08-09_08-17-09PM.log

# 这里下面会不断的刷出日志,也可以从这里的输出来观察安装程序的安装过程与日志输出

直到以oracle身份执行的安装程序输出以下信息时,我们可以复制其提示的要执行的sh路径在root权限的shell窗口中执行。

img

切换到root权限的shell窗口,依次执行以下两条命令,完成最后的安装。

[root@kyost ~]# /app/oracle/oraInventory/orainstRoot.sh
更改权限/app/oracle/oraInventory.
添加组的读取和写入权限。
删除全局的读取, 写入和执行权限。

更改组名/app/oracle/oraInventory 到 oinstall.
脚本的执行已完成。
[root@kyost ~]# /app/oracle/product/12.2.0/db_1/root.sh
Check /app/oracle/product/12.2.0/db_1/install/root_kyost_2024-08-09_20-24-36-647019346.log for the output of root script
[root@kyost ~]#

至此,返回以oracle身份执行安装的shell窗口,按下回车键表示Oracle12CR2程序已安装完毕。

五、安装Oracle数据库实例

1、安装Oracle数据库监听

Oracle数据库监听的配置文件为 response/netca.rsp ,此文件不需要修改任何地方,可直接安装。

仍然以oracle身份执行以下命令。

[oracle@kyost database]$ netca -silent -responsefile /app/oracle/database/response/netca.rsp

正在对命令行参数进行语法分析:
参数"silent" = true
参数"responsefile" = /app/oracle/database/response/netca.rsp
完成对命令行参数进行语法分析。
Oracle Net Services 配置:
完成概要文件配置。
Oracle Net 监听程序启动:
正在运行监听程序控制:
/app/oracle/product/12.2.0/db_1/bin/lsnrctl start LISTENER
监听程序控制完成。
监听程序已成功启动。
监听程序配置完成。
成功完成 Oracle Net Services 配置。退出代码是0

# 完成后通过以下命令可以查看数据库监听端口已开成功打开,如下是打开了1521端口,正好合适
[oracle@kyost database]$ netstat -tlnp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::1521 :::* LISTEN 10734/tnslsnr
tcp6 0 0 :::22 :::* LISTEN -
[oracle@kyost database]$

PS:配置路径一定要写绝对路径不然总是报错找不到配置文件
Oracle Net Configuration Assistant 在给定位置找不到响应文件。
Oracle Net Services 配置失败,退出代码是1。Oracle Net Services 配置成功,退出代码是0。

提示:如若使用netstat -tlnp命令查到开启的端口不是1521,可按以下过程进行修改。

# 修改数据库监听端口
vi $ORACLE_HOME/network/admin/listener.ora

# 将端口从1539改成1521,保存文件,再重启监听。

lsnrctl stop
lsnrctl start

2、配置静默建立新库文件dbca.rsp

在Kylin中找到 /app/oracle/database/response/dbca.rsp 这个文件,可以先将其从Kylin下载到本地电脑中修改,再将修改后的文件覆盖即可。修改过程可按如下引导即可。

重要提示:文件中的203行、233行、243行,这三行是登陆Oracle的超级管理员密码请自行修改。

# 21行 不可更改
responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v12.2.0
# 32行 全局数据库名
gdbName=orcl
# 42行 系统标识符
sid=orcl
# 52行
databaseConfigType=SI
# 74行
policyManaged=false
# 88行
createServerPool=false
# 127行
force=false
# 163行 createAsContainerDatabase设为true表示创建容器数据库;false为普通数据库
createAsContainerDatabase=false
# 172行
numberOfPDBs=1
# 182行
pdbName=orclpdb
# 192行
useLocalUndoForPDBs=true
# 203行 库密码,这里大家可以依据自己的情况进行修改
pdbAdminPassword=73GaLHZg8
# 223行
templateName=/app/oracle/product/12.2.0/db_1/assistants/dbca/templates/General_Purpose.dbc
# 233行 超级管理员密码,这里大家可以依据自己的情况进行修改
sysPassword=73GaLHZg8
# 243行 管理员密码,这里大家可以依据自己的情况进行修改
systemPassword=73GaLHZg8
# 273行
emExpressPort=5500
# 284行
runCVUChecks=false
# 313行
omsPort=0
# 341行
dvConfiguration=false
# 391行
olsConfiguration=false
# 401行
datafileJarLocation={ORACLE_HOME}/assistants/dbca/templates/
# 411行
datafileDestination=/app/oracle/oradata/{DB_UNIQUE_NAME}/
# 421行
recoveryAreaDestination=/app/oracle/recovery/{DB_UNIQUE_NAME}
# 431行
storageType=FS
# 468行 字符集创建库之后不可更改
characterSet=AL32UTF8
# 478行
nationalCharacterSet=AL16UTF16
# 488行
registerWithDirService=false
# 526行
listeners=LISTENER
# 546行
variables=DB_UNIQUE_NAME=orcl,ORACLE_BASE=/usr/oracle,PDB_NAME=,DB_NAME=orcl,ORACLE_HOME=/app/oracle/product/12.2.0.1/db_1,SID=orcl
# 555行
initParams=undo_tablespace=UNDOTBS1,memory_target=796MB,processes=300,db_recovery_file_dest_size=2780MB,nls_language=AMERICAN,dispatchers=(PROTOCOL=TCP) (SERVICE=orclXDB),db_recovery_file_dest=/app/oracle/recovery/{DB_UNIQUE_NAME},db_block_size=8192BYTES,diagnostic_dest={ORACLE_BASE},audit_file_dest={ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/adump,nls_territory=AMERICA,local_listener=LISTENER_orcl,compatible=12.2.0,control_files=("/app/oracle/oradata/{DB_UNIQUE_NAME}/control01.ctl", "/app/oracle/recovery/{DB_UNIQUE_NAME}/control02.ctl"),db_name=cdb1,audit_trail=db,remote_login_passwordfile=EXCLUSIVE,open_cursors=300
# 565行
sampleSchema=false
# 574行
memoryPercentage=40
# 584行
databaseType=MULTIPURPOSE
# 594行
automaticMemoryManagement=false
# 604行
totalMemory=0

相关下载文件前面4.1章节已提供过了,这里再引用一下。

通过网盘分享的文件:db_install&dbca.zip
链接: https://pan.baidu.com/s/1B2y9HkPOMEqQg59rr3j0XA?pwd=f7y2

3、静默安装Oracle数据库实例

# 执行静默安装建立新库
[oracle@kyost database]$ dbca -silent -createDatabase -responseFile /app/oracle/database/response/dbca.rsp
[WARNING] [DBT-06801] 指定的快速恢复区大小 (2,780 MB) 小于建议值。
原因: 快速恢复区大小至少应为数据库大小 (1,142 MB) 的三倍。
操作: 指定的快速恢复区大小至少应为数据库大小的三倍。
[WARNING] [DBT-06208] 输入的 'SYS(S)' 口令未遵从 Oracle 建议的标准。
原因:
a. Oracle 建议, 输入的口令长度不应少于 8 个字符, 至少包含 1 个大写字符, 1 个小写字符和 1 个数字 [0-9]。
b. 输入的口令是一个关键字, Oracle 建议不要将其用作口令
操作: 指定强口令。如果需要, 请参阅 Oracle 文档以了解相关指南。
[WARNING] [DBT-06208] 输入的 'SYSTEM' 口令未遵从 Oracle 建议的标准。
原因:
a. Oracle 建议, 输入的口令长度不应少于 8 个字符, 至少包含 1 个大写字符, 1 个小写字符和 1 个数字 [0-9]。
b. 输入的口令是一个关键字, Oracle 建议不要将其用作口令
操作: 指定强口令。如果需要, 请参阅 Oracle 文档以了解相关指南。
[WARNING] [DBT-06801] 指定的快速恢复区大小 (2,780 MB) 小于建议值。
原因: 快速恢复区大小至少应为数据库大小 (2,672 MB) 的三倍。
操作: 指定的快速恢复区大小至少应为数据库大小的三倍。
复制数据库文件
1%已完成
2%已完成
18%已完成
33%已完成
正在创建并启动 Oracle 实例
35%已完成
40%已完成
44%已完成
49%已完成
50%已完成
53%已完成
55%已完成
正在进行数据库创建
56%已完成
57%已完成
58%已完成
62%已完成
65%已完成
66%已完成
执行配置后操作
100%已完成
有关详细信息, 请参阅日志文件 "/app/oracle/cfgtoollogs/dbca/orcl/orcl.log"

# 检查oracle进程与监听状态
[oracle@kyost database]$ ps -ef | grep ora_ | grep -v grep
[oracle@kyost database]$ lsnrctl status

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 09-AUG-2024 20:51:46

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=kyost.lan)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date 09-AUG-2024 20:30:31
Uptime 0 days 0 hr. 21 min. 14 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /app/oracle/product/12.2.0/db_1/network/admin/listener.ora
Listener Log File /app/oracle/diag/tnslsnr/kyost/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=kyost.lan)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "orcl" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@kyost database]$

4、关闭防火墙

由于Oracle启用了1521端口,所以这里在这里需要闭防火墙才能对外提供访问。切换到root身份执行以下命令。

systemctl stop firewalld.service
systemctl disable firewalld.service

当然,如果你对firewalld.service足够熟悉,我还是建议开启防火墙,并且只开放对应的端口即可。

六、数据库实例的启动和关闭

数据库实例的启动和关闭有以下两种方式进行管理,选择其中之一即可。

1、以脚本启动实例

默认情况下,以此种方式管理更方便快捷,除非需要对实例进行一些额外的操作(如修改用户密码等)。

通过网盘分享的文件:db_install&dbca.zip
链接: https://pan.baidu.com/s/1B2y9HkPOMEqQg59rr3j0XA?pwd=f7y2

将其中的 dbshutdbstart 两个文件复制到以下目录,替换原文件:

/app/oracle/product/12.2.0/db_1/bin

此时可以以oracle的身份执行以下命令:

# 以 DBA 身份进入 bin 目录
[oracle@kyost database]$ cd /app/oracle/product/12.2.0/db_1/bin
# 启动数据库实例
[oracle@kyost database]$ dbstart

2、以sqlplus管理实例

使用oracle身份登陆到shell,以 DBA 身份进入 sqlplus,查看数据库状态。本章节不是必须的,主要是当数据库出现问题或忘记密码时可以绕过sys的密码直接操作DB的一种额外手段,如果不需要可以忽略。

# 以 DBA 身份进入 sqlplus,查看数据库状态
[oracle@kyost database]$ sqlplus / as sysdba
SQL> select open_mode from v$database; //查看数据库
SQL> select status from v$instance; //查看数据库实例

# 以 DBA 身份进入 sqlplus,修改管理员用户密码
[oracle@kyost database]$ sqlplus / as sysdba
SQL> alter user sys identified by ********; //改sys超级管理员密码
SQL> alter user system identified by ********; //改system管理员密码

# 以 DBA 身份进入 sqlplus,启动数据库
[oracle@kyost database]$ sqlplus / as sysdba
SQL> startup

# 以 DBA 身份进入 sqlplus,关闭数据库
[oracle@kyost database]$ sqlplus / as sysdba
SQL> shutdown abort

SQL> shutdown immediate

七、设置开机自启动Oracle

1、修改支持dbstart的方式启动

以root的身份对/etc/oratab文件进行修改。

[root@kyost ~]# vi /etc/oratab

# 将文件的下列行的值N改成Y,保存退出
orcl:/app/oracle/product/12.2.0/db_1:Y

img

2、修改启动文件增加命令启动Oracle

以root的身份对/etc/rc.d/rc.local文件进行修改。

[root@kyost ~]# vi /etc/rc.d/rc.local

# 添加oracle启动,和添加监听(先启动数据库,再启动监听)
su - oracle -lc "/app/oracle/product/12.2.0/db_1/bin/dbstart"
su - oracle -lc "/app/oracle/product/12.2.0/db_1/bin/lsnrctl start"

# 以下这两行不是必须的,若配合需要启动 tomcat,而tomcat部署的应用需要连接Oracle则需要增加
# 先引入并准备JDK参数,再启动tomcat容器
source /etc/profile
# 启动tomcat
sh /app/apache-tomcat-8.5.57/bin/startup.sh
# 以上这两行不是必须的,若配合需要启动 tomcat,而tomcat部署的应用需要连接Oracle则需要增加

img

特别注意:要使 /etc/rc.d/rc.local 文件开机可执行,需要给其加上执行权限,否则无效果。

[root@kyost ~]# chmod +x /etc/rc.d/rc.local

八、连接测试

1、Navicat连接

img

2、PL/SQL Devloper连接

找到PL/SQL Devloper的安装位置,如我本地安装在 D:\Soft\PLSQL Developer 12。

在资源管理器中搜索tnsnames.ora文件。这里我的tnsnames.ora文件文件存放在以下目录,各位的安装位置不同请自行查找。

“D:\Soft\PLSQL Developer 12\instantclient-12.2.0.1.0\NETWORK\ADMIN\tnsnames.ora”

img

打开编辑,在文件的最后增加以下代码,保存退出。HOST是服务器的IP,这里自行替换。

kyost =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.47)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

打开PL/SQL Devloper,在数据库中选择刚添加的kyost,输入用户名和密码。

img

进入后,查询编码SQL,可以执行。

img

九、一些错误参考

1、无法启动oracle监听

例如出现以下2个问题的均可按此方法处理:

问题1:The listener supports no services
问题2:Instance “orcl”, status UNKNOWN, has 1 handler(s) for this service…

[root@iZ7xvd0lnw8vqd2l9thtejZ ~]# uname -n
iZ7xvd0lnw8vqd2l9thtejZ
[root@iZ7xvd0lnw8vqd2l9thtejZ ~]#

# 查看本计算机名称,此处看到的是 kyost
[oracle@kyost database]$ uname -n
kyost
# 注意这里的本计算机名称值不允许出现 . 这种字符,如果出现了,你需要切换到root身份,修改计算机名称
[oracle@kyost database]$ su root
# 永久性的修改主机名称,重启后能保持修改后的,建议主机名不要包含.等特殊字符,某些软件不支持
[root@kyost ~]# hostnamectl set-hostname kyost

[root@kyost ~]# su oracle
# 使用oracle用户登陆,修改listener.ora文件,如下,保存
[oracle@kyost database]$ vi $ORACLE_HOME/network/admin/listener.ora

## 修改内容如下即可
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME= orcl)
(ORACLE_HOME=/app/oracle/product/12.2.0/db_1)
(SID_NAME=orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = kyost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /usr
## 注意:HOST = kyost ,这里的值按你自己系统的来,但不允许出现 . 这种字符。

2、无法链接到数据源连接池

程序在使用数据源连接池时,配置是没有问题的,但就是报出如下错误:

ORA-28040: No matching authentication protocol

针对Oracle12C的方案如下:在oracle用户下,修改 sqlnet.ora 文件来实现。

vi /app/oracle/product/12.2.0/db_1/network/admin/sqlnet.ora

## 将文件原来的SQLNET.ALLOWED_LOGON_VERSION=8注释掉,(如果没有sqlnet.ora文件,那么就创建一个),修改为如下的行,保存即可生效:

SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

## 保存后,重启ORA实例,再尝试重新连接

3、JDBC无法链接到数据库

# 使用 system 用户登录数据库,如果该帐户不能登录,则使用 oracle 身份登录ssh,以sqlplus / as sysdba身份进入。

# 先检查用户是否被锁定(ORA-28000: the account is locked),如果被锁定,则请先解锁,一般状态为 LOCKED(TIMED),这里以查询用户名 MYUSER 为例说明
select * from dba_users u where u.USERNAME='MYUSER';

alter user MYUSER account unlock;
# 一般情况下,修改一次密码,防止初始化密码无法登陆,其中 n9HAw995 为设置的新密码。
alter user MYUSER identified by n9HAw995;

# 数据密码从180天过期改为无限制时间,防止到期后也无法链接数据库
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;