varkai
Oracle Linux 7 安装 Oracle Database 12c
前言
之前工作数据库一直使用的 Oracle Database 11g,所使用的系统是 Oracle Linux 6,鉴于两者都比较老旧,而且都停止维护支持了,所以今后再部署数据库,肯定会使用较新的系统和数据库,于是这一阵先在虚拟机里折腾折腾,把安装文档整理出来,方便以后安装部署,下面是我的安装环境:
虚拟机软件:VMware Workstation 15 Pro
虚拟机:Oracle Linux 7.8
数据库:Oracle Database 12c Release 2
下面是安装 Oracle 12c 数据库对系统的一些关键要求:
分类 | 要求 |
---|---|
内存 | 至少1GB |
/tmp 目录 | 至少1GB |
swap 分区 | 内存在1GB到2GB之间:大小为内存的1.5倍 内存在2GB到16GB之间:大小和内存大小一致 内存大于16GB:大小为16GB |
安装环境配置
首先通过 SSH 连接或者本地登入到 Oracle Linux 系统,以下命令执行用户除非特别指出,默认为 root 用户。
配置 hosts 和 network
这里需要在 /etc/hosts
文件中添加一行主机 IP 指向 HOSTNAME 的一行记录,另外需要在 /etc/sysconfig/network
文件中添加一行 HOSTNAME
的变量,如果这里不设置,数据库安装过程中的网络配置会报错。
- 查看主机 HOSTNAME:
$ hostname
oracle-test
- 在
/etc/hosts
文件末尾添加一行主机 IP 指向 HOSTNAME 的一行记录:
$ sed -i '$a\192.168.98.210 oracle-test' /etc/hosts
- 在
/etc/sysconfig/network
文件末尾添加一行HOSTNAME
的变量:
$ sed -i '$a\HOSTNAME=oracle-test' /etc/sysconfig/network
扩容 /dev/shm
# 调整 tmpfs 大小,size 可以设置为物理内存大小
$ vim /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=8G 0 0
# 重新挂载让设置生效
$ mount -o remount /dev/shm
安装 Oracle 预安装检测包
Oracle 官方提供了一个名为 oracle-database-server-12cR2-preinstall
的 RPM 包来进行安装前的系统依赖安装检测,系统参数设定、oracle 用户建立等工作,省去了手工配置的繁琐,强烈推荐使用,直接通过 yum 安装即可:
$ yum install oracle-database-server-12cR2-preinstall
安装完成后,使系统参数生效:
$ sysctl -p
现在 oracle 用户已经帮我们建立,只需要修改下密码就可以了:
$ passwd oracle
创建 Oracle 数据库安装目录
# Oracle 数据库安装基目录
$ mkdir -p /u01/app/oracle
# Oracle 数据库软件包解压目录
$ mkdir -p /u01/app/oracle/oracle-software
配置 oracle 用户的环境变量
修改 oracle 用户的环境变量文件 /home/oracle/.bashrc
:
$ vim /home/oracle/.bashrc
在文件末尾添加如下内容:
# Oracle 主机名
export ORACLE_HOSTNAME=oracle-test
# Oracle 数据库安装基目录
export ORACLE_BASE=/u01/app/oracle
# Oracle 数据库安装目录
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
# Oracle 数据库实例名
export ORACLE_SID=orcl
# 添加系统环境变量
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
# 添加系统环境变量
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
# 设置 Oracle 客户端字符集
export NLS_LANG='AMERICAN_AMERICA.AL32UTF8'
使环境变量生效:
$ source /home/oracle/.bashrc
配置防火墙
可以直接禁用防火墙,并关闭开机自启:
# 关闭防火墙
$ systemctl stop firewalld.service
# 关闭开机自启
$ systemctl disable firewalld.service
为了安全,不建议执行以上操作,更合理的做法是防火墙放通 Oracle 所需的端口(默认是 1521):
$ firewall-cmd --zone=public --add-port=1521/tcp --permanent
重新加载防火墙:
$ firewall-cmd --reload
查看端口号是否开启
$ firewall-cmd --zone=public --query-port=1521/tcp
yes
关闭 selinux,将 SELINUX=enforcing
改为 SELINUX=disabled
:
$ sed -i "s/^SELINUX=.*/SELINUX=disabled/" /etc/selinux/config
关闭 selinux 需重启系统才能生效:
$ reboot
开始安装
首先将 Oracle 安装文件上传到系统的 /tmp
目录,然后将文件解压到之前建立的 Oracle 软件包目录:
$ unzip /tmp/linuxx64_12201_database.zip -d /u01/app/oracle/oracle-software
然后把 /u01/app/
目录下的所有文件和文件夹的拥有者更改为指定的用户和组:
$ chown -R oracle:oinstall /u01/app/
使用 oracle
用户登入到系统图形化界面,然后进入到软件安装文件目录,执行 runInstaller
文件进行安装:
# 进入安装目录
$ cd /u01/app/oracle/oracle-software/database/
# 执行安装
$ ./runInstaller
此时,系统会弹出 Oracle 的图形化安装界面,安装步骤如下:
- 取消勾选
我希望通过 My Oracle Support 接收安全更新。
,点击下一步
:
1-1. 在弹出的确认框中选择 是
:
- 选择
创建和配置数据库
,点击下一步
:
- 选择
服务器类
,点击下一步
:
- 选择
单实例数据库安装
,点击下一步
:
- 选择
高级安装
,点击下一步
:
- 选择
企业版
,点击下一步
:
- 数据库安装路径设置,默认即可,点击
下一步
:
- 产品清单路径设置,默认即可,点击
下一步
:
- 选择
一般用途/事务处理
,点击下一步
:
- 全局数据库名和 SID 设置,取消勾选
创建为容器数据库
,点击下一步
:
- 配置选项,首先根据自身情况调整分配给数据库的内存比例,然后点击
字符集
选项卡:
11-1. 根据自身情况选择相应的数据库字符集,点击 下一步
:
- 数据库存储设置,默认即可,点击
下一步
:
- 集中管理选项,默认为不使用,点击
下一步
:
- 恢复选项,默认为不使用恢复,如果有需要,可以安装完成后配置,点击
下一步
:
- 数据库管理员账户密码设置,这里选择
对所有账户使用相同的口令
,密码强度要求为必须同时包含大写字母,小写字母和数字,点击下一步
:
- 操作系统组设置,默认即可,点击
下一步
:
- 这里会对数据库的安装先决条件进行检查,如果不通过,则会列出所有不满足的条件,如果通过,则会自动进入下一步:
- 这里会列出数据库安装设置的概要,确认无误后,点击
安装
:
- 数据库开始进行安装:
19-1. 安装过程中,会弹出一个 执行配置脚本
的对话框:
根据对话框提示,使用 root
用户执行对话框中列出的两个文件,执行过程中如有对话选项,一路回车即可:
$ cd /u01/app/oraInventory/
$ ./orainstRoot.sh
$ cd /u01/app/oracle/product/12.2.0/dbhome_1/
$ ./root.sh
两个脚本都执行完成后,回到安装界面,点击 执行配置脚本
对话框中的 确定
继续进行安装。
- 到这里数据库就安装好了,而且监听和数据库都已经帮我们配置好了,最后点击
关闭
按钮结束安装:
安装后的配置
兼容性设置
在使用旧版本的客户端驱动连接 Oracle 12c 数据库报 ORA-28040 没有匹配的认证协议
错误,我们需要在数据库服务器端 $ORACLE_HOME/network/admin/sqlnet.ora
文件中添加一行 SQLNET.ALLOWED_LOGON_VERSION=8
配置,允许旧版本的驱动连接:
$ sed -i '$a\SQLNET.ALLOWED_LOGON_VERSION=8' /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/sqlnet.ora
Oracle 自动启动和关闭
Oracle 数据库默认不是开机自动启动的,需要额外的配置。
首先修改 /etc/oratab
文件,找到文件中的 orcl:/u01/app/oracle/product/12.2.0/dbhome_1:N
将末尾的 N
修改为 Y
:
$ sed -i 's/^orcl:\/u01\/app\/oracle\/product\/12.2.0\/dbhome_1:N/orcl:\/u01\/app\/oracle\/product\/12.2.0\/dbhome_1:Y/' /etc/oratab
接着在 /etc/systemd/system/
目录下新建 Oracle 服务的启动配置文件 oracle-rdbms.service
:
$ touch /etc/systemd/system/oracle-rdbms.service
然后编辑 oracle-rdbms.service
文件,将以下内容复制到该文件后保存退出:
# /etc/systemd/system/oracle-rdbms.service
# Invoking Oracle scripts to start/shutdown Instances defined in /etc/oratab
# and starts Listener
[Unit]
Description=Oracle Database(s) and Listener
After=syslog.target network.target
[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
Type=oneshot
RemainAfterExit=yes
User=oracle
Environment="ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1"
ExecStart=/u01/app/oracle/product/12.2.0/dbhome_1/bin/dbstart $ORACLE_HOME >> 2>&1 &
ExecStop=/u01/app/oracle/product/12.2.0/dbhome_1/bin/dbshut $ORACLE_HOME >> 2>&1 &
[Install]
WantedBy=multi-user.target
最后设置开机自启动:
$ systemctl enable oracle-rdbms.service
我们可以重启系统后,通过 oracle
用户查看 Oracle 服务进程和监听程序确认自动启动是否设置成功:
# 检查 oracle 服务是否启动
$ ps -ef | grep orcl
# 检查监听是否启动
$ lsnrctl status
数据库配置
DEFERRED_SEGMENT_CREATION
从 Oracle 11g 开始,数据库有个参数 DEFERRED_SEGMENT_CREATION
,当这个参数设置为 true
时,当创建一个表的时候,不会给它马上分配空间,只有向这个表中插入第一条数据的时候才开始分配空间,而使用 exp
导出数据的时候是不会导出没有分配空间的表,使用 expdp
就不会受到影响,所以这里把这个参数设置为 false
,让新建的表都马上分配空间。
首先使用 oracle
用户登入系统,进入 sqlplus
环境:
$ sqlplus /nolog
使用管理员连接到数据库:
SQL> CONN /AS SYSDBA
查看数据库当前空间分配设置,默认为 TRUE
:
SQL> SHOW PARAMETER DEFERRED_SEGMENT_CREATION;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation boolean TRUE
将 DEFERRED_SEGMENT_CREATION
参数设置为 FALSE
:
SQL> ALTER SYSTEM SET DEFERRED_SEGMENT_CREATION=FALSE;
DB_SECUREFILE
DB_SECUREFILE
参数必须初始化配置,否则使用低版本 dmp 文件导入数据时会报错:
SQL> ALTER SYSTEM SET DB_SECUREFILE=PERMITTED SCOPE=BOTH;
PROCESSES
PROCESSES
参数控制数据库允许的最大连接数,可以根据自身情况进行修改:
SQL> ALTER SYSTEM SET PROCESSES = 500 SCOPE = SPFILE;
PASSWORD_LIFE_TIME
PASSWORD_LIFE_TIME
参数是数据库用户的密码有效期策略,默认为密码180天过期。
首先查看用户的配置文件是哪个,一般是 DEFAULT
SQL> SELECT USERNAME,PROFILE FROM DBA_USERS;
查看指定配置文件(如 DEFAULT)的密码有效期设置:
SQL> SELECT * FROM DBA_PROFILES S WHERE S.PROFILE='DEFAULT' AND RESOURCE_NAME='PASSWORD_LIFE_TIME';
将密码有效期由默认的180天修改成无限制:
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
最后重启数据库:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
捐赠
如果您觉得博客对您有所帮助,不妨赏博主一杯☕。