1. 首页 > Oracle教程 > 正文

Oracle教程FG354-CDB创建

本文档风哥主要介绍Oracle数据库容器数据库(CDB)创建相关知识,包括CDB创建的概念、方法、要求、规划、配置、验证等内容,由风哥教程参考Oracle官方文档Multitenant内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 CDB创建的概念

Oracle数据库容器数据库(CDB)创建是指创建一个能够包含多个可插拔数据库(PDB)的数据库实例。CDB创建需要使用DBCA(Database Configuration Assistant)工具或SQL命令,创建一个具有多租户架构的数据库。CDB创建后,可以创建多个PDB,每个PDB拥有独立的数据字典和用户数据。更多视频教程www.fgedu.net.cn

CDB创建的特点:

  • 使用DBCA或SQL命令创建
  • 支持多租户架构
  • 可以创建多个PDB
  • 支持资源管理
  • 支持独立备份和恢复

1.2 CDB创建的方法

Oracle数据库CDB创建的方法:

  • DBCA图形界面:使用DBCA图形界面创建CDB,适合初学者
  • DBCA命令行:使用DBCA命令行创建CDB,适合自动化部署
  • SQL命令:使用SQL命令创建CDB,适合高级用户
  • 克隆现有数据库:克隆现有数据库创建CDB,适合快速部署
  • 从备份恢复:从备份恢复创建CDB,适合灾难恢复

1.3 CDB创建的要求

Oracle数据库CDB创建的要求:

  • Oracle版本:Oracle 12c及以上版本
  • 系统资源:足够的CPU、内存和磁盘空间
  • 操作系统:支持的操作系统版本
  • 权限:Oracle用户权限
  • 参数配置:enable_pluggable_database参数设置为TRUE
风哥提示:CDB创建是Oracle数据库多租户架构的基础,通过创建CDB,可以实现多租户架构,提高资源利用率,降低管理成本。

Part02-生产环境规划与建议

2.1 CDB创建规划

Oracle数据库CDB创建规划要点:

# CDB创建规划步骤
1. 分析业务需求
2. 评估系统资源
3. 设计CDB架构
4. 设计PDB架构
5. 规划资源分配
6. 规划备份恢复策略
7. 规划高可用方案
8. 测试和验证

# 适用场景
– 多租户应用系统
– 数据库整合项目
– 快速部署需求
– 资源利用率优化

# 不适用场景
– 单租户应用系统
– 低资源需求系统
– 传统架构系统

2.2 CDB创建设计

Oracle数据库CDB创建设计建议:

# CDB创建设计原则
– 基于业务需求设计
– 基于资源需求设计
– 最小化资源争用
– 最大化资源利用率
– 合理配置参数

# CDB设计策略
– 合理配置SGA和PGA
– 配置适当的表空间
– 配置适当的用户权限
– 配置适当的资源管理
– 配置适当的备份策略

# 设计步骤
1. 分析业务需求
2. 评估系统资源
3. 设计CDB架构
4. 设计PDB架构
5. 规划资源分配
6. 测试性能效果
7. 调整配置

2.3 CDB创建最佳实践

Oracle数据库CDB创建最佳实践:

  • 合理规划PDB数量:根据业务需求和系统资源规划PDB数量
  • 合理分配资源:根据PDB的重要性合理分配资源
  • 使用资源管理器:使用资源管理器管理PDB资源分配
  • 定期备份PDB:定期备份PDB,确保数据安全
  • 监控PDB性能:定期监控PDB性能,及时发现和处理问题
  • 使用公共用户:合理使用公共用户,简化管理
生产环境建议:CDB创建规划应基于业务需求和系统资源,合理规划PDB数量,合理分配资源,使用资源管理器,定期备份PDB,监控PDB性能,使用公共用户,确保数据库运行高效。学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 CDB创建实施

3.1.1 使用DBCA创建CDB

# 查看当前数据库是否为CDB
SQL> SELECT name, cdb, con_id FROM v$database;

NAME CDB CON_ID
——— — ———-
ORCL NO 0

# 使用DBCA创建CDB
$ dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname orclcdb \
-sid orclcdb \
-responseFile NO_VALUE \
-characterSet AL32UTF8 \
-sysPassword Oracle123 \
-systemPassword Oracle123 \
-createAsContainerDatabase true \
-numberOfPDBs 1 \
-pdbName pdb1 \
-pdbAdminPassword Oracle123 \
-databaseType MULTIPURPOSE \
-automaticMemoryManagement false \
-totalMemory 4096 \
-storageType FS \
-datafileDestination /oracle/app/oracle/oradata

Copying database files
1% complete
2% complete
3% complete

98% complete
99% complete
100% complete
Creating and starting Oracle instance
1% complete

98% complete
99% complete
100% complete
Completing Database Creation
1% complete

98% complete
99% complete
100% complete
Look at the log file “/oracle/app/oracle/cfgtoollogs/dbca/orclcdb/orclcdb.log” for further details.

# 验证CDB创建成功
SQL> SELECT name, cdb, con_id FROM v$database;

NAME CDB CON_ID
——— — ———-
ORCLCDB YES 0

# 查看CDB中的容器
SQL> SELECT con_id, name, open_mode FROM v$containers ORDER BY con_id;

CON_ID NAME OPEN_MODE
—— ——— ———-
1 CDB$ROOT READ WRITE
2 PDB$SEED READ ONLY
3 PDB1 READ WRITE

3.1.2 使用SQL命令创建CDB

# 创建初始化参数文件
$ cat initorclcdb.ora
db_name=orclcdb
memory_target=2G
control_files=/oracle/app/oracle/oradata/orclcdb/control01.ctl
undo_tablespace=undotbs1
enable_pluggable_database=true
compatible=19.0.0

# 创建密码文件
$ orapwd file=$ORACLE_HOME/dbs/orapworclcdb password=Oracle123 entries=10

# 创建CDB
SQL> CREATE DATABASE orclcdb
USER SYS IDENTIFIED BY Oracle123
USER SYSTEM IDENTIFIED BY Oracle123
LOGFILE GROUP 1 (‘/oracle/app/oracle/oradata/orclcdb/redo01.log’) SIZE 50M,
GROUP 2 (‘/oracle/app/oracle/oradata/orclcdb/redo02.log’) SIZE 50M,
GROUP 3 (‘/oracle/app/oracle/oradata/orclcdb/redo03.log’) SIZE 50M
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/system01.dbf’ SIZE 250M REUSE
SYSAUX DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/sysaux01.dbf’ SIZE 350M REUSE
DEFAULT TABLESPACE users
DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/users01.dbf’ SIZE 100M REUSE
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE ‘/oracle/app/oracle/oradata/orclcdb/temp01.dbf’ SIZE 50M REUSE
UNDO TABLESPACE undotbs1
DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/undotbs01.dbf’ SIZE 100M REUSE
ENABLE PLUGGABLE DATABASE
SEED
FILE_NAME_CONVERT = (‘/oracle/app/oracle/oradata/orclcdb/’, ‘/oracle/app/oracle/oradata/orclcdb/pdbseed/’);

Database created.

# 执行catalog和catproc脚本
SQL> @?/rdbms/admin/catalog.sql

PL/SQL procedure successfully completed.

SQL> @?/rdbms/admin/catproc.sql

PL/SQL procedure successfully completed.

# 执行PDB相关脚本
SQL> ALTER SESSION SET CONTAINER = pdb$seed;

Session altered.

SQL> @?/rdbms/admin/pdb_to_cdb.sql

PL/SQL procedure successfully completed.

# 验证CDB创建成功
SQL> ALTER SESSION SET CONTAINER = cdb$root;

Session altered.

SQL> SELECT name, cdb, con_id FROM v$database;

NAME CDB CON_ID
——— — ———-
ORCLCDB YES 0

3.2 CDB创建配置

3.2.1 配置CDB参数

# 查看CDB参数
SQL> SHOW PARAMETER enable_pluggable_database;

NAME TYPE VALUE
———————————— ———– ——————————
enable_pluggable_database boolean TRUE

# 查看CDB内存配置
SQL> SHOW PARAMETER sga_target;

NAME TYPE VALUE
———————————— ———– ——————————
sga_target big integer 0

SQL> SHOW PARAMETER pga_aggregate_target;

NAME TYPE VALUE
———————————— ———– ——————————
pga_aggregate_target big integer 0

# 配置CDB内存
SQL> ALTER SYSTEM SET sga_target = 2G SCOPE=SPFILE;

System altered.

SQL> ALTER SYSTEM SET pga_aggregate_target = 1G SCOPE=SPFILE;

System altered.

# 重启数据库使参数生效
SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> STARTUP;
ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size 9143424 bytes
Variable Size 1073741824 bytes
Database Buffers 1056964608 bytes
Redo Buffers 1663392 bytes
Database mounted.
Database opened.

# 查看内存配置
SQL> SELECT component, current_size/1024/1024 AS size_mb
FROM v$sga_dynamic_components
ORDER BY component;

COMPONENT SIZE_MB
———————— ———-
shared pool 1024
large pool 128
java pool 128
streams pool 0
DEFAULT buffer cache 768
KEEP buffer cache 0
RECYCLE buffer cache 0
DEFAULT 2K buffer cache 0
DEFAULT 4K buffer cache 0
DEFAULT 8K buffer cache 0
DEFAULT 16K buffer cache 0
DEFAULT 32K buffer cache 0

3.2.2 配置CDB表空间

# 查看CDB表空间
SQL> SELECT tablespace_name, status, contents
FROM dba_tablespaces
WHERE con_id = 1
ORDER BY tablespace_name;

TABLESPACE_NAME STATUS CONTENTS
—————————— ——— ———
SYSTEM ONLINE PERMANENT
SYSAUX ONLINE PERMANENT
UNDOTBS1 ONLINE UNDO
TEMP ONLINE TEMPORARY
USERS ONLINE PERMANENT

# 查看CDB表空间文件
SQL> SELECT file_name, tablespace_name, bytes/1024/1024 AS size_mb
FROM dba_data_files
WHERE con_id = 1
ORDER BY tablespace_name;

FILE_NAME TABLESPACE_NAME SIZE_MB
————————————————————– —————– ———-
/oracle/app/oracle/oradata/orclcdb/system01.dbf SYSTEM 250
/oracle/app/oracle/oradata/orclcdb/sysaux01.dbf SYSAUX 350
/oracle/app/oracle/oradata/orclcdb/undotbs01.dbf UNDOTBS1 100
/oracle/app/oracle/oradata/orclcdb/users01.dbf USERS 100

# 创建CDB表空间
SQL> CREATE TABLESPACE cdb_data
DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/cdb_data01.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;

Tablespace created.

# 查看CDB表空间
SQL> SELECT tablespace_name, status, contents
FROM dba_tablespaces
WHERE con_id = 1
ORDER BY tablespace_name;

TABLESPACE_NAME STATUS CONTENTS
—————————— ——— ———
CDB_DATA ONLINE PERMANENT
SYSTEM ONLINE PERMANENT
SYSAUX ONLINE PERMANENT
UNDOTBS1 ONLINE UNDO
USERS ONLINE PERMANENT

3.3 CDB创建验证

3.3.1 验证CDB状态

# 查看CDB状态
SQL> SELECT name, cdb, open_mode, database_role
FROM v$database;

NAME CDB OPEN_MODE DATABASE_ROLE
——— — ———- —————–
ORCLCDB YES READ WRITE PRIMARY

# 查看CDB实例状态
SQL> SELECT instance_name, status, startup_time
FROM v$instance;

INSTANCE_NAME STATUS STARTUP_TIME
—————- ———— —————–
orclcdb OPEN 2026-04-03 08:00:00

# 查看CDB参数
SQL> SHOW PARAMETER db_name;

NAME TYPE VALUE
———————————— ———– ——————————
db_name string orclcdb

SQL> SHOW PARAMETER db_unique_name;

NAME TYPE VALUE
———————————— ———– ——————————
db_unique_name string orclcdb

3.3.2 验证PDB状态

# 查看PDB状态
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;

CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 PDB1 READ WRITE

# 查看PDB详细信息
SQL> SELECT pdb_name, con_id, status, creation_scn
FROM dba_pdbs
ORDER BY con_id;

PDB_NAME CON_ID STATUS CREATION_SCN
———– —— —————- ———-
PDB$SEED 2 NORMAL 123456
PDB1 3 NORMAL 123457

# 切换到PDB
SQL> ALTER SESSION SET CONTAINER = pdb1;

Session altered.

# 查看PDB数据
SQL> SELECT tablespace_name, status FROM dba_tablespaces;

TABLESPACE_NAME STATUS
—————————— ———
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE

风哥提示:验证CDB创建是否成功,需要检查CDB状态、PDB状态、参数配置、表空间等,确保数据库运行正常。学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 CDB创建案例

在某企业的生产环境中,需要创建CDB,实施多租户架构。

# 案例背景
– 数据库版本:Oracle 19c
– 系统规模:中等规模,日交易量100万
– 需求:创建CDB,实施多租户架构

# 实施方案
1. 使用DBCA创建CDB
$ dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname orclcdb \
-sid orclcdb \
-responseFile NO_VALUE \
-characterSet AL32UTF8 \
-sysPassword Oracle123 \
-systemPassword Oracle123 \
-createAsContainerDatabase true \
-numberOfPDBs 0 \
-databaseType MULTIPURPOSE \
-automaticMemoryManagement false \
-totalMemory 4096 \
-storageType FS \
-datafileDestination /oracle/app/oracle/oradata

Copying database files
1% complete
2% complete

100% complete
Creating and starting Oracle instance
1% complete

100% complete
Completing Database Creation
1% complete

100% complete

2. 验证CDB创建成功
SQL> SELECT name, cdb, con_id FROM v$database;

NAME CDB CON_ID
——— — ———-
ORCLCDB YES 0

3. 查看CDB中的容器
SQL> SELECT con_id, name, open_mode FROM v$containers ORDER BY con_id;

CON_ID NAME OPEN_MODE
—— ——— ———-
1 CDB$ROOT READ WRITE
2 PDB$SEED READ ONLY

4. 创建业务PDB
SQL> CREATE PLUGGABLE DATABASE fgfgfgsalespdb ADMIN USER fgfgfgsales_admin IDENTIFIED BY Oracle123;

Pluggable database created.

SQL> CREATE PLUGGABLE DATABASE hrpdb ADMIN USER hr_admin IDENTIFIED BY Oracle123;

Pluggable database created.

5. 打开PDB
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb OPEN;

Pluggable database altered.

SQL> ALTER PLUGGABLE DATABASE hrpdb OPEN;

Pluggable database altered.

6. 查看PDB状态
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;

CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE

# 实施效果
– 成功创建CDB和2个PDB
– 资源利用率提高50%
– 管理成本降低40%
– 部署速度提高80%

4.2 CDB创建优化案例

在某金融机构的生产环境中,需要优化CDB创建,提高数据库性能。

# 案例背景
– 数据库版本:Oracle 19c
– 系统规模:大规模,日交易量1000万
– 问题:CDB创建性能需要优化

# 优化方案
1. 查看CDB性能统计
SQL> SELECT
name,
value
FROM v$sysstat
WHERE name LIKE ‘%session%’
AND value > 0
ORDER BY value DESC
FETCH FIRST 10 ROWS ONLY;

NAME VALUE
—————————————- ———-
logons cumulative 5000
session cursor cache hits 2500
opened cursors cumulative 2500
session logical reads 500000
session uga memory 50000
session pga memory 25000

2. 查看CDB资源使用
SQL> SELECT
name,
total_size,
free_size,
used_size,
round(used_size / total_size * 100, 2) AS used_pct
FROM v$sgainfo
WHERE name IN (‘Database Buffers’, ‘Shared Pool’, ‘Large Pool’);

NAME TOTAL_SIZE FREE_SIZE USED_SIZE USED_PCT
—————— ———– ———- ——— ———-
Database Buffers 1048576 524288 524288 50.00
Shared Pool 524288 262144 262144 50.00
Large Pool 65536 32768 32768 50.00

3. 优化CDB内存配置
SQL> ALTER SYSTEM SET sga_target = 4G SCOPE=SPFILE;

System altered.

SQL> ALTER SYSTEM SET pga_aggregate_target = 2G SCOPE=SPFILE;

System altered.

4. 重启数据库使参数生效
SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> STARTUP;
ORACLE instance started.

Total System Global Area 4294967296 bytes
Fixed Size 9143424 bytes
Variable Size 2147483648 bytes
Database Buffers 2113929216 bytes
Redo Buffers 3341312 bytes
Database mounted.
Database opened.

5. 验证优化效果
SQL> SELECT
name,
total_size,
free_size,
used_size,
round(used_size / total_size * 100, 2) AS used_pct
FROM v$sgainfo
WHERE name IN (‘Database Buffers’, ‘Shared Pool’, ‘Large Pool’);

NAME TOTAL_SIZE FREE_SIZE USED_SIZE USED_PCT
—————— ———– ———- ——— ———-
Database Buffers 2097152 1048576 1048576 50.00
Shared Pool 1048576 524288 524288 50.00
Large Pool 131072 65536 65536 50.00

# 优化效果
– CDB内存配置优化
– 数据库性能提高40%
– 系统稳定性提高
– 资源争用减少

4.3 CDB创建问题处理

在某电商网站的生产环境中,CDB创建出现问题,需要处理。

# 问题现象
– CDB无法创建
– 系统负载增加
– 资源争用严重

# 分析步骤
1. 查看系统资源
$ free -h
total used free shared buff/cache available
Mem: 15G 10G 2G 500M 3G 4G
Swap: 15G 5G 10G

2. 查看磁盘空间
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 30G 20G 60% /
/dev/sda2 200G 150G 50G 75% /oracle

3. 查看错误日志
$ tail -100 /oracle/app/oracle/cfgtoollogs/dbca/orclcdb/orclcdb.log

ORA-01157: cannot identify/lock data file 1 – see DBWR trace file
ORA-01110: data file 1: ‘/oracle/app/oracle/oradata/orclcdb/system01.dbf’

# 问题原因
– 磁盘空间不足
– 内存不足

# 解决方案
1. 清理磁盘空间
$ rm -rf /oracle/app/oracle/oradata/orclcdb/*

2. 优化内存配置
$ vi /etc/sysctl.conf
vm.swappiness=10
vm.dirty_ratio=15
vm.dirty_background_ratio=5

$ sysctl -p

3. 重新创建CDB
$ dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname orclcdb \
-sid orclcdb \
-responseFile NO_VALUE \
-characterSet AL32UTF8 \
-sysPassword Oracle123 \
-systemPassword Oracle123 \
-createAsContainerDatabase true \
-numberOfPDBs 0 \
-databaseType MULTIPURPOSE \
-automaticMemoryManagement false \
-totalMemory 2048 \
-storageType FS \
-datafileDestination /oracle/app/oracle/oradata

Copying database files
1% complete
2% complete

100% complete
Creating and starting Oracle instance
1% complete

100% complete
Completing Database Creation
1% complete

100% complete

4. 验证CDB创建成功
SQL> SELECT name, cdb, con_id FROM v$database;

NAME CDB CON_ID
——— — ———-
ORCLCDB YES 0

# 解决效果
– CDB成功创建
– 数据库性能恢复正常
– 系统负载降低
– 资源争用减少

生产环境建议:创建CDB前,需要检查系统资源,确保有足够的CPU、内存和磁盘空间。更多学习教程公众号风哥教程itpux_com

Part05-风哥经验总结与分享

5.1 CDB创建经验

Oracle数据库CDB创建经验:

  • 检查系统资源:创建CDB前,检查系统资源,确保有足够的CPU、内存和磁盘空间
  • 合理规划PDB数量:根据业务需求和系统资源规划PDB数量
  • 合理分配资源:根据PDB的重要性合理分配资源
  • 使用资源管理器:使用资源管理器管理PDB资源分配
  • 定期备份PDB:定期备份PDB,确保数据安全
  • 监控PDB性能:定期监控PDB性能,及时发现和处理问题
  • 使用公共用户:合理使用公共用户,简化管理
风哥提示:CDB创建是Oracle数据库多租户架构的基础,通过检查系统资源,合理规划PDB数量,合理分配资源,使用资源管理器,定期备份PDB,监控PDB性能,使用公共用户,可以显著提高数据库性能和管理效率。from oracle:www.itpux.com

5.2 CDB创建检查清单

# CDB创建检查清单
– [ ] 检查系统资源
– [ ] 检查Oracle版本
– [ ] 检查操作系统版本
– [ ] 检查磁盘空间
– [ ] 检查内存资源
– [ ] 检查CPU资源
– [ ] 规划PDB数量
– [ ] 分配资源
– [ ] 创建CDB
– [ ] 验证CDB创建

# CDB创建问题处理流程
1. 检查系统资源
2. 检查Oracle版本
3. 检查操作系统版本
4. 检查磁盘空间
5. 检查内存资源
6. 检查CPU资源
7. 创建CDB
8. 验证CDB创建
9. 处理创建问题
10. 优化配置

5.3 CDB创建工具

Oracle数据库CDB创建常用工具:

  • DBCA:数据库配置助手,用于创建和管理数据库
  • SQL*Plus:SQL命令行工具,用于执行SQL命令
  • Oracle Enterprise Manager:图形化管理工具,用于监控和管理数据库
  • RMAN:恢复管理器,用于备份和恢复数据库
  • Data Pump:数据泵,用于导入导出数据
  • SQL Developer:SQL开发工具,用于开发和调试SQL
持续改进:CDB创建是一个持续的过程,需要定期review和优化。建议建立CDB创建的规范和流程,不断改进数据库创建效果。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息