Linus CentOS 9 部署Oracle Database 19c

星光下的梦想 发布于 1 天前 0 次阅读


Oracle Database 是Oracle甲骨文公司推出的一款关系型数据库,具备多租户架构、自动索引、透明数据加密等特性,本篇主要着重介绍在CentOS 9 环境中部署目前企业中常用的19C LTSC版本,以及可能会遇到的一些问题。

Oracle Database 安装环境准备

安装Oracle Database所需依赖环境及RPM包

# 安装Oracle Database 所需依赖组件
sudo dnf install bc bind-utils ksh libaio libaio-devel libnsl libstdc++-devel nfs-utils policycoreutils-python-utils smartmontools sysstat xorg-x11-utils xorg-x11-xauth -y
# 安装preinstall RPM包
sudo rpm -Uvh oracle-database-preinstall-19c-1.0-1.el9.x86_64.rpm
# 安装EE RPM包
sudo rpm -Uvh oracle-database-ee-19c-1.0-1.x86_64.rpm

初始化Oracle Database

# 进入初始化脚本所在目录
cd /etc/init.d/
# 执行初始化
./oracledb_ORCLCDB-19c configure
在执行初始化的过程中,可能会遇到以下报错

我们需要更改一下主机的HOST以及hosts文件,指向本机网卡地址

# 按需求更改HOST,yourHostname为替换的名字
sudo hostnamectl set-hostname yourHostname
# 查看网卡地址
ip address
# 更改hosts文件,将hostname解析的地址更改为网卡地址
sudo vi /etc/hosts


显示Database configuration completed successfully.证明Oracle Database初始化完成。

Oracle Database Client配置及远程用户创建

配置Client环境变量

# 切换到oracle用户
su - oracle
# 编辑用户环境变量配置文件
vi .bash_profile
# 在最后一行加入以下内容
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1      # 设置 Oracle Home 路径
export ORACLE_SID=ORCLCDB                                # 设置数据库 SID (你可以根据实际情况修改)
export PATH=$ORACLE_HOME/bin:$PATH                       # 将 Oracle 二进制路径加入系统 PATH 变量
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib    # 设置库路径
export SQLPATH=$ORACLE_HOME/sqlplus                      # 设置 SQL*Plus 脚本路径
# 保存后生效配置文件
source .bash_profile

Client连接Oracle Database并修改密码

su - oracle
sqlplus / as sysdba
ALTER USER 用户名 IDENTIFIED BY 新密码;

数据库CDB模式与PDB模式切换

# 查看数据库当前模式,输出 CDB$ROOT 表示当前在 CDB 模式,输出具体 PDB 名称(如 PDB1)表示在 PDB 模式
show con_name;
# 查看PDB列表
show pdbs;
# 打开目标PDB,这里的PDB1是上述PDB列表里的CON_NAME
ALTER PLUGGABLE DATABASE PDB1 OPEN;
# 切换到目标PDB
ALTER SESSION SET CONTAINER = PDB1;
# 查看切换结果,输出应为目标 PDB 的名称(如 PDB1)
show con_name;
# 切换回CDB
ALTER SESSION SET CONTAINER = CDB$ROOT;

PDB 模式下创建用户

su - oracle
sqlplus / as sysdba
ALTER SESSION SET CONTAINER = PDB_NAME;
# 创建本地用户
CREATE USER 用户名 IDENTIFIED BY 密码;
# 授予连接权限
GRANT CREATE SESSION TO 用户名;
# 授予资源权限(允许创建表等对象)
GRANT RESOURCE TO 用户名;
# 授予特定对象的权限(例如操作表的权限)
GRANT SELECT, INSERT, UPDATE ON schema.table_name TO 用户名;
# 授予 DBA 权限(仅在特殊需求下)
GRANT DBA TO 用户名;
# 验证用户是否创建成功
SELECT username FROM dba_users WHERE username = '用户名';
exit
# 使用新用户登录
sqlplus 用户名/密码@PDB_SERVICE_NAME

CDB 模式下创建用户

su - oracle
sqlplus / as sysdba
ALTER SESSION SET CONTAINER = CDB$ROOT;
# 创建通用用户(用户名必须C##开头)
CREATE USER C##USERNAME IDENTIFIED BY PASSWORD;
# 为用户授予全局权限
GRANT CREATE SESSION TO C##admin CONTAINER=ALL;
# 为用户授予DBA权限
GRANT DBA TO C##admin CONTAINER=ALL;

Oracle Database与MySQL的一些区别

方面 Oracle Database MySQL
架构 企业级,多租户架构 (Multitenant) 支持复杂部署。 开源、轻量级,单一实例架构更简单。
事务支持 完整支持 ACID 特性,高度一致性和复杂事务处理。 支持 ACID,但性能和一致性不如 Oracle 强大。
存储引擎 单一存储引擎 (ASM 或表空间机制)。 多存储引擎(InnoDB 默认)可根据场景切换。
自动化 自动索引、SQL 执行计划优化、自动故障检测和恢复。 自动化功能较少,需手动优化。
数据分区与分布 提供高级分区、分布式数据库支持和跨实例读写优化。 分区能力较弱,分布式功能需依赖外部工具。
性能 为高并发、复杂查询和分析型任务优化,适合 OLTP 和 OLAP。 擅长小型、轻量级应用,高并发支持有限。
扩展性 高度可扩展,支持多实例、并行查询、分布式集群等功能。 通过外部插件支持水平扩展,原生能力较弱。
缓存机制 内建高级缓存 (SGA, PGA),优化内存分配和数据访问速度。 提供简单缓存 (InnoDB Buffer Pool)。
安全性 支持透明数据加密 (TDE)、行级加密、数据屏蔽、细粒度访问控制。 提供基本加密和访问控制,功能不如 Oracle 强大。
高可用性 内置 Data Guard、RAC,支持故障转移和实时备份。 基本的主从复制,高可用性依赖外部实现。
事务恢复 自动日志管理与事务恢复更全面和高效。 事务恢复依赖存储引擎,功能有限。

Oracle Database中的CDB与PDB

Oracle 从 12c 版本开始引入了 多租户架构 (Multitenant Architecture),这是一个重要的变化,使得多个数据库实例可以共享一个容器数据库 (CDB) 并在其中独立运行。这种架构的核心概念是 CDB 和 PDB。

  • CDB(Container Database)
    1. 定义:CDB 是容器数据库,它包含多个 PDB,即可插拔数据库。CDB 主要用于管理整个数据库实例中的资源和配置。
    2. 特点:
      • CDB 包含一个 根数据库(Root Database) 和多个 PDB。
      • CDB 负责管理所有的系统资源、配置和安全策略。
      • 根数据库(CDB$ROOT)存储所有数据库实例的共享信息,如数据库的元数据、字典信息、数据字典视图等。
      • CDB 可以容纳多个 PDB,每个 PDB 都有自己的应用数据和用户。
      • 主要作用是为多个 PDB 提供一个共享的管理层,简化了资源管理和安全性。
  • PDB(Pluggable Database)
    1. 定义:PDB 是可插拔数据库,它是 Oracle 12c 引入的可插拔架构中的组成部分。每个 PDB 都是一个独立的数据库,可以包含应用数据、用户和应用程序。
    2. 特点:
      • 每个 PDB 拥有自己独立的数据字典、用户和应用数据。
      • PDB 不直接管理实例级的资源,它依赖 CDB 来分配和管理资源。
      • 可以像一个传统的单独数据库一样运行、备份、恢复和迁移,但与 CDB 共享资源。
      • 每个 PDB 是可插拔的,可以方便地在 CDB 之间迁移,支持高效的多租户环境。

Oracle Database的本地用户与公共用户

在 Oracle 的 多租户架构(CDB/PDB) 中,C## 用户是 公共用户,它们的创建与管理方式与 本地用户 有很大的不同。公共用户可以在 CDB 的根容器(CDB$ROOT)中创建,并可以跨多个 PDB 访问和使用。

  1. 公共用户的要求
    • 公共用户 是一种可以在 CDB$ROOT 中创建,并能够在所有 PDB 中访问的用户。
    • 创建公共用户时,用户名必须以 C## 开头。这个前缀是为了标识该用户是一个公共用户,并且该用户的权限和作用范围是全局的,可以跨多个 PDB 使用。
    • 创建公共用户时,它的作用范围不仅限于当前 PDB,而是整个 CDB,包括所有的 PDB。
  2. 为什么使用 C## 前缀?
    • Oracle 使用 C## 前缀来区分 公共用户 和 本地用户。这是一个强制性的命名规则,用于确保公共用户的标识与本地用户有所区分。通过这种命名约定,Oracle 可以在多租户架构中明确区分用户的作用范围。
  3. 公共用户与本地用户的区别

    方面 公共用户(C## 用户) 本地用户
    创建位置 在 CDB$ROOT 容器中创建 在每个 PDB 中单独创建
    作用范围 可以跨所有 PDB 使用 只能在特定 PDB 中使用
    用户名 必须以 C## 开头 无特殊要求,用户名称由数据库管理员自行决定
    权限分配 权限在 CDB 和各 PDB 中进行分配和管理 权限仅限于创建该用户的 PDB 内
    跨 PDB 访问 可以跨多个 PDB 访问 只能在所在的 PDB 中进行访问和操作