Oracle Database 是Oracle甲骨文公司推出的一款关系型数据库,具备多租户架构、自动索引、透明数据加密等特性,本篇主要着重介绍在CentOS 9 环境中部署目前企业中常用的19C LTSC版本,以及可能会遇到的一些问题。
Oracle Database 安装环境准备
- 系统与宿主机资源配置:Linux CentOS 9 2C2G配置
- 所需RPM包:oracle-database-ee-19c-1.0-1.x86_64.rpm(https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html)、
oracle-database-preinstall-19c-1.0-1.el9.x86_64.rpm(https://oraclelinux.pkgs.org/9/ol9-appstream-x86_64/oracle-database-preinstall-19c-1.0-1.el9.x86_64.rpm.html)。 - 配置足够的SWAP:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile # 立即生效,但是重启后会失效 sudo swapon /swapfile # 配置持久化 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab # 配置内存数据到SWAP频率 sudo vi /etc/sysctl.conf # 在最后一行添加如下内容,数字为交换频率,0-100 vm.swappiness=10 # 使sysctl.conf立即生效 sudo sysctl -p
安装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)
- 定义:CDB 是容器数据库,它包含多个 PDB,即可插拔数据库。CDB 主要用于管理整个数据库实例中的资源和配置。
- 特点:
- CDB 包含一个 根数据库(Root Database) 和多个 PDB。
- CDB 负责管理所有的系统资源、配置和安全策略。
- 根数据库(CDB$ROOT)存储所有数据库实例的共享信息,如数据库的元数据、字典信息、数据字典视图等。
- CDB 可以容纳多个 PDB,每个 PDB 都有自己的应用数据和用户。
- 主要作用是为多个 PDB 提供一个共享的管理层,简化了资源管理和安全性。
- PDB(Pluggable Database)
- 定义:PDB 是可插拔数据库,它是 Oracle 12c 引入的可插拔架构中的组成部分。每个 PDB 都是一个独立的数据库,可以包含应用数据、用户和应用程序。
- 特点:
- 每个 PDB 拥有自己独立的数据字典、用户和应用数据。
- PDB 不直接管理实例级的资源,它依赖 CDB 来分配和管理资源。
- 可以像一个传统的单独数据库一样运行、备份、恢复和迁移,但与 CDB 共享资源。
- 每个 PDB 是可插拔的,可以方便地在 CDB 之间迁移,支持高效的多租户环境。
Oracle Database的本地用户与公共用户
在 Oracle 的 多租户架构(CDB/PDB) 中,C## 用户是 公共用户,它们的创建与管理方式与 本地用户 有很大的不同。公共用户可以在 CDB 的根容器(CDB$ROOT)中创建,并可以跨多个 PDB 访问和使用。
- 公共用户的要求
- 公共用户 是一种可以在 CDB$ROOT 中创建,并能够在所有 PDB 中访问的用户。
- 创建公共用户时,用户名必须以 C## 开头。这个前缀是为了标识该用户是一个公共用户,并且该用户的权限和作用范围是全局的,可以跨多个 PDB 使用。
- 创建公共用户时,它的作用范围不仅限于当前 PDB,而是整个 CDB,包括所有的 PDB。
- 为什么使用 C## 前缀?
- Oracle 使用 C## 前缀来区分 公共用户 和 本地用户。这是一个强制性的命名规则,用于确保公共用户的标识与本地用户有所区分。通过这种命名约定,Oracle 可以在多租户架构中明确区分用户的作用范围。
-
公共用户与本地用户的区别
方面 公共用户(C## 用户) 本地用户 创建位置 在 CDB$ROOT 容器中创建 在每个 PDB 中单独创建 作用范围 可以跨所有 PDB 使用 只能在特定 PDB 中使用 用户名 必须以 C## 开头 无特殊要求,用户名称由数据库管理员自行决定 权限分配 权限在 CDB 和各 PDB 中进行分配和管理 权限仅限于创建该用户的 PDB 内 跨 PDB 访问 可以跨多个 PDB 访问 只能在所在的 PDB 中进行访问和操作
Comments NOTHING