Red Hat8.8 安装 Oracle19C,配置开机自动启动,创建数据库,调整内核参数

发布时间 2023-08-25 10:04:51作者: 当幸福来敲门-wufuqin

1. 下载rpm包

  • oracle-database-ee-19c-1.0-1.x86_64.rpm

2. 上传rpm包

  • 上传下载的rpm包到响应目录,例如: /home

3.安装依赖

  • 上传 compat-libcap1-1.10-7.el7.x86_64.rpm 和 compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm 包的 相应目录 例如:/home

    • 安装上传的两个rpm包

      # 安装:compat-libcap1-1.10-7.el7.x86_64.rpm
      rpm -ivh compat-libcap1-1.10-7.el7.x86_64.rpm
      
      # 安装: compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm 
      rpm -ivh  compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm 
      
  • 安装需要的依赖

    yum install -y bc binutils elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libXrender libX11 libXau libXi libXtst libgcc libnsl librdmacm libstdc++ libstdc++-devel libxcb libibverbs make policycoreutils policycoreutils-python-utils smartmontools sysstat libnsl2 libvirt-libs net-tools nfs-utils --allowerasing
    
    • 如果遇到包冲突需要将包单独进行安装,例如:libnsl

      yum install -y libnsl 
      
      # 如果提示存在冲突则添加 --allowerasing 参数
      yum install -y libnsl  --allowerasing
      

4. 预安装 Oracle19C

# 下载 oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
curl -o oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

# 安装 oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
yum -y localinstall oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

5. 安装Oracle19C

  • 将下载的 oracle-database-ee-19c-1.0-1.x86_64.rpm 包上传只相应目录:例如:/home
# 进入home目录
cd /home

# 安装 oracle-database-ee-19c-1.0-1.x86_64.rpm
yum -y localinstall oracle-database-ee-19c-1.0-1.x86_64.rpm

6. 初始化数据库

  • 执行命令
/etc/init.d/oracledb_ORCLCDB-19c configure

7. 配置环境变量

# 切换oracle用户
su oracle

# 使用vi 文本编辑器编辑配置文件
vi ~/.bash_profile

# 填写以下内容
PATH=$PATH:$HOME/bin
export PATH
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export PATH=$PATH:/opt/oracle/product/19c/dbhome_1/bin
export ORACLE_SID=ORCLCDB

# 刷新配置文件
source ~/.bash_profile

=======================================================================================================================================
# 如果遇到每次登录oracle用户需要重新刷新配置文件才能识别oracle命令,则将环境变量配置到系统变量中

# 编辑文件 bashrc
su root

# 编辑文件 bashrc
vi /etc/bashrc

# 填写以下内容在末尾
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export PATH=$PATH:/opt/oracle/product/19c/dbhome_1/bin
export ORACLE_SID=ORCLCDB

# 刷新配置文件
source /etc/bashrc 

8. 修改system用户密码

# 修改密码为 eylami (使用plsql连接工具测试连接)
alter user system identified by eylami;

9. 启动停止Oracle19C

1. 启动监听

# 切换oracle用户
su oracle

# 启动监听
lsnrctl start

2. 查看监听状态

lsnrctl status

3. 连接数据库

sqlplus / as sysdba

4. 启动数据库

# 如果未进入sqlplus 需要先进入
sqlplus / as sysdba

startup;

5. 停止数据库

# 如果未进入sqlplus 需要先进入
sqlplus / as sysdba

# 停止数据库
SHUTDOWN IMMEDIATE;

10. 设置Oracle19C开机自启

  • 参考网址:[Oracle19C设置开机自启]([CentOS 7.6 RPM 方式安装Oracle19c 后 使用 systemd 的方式设置开机自动启动Oracle数据库_11519070的技术博客_51CTO博客](https://blog.51cto.com/u_11529070/3607009#:~:text=CentOS 7.6 RPM 方式安装Oracle19c 后 使用 systemd 的方式设置开机自动启动Oracle数据库,5 5. 设置开机自动启动 ... 6 6. 重启测试. ))
  1. 修改配置文件 vi /etc/oratab
ORCLCDB:/opt/oracle/product/19c/dbhome_1:N

修改为

ORCLCDB:/opt/oracle/product/19c/dbhome_1:Y
  1. 编写Oracle19C启动脚本 vi /usr/bin/oracle19c.sh
#!/bin/bash
/opt/oracle/product/19c/dbhome_1/bin/lsnrctl start
/opt/oracle/product/19c/dbhome_1/bin/dbstart /opt/oracle/product/19c/dbhome_1
  1. 授权脚本
chmod +x /usr/bin/oracle19c.sh
  1. 设置 oracle19c.service, vi /etc/systemd/system/oracle19c.service
[Unit]
Description=Oracle19c
After=syslog.target network.target

[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
Type=oneshot
RemainAfterExit=yes
User=oracle
Environment="ORACLE_HOME=/opt/oracle/product/19c/dbhome_1"
ExecStart=/usr/bin/oracle19c.sh

[Install]
WantedBy=multi-user.target
  1. 设置开机自启
systemctl enable oracle19c
  1. 启动、停止、重启、查看oracle状态
# 启动
systemctl start oracle19c
# 停止
systemctl stop oracle19c
# 重启
systemctl restart oracle19c
# 查看oracle状态
systemctl status oracle19c

11. 创建PDB(数据库)、表空间、表结构、用户

1. PDB(数据库)

# 1. 如果未进入sqlplus 需要先进入
sqlplus / as sysdba

# 数据库是AMI,用户为AMI,密码是ami123,角色是DBA; 将/opt/oracle/oradata/ORCLCDB/pdbseed的数据映射到/home/oracle/ami目录下
CREATE PLUGGABLE DATABASE SMARTAMI
ADMIN USER AMI IDENTIFIED BY ami123
ROLES=(DBA)
FILE_NAME_CONVERT=('/opt/oracle/oradata/ORCLCDB/pdbseed','/home/oracle/ami');

# 打开容器
alter pluggable database SMARTAMI open;
  • 删除pdb

    # 1. 如果未进入sqlplus 需要先进入
    sqlplus / as sysdba
    
    # 查询pdb库
    show pdbs;
    
    # 关闭容器 如果容器是打开状态需要关闭
    alter pluggable database SMARTAMI close;
    
    # 删除pdb
    DROP PLUGGABLE DATABASE SMARTAMI INCLUDING DATAFILES;
    

1. 创建表空间

# 如果未进入sqlplus 需要先进入
sqlplus / as sysdba

# 切换pdb
alter session set container=SMARTAMI;

# 查询表空间
SELECT tablespace_name FROM dba_tablespaces;

# 表空间 smartami  根据实际存储路径进行修改:/home/oracle/data/
create tablespace smartami datafile '/home/oracle/data/smartami_tbs01' size 10000m autoextend off
extent management local 
segment space management auto;

# 表空间 ami_tbs 根据实际存储路径进行修改:/home/oracle/data/
create tablespace ami_tbs datafile '/home/oracle/data/ami_tbs01' size 20000m autoextend off
extent management local 
segment space management auto;

# 表空间 ami_his_tbs 根据实际存储路径进行修改:/home/oracle/data/
create tablespace ami_his_tbs datafile '/home/oracle/data/ami_his_tbs01' size 20000m autoextend off
extent management local 
segment space management auto;
  • 删除表空间(如果需要删除表空间则执行)

    # 如果未进入sqlplus 需要先进入
    sqlplus / as sysdba
    
    # 查询表空间
    SELECT tablespace_name FROM dba_tablespaces;
    
    # 删除表空间 SMARTAMI
    DROP TABLESPACE AMI_HIS_TBS INCLUDING CONTENTS;
    

2. 创建用户

# 如果未进入sqlplus 需要先进入
sqlplus / as sysdba

# 查询pdb库
show pdbs;

# 打开容器
alter pluggable database SMARTAMI open;

# 切换pdb
alter session set container=SMARTAMI;

# 创建用户 ami
create user ami identified by ami123 default tablespace smartami temporary tablespace temp;

3. 用户授权

# 如果未进入sqlplus 需要先进入
sqlplus / as sysdba

grant resource,connect to ami; 
grant create  view to ami;
grant create database link to ami; 
grant create synonym to ami;
grant unlimited TABLESPACE to ami; 
grant DBA  to ami;
grant  SELECT_CATALOG_ROLE to ami; 
grant select any table to ami;
grant create session to ami;

4. 导入数据

  1. 进入目标用户下执行SQL脚本创建用户对象。(表结构、视图、存储过程等)
    示例:导入目标用户smartami
    SQL> conn smartami/xxxxxx
    Connected.
    SQL> show user;
    USER is "SMARTAMI"
    SQL> @ami2.sql;

  2. 使用 imp (oracle用户需要拥有目录和文件夹的权限)

    imp ami/ami123@192.168.2.208:1521/SMARTAMI file=/home/oracle/dump/02_rootami_data_230731.dmp full=y ignore=y

    ami:用户名

    ami123:密码

    192.168.2.208:1521/SMARTAMI:ip地址,端口号,服务名

    /home/oracle/dump/02_rootami_data_230731.dmp:文件绝对路径

12. Oracle19C内核参数设置

# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).

# oracle-database-preinstall-19c setting for fs.file-max is 6815744
fs.file-max = 6815744

# oracle-database-preinstall-19c setting for kernel.sem is '250 32000 100 128'
kernel.sem = 250 32000 100 128

# oracle-database-preinstall-19c setting for kernel.shmmni is 4096
kernel.shmmni = 4096

# oracle-database-preinstall-19c setting for kernel.shmall is 1073741824 on x86_64
kernel.shmall = 1073741824

# oracle-database-preinstall-19c setting for kernel.shmmax is 4398046511104 on x86_64
kernel.shmmax = 4398046511104

# oracle-database-preinstall-19c setting for kernel.panic_on_oops is 1 per Orabug 19212317
kernel.panic_on_oops = 1

# oracle-database-preinstall-19c setting for net.core.rmem_default is 262144
net.core.rmem_default = 262144

# oracle-database-preinstall-19c setting for net.core.rmem_max is 4194304
net.core.rmem_max = 4194304

# oracle-database-preinstall-19c setting for net.core.wmem_default is 262144
net.core.wmem_default = 262144

# oracle-database-preinstall-19c setting for net.core.wmem_max is 1048576
net.core.wmem_max = 1048576

# oracle-database-preinstall-19c setting for net.ipv4.conf.all.rp_filter is 2
net.ipv4.conf.all.rp_filter = 2

# oracle-database-preinstall-19c setting for net.ipv4.conf.default.rp_filter is 2
net.ipv4.conf.default.rp_filter = 2

# oracle-database-preinstall-19c setting for fs.aio-max-nr is 1048576
fs.aio-max-nr = 1048576

# oracle-database-preinstall-19c setting for net.ipv4.ip_local_port_range is 9000 65500
net.ipv4.ip_local_port_range = 9000 65500
/etc/sysctl.conf 中参数调整如下

1.内存页数kernel.shmall计算方法 (统一一次可以使用的共享内存总量)

physical RAM size / pagesize(实际物理内存/系统数据页)
getconf PAGESIZE #查看系统数据页大小(以字节为单位)

[root@tertiary ~]# getconf PAGESIZE
4096

cat /proc/meminfo |grep -i MemTotal#实际物理内存大小(以千字节为单位)

[root@tertiary ~]# cat /proc/meminfo |grep -i MemTotal
MemTotal:        3798412 kB
  • 实际物理内存大小系统数据页大小 / 实际物理内存大小系统数据页大小

  • 3798412 / 4 = 949603

kernel.shmall=949603

2.单个共享内存段的最大值kernel.shmmax计算方法
  • 1/2 of physical RAM

  • 1 / 2 * 实际物理内存大小

  • 1 / 2 * 3798412∗1024 = 1944786944

kernel.shmmax=1944786944

3.控制内核的行为参数kernel.panic_on_oops

0 尝试继续运行。

1 延迟几秒钟(输出klogd时间记录),然后警告,如果警告sysctl也是非0后机器将重新启动。

kernel.panic_on_oops = 1

4.rp_filter参数用于控制系统是否开启对数据包源地址的校验

rp_filter参数用于控制系统是否开启对数据包源地址的校验。

net.ipv4.conf.all.rp_filter

net.ipv4.conf.default.rp_filter

0:不开启源地址校验。

1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。

2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。

net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2

5.信号量参数kernel.sem设置
kernel.sem = 250 32000 100 128

第一列,表示每个信号集中的最大信号量数目。semmsl

第二列,表示系统范围内的最大信号量总数目。semmns

第三列,表示每个信号发生时的最大系统操作数目。semopm

第四列,表示系统范围内的最大信号集总数目。semmni


6.系统范围内共享内存段的最大数量kernel.shmmni
kernel.shmmni = 4096

7.可以分配的文件句柄的最大数目fs.file-max
fs.file-max = 6815744

512 * 进程数(如:6815744 = 512 * 13312)


8.同时可以拥有的的异步IO请求数目fs.aio-max-nr
fs.aio-max-nr = 1048576

1048576 其实它等于 1024*1024 也就是 1024K 个,限制并发未完成的请求,应设置为避免I / O子系统故障。


9.net.ipv4.ip_local_port_range客户端的一个 ip 可用的端口数量

一个 ip 最多创建的连接

net.ipv4.ip_local_port_range = 9000 65500

最小:9000,最大:65500


10.net.core.rmem_default接收套接字缓冲区大小的默认值(以字节为单位)

net.core.rmem_default = 262144#默认值256KB


11.net.core.rmem_max接收套接字缓冲区大小的最大值(以字节为单位)

net.core.rmem_max = 4194304#最大值4MB


12.net.core.wmem_default发送套接字缓冲区大小的默认值(以字节为单位)。

net.core.wmem_default = 262144##默认值256KB


13.net.core.wmem_max发送套接字缓冲区大小的最大值(以字节为单位)

net.core.wmem_max = 1048576#最大值1MB


一般设置按照如上规则设置,如果文件中已经设置的值比计算结果大,以文件中本身的值为准
vi /etc/sysctl.conf编辑完成后,执行sysctl -p生效