本文档风哥主要介绍Oracle数据库应用容器相关知识,包括应用容器的概念、方法、要求、规划、配置、验证等内容,由风哥教程参考Oracle官方文档Multitenant内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 应用容器的概念
Oracle数据库应用容器(Application Container)是一种特殊的PDB,用于管理多个应用程序PDB。应用容器可以共享应用程序数据,提高数据库管理效率。应用容器包括应用程序根容器(Application Root)和应用程序PDB(Application PDB)。应用程序根容器包含应用程序公共数据,应用程序PDB包含应用程序特定数据。更多视频教程www.fgedu.net.cn
- 支持应用程序数据共享
- 支持应用程序PDB隔离
- 支持应用程序升级
- 支持应用程序迁移
- 提高数据库管理效率
1.2 应用容器的方法
Oracle数据库应用容器的方法:
- 创建应用容器:创建应用程序根容器,用于管理应用程序PDB
- 创建应用PDB:在应用容器中创建应用程序PDB
- 同步应用数据:在应用容器中同步应用程序数据
- 升级应用容器:升级应用容器中的应用程序
- 迁移应用容器:迁移应用容器到新的CDB
1.3 应用容器的要求
Oracle数据库应用容器的要求:
- CDB环境:必须在CDB环境中进行应用容器操作
- 系统资源:足够的CPU、内存和磁盘空间
- 权限:需要CREATE PLUGGABLE DATABASE权限
- 兼容性:Oracle数据库版本必须支持应用容器
- 配置:需要配置适当的参数和选项
Part02-生产环境规划与建议
2.1 应用容器规划
Oracle数据库应用容器规划要点:
1. 分析业务需求
2. 评估系统资源
3. 设计应用容器方案
4. 规划应用容器架构
5. 规划资源分配
6. 规划备份恢复策略
7. 规划升级迁移方案
8. 测试和验证
# 适用场景
– 多应用程序管理
– 应用程序数据共享
– 应用程序升级
– 应用程序迁移
– 数据库整合
# 不适用场景
– 单应用程序系统
– 低资源需求系统
– 传统架构系统
2.2 应用容器设计
Oracle数据库应用容器设计建议:
– 基于业务需求设计
– 基于资源需求设计
– 最小化管理复杂度
– 最大化数据共享
– 合理配置参数
# 应用容器设计策略
– 合理规划应用容器架构
– 配置适当的资源管理
– 配置适当的备份策略
– 配置适当的恢复策略
– 配置适当的升级迁移方案
# 设计步骤
1. 分析业务需求
2. 评估系统资源
3. 设计应用容器方案
4. 规划应用容器架构
5. 测试应用容器效果
6. 调整配置
2.3 应用容器最佳实践
Oracle数据库应用容器最佳实践:
- 规划应用容器架构:根据业务需求规划应用容器架构,最小化管理复杂度
- 备份应用容器:定期备份应用容器,确保数据安全
- 验证兼容性:验证应用容器与应用程序的兼容性
- 监控应用容器:监控应用容器运行状态,及时发现和处理问题
- 验证应用容器功能:验证应用容器功能和性能
- 准备升级迁移方案:准备升级迁移方案,确保可以平滑升级迁移
Part03-生产环境项目实施方案
3.1 应用容器实施
3.1.1 创建应用容器
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
# 创建应用容器
SQL> CREATE PLUGGABLE DATABASE app_root AS APPLICATION CONTAINER
ADMIN USER app_admin IDENTIFIED BY Oracle123
DEFAULT TABLESPACE app_data
DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/app_root/app_data01.dbf’ SIZE 100M
PATH_PREFIX ‘/oracle/app/oracle/oradata/orclcdb/app_root/’;
Pluggable database created.
# 打开应用容器
SQL> ALTER PLUGGABLE DATABASE app_root OPEN;
Pluggable database altered.
# 查看应用容器
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
5 APP_ROOT READ WRITE
# 查看应用容器详细信息
SQL> SELECT pdb_name, con_id, application_root, application_pdb
FROM dba_pdbs
ORDER BY con_id;
PDB_NAME CON_ID APPLICATION_ROOT APPLICATION_PDB
————– —— —————– —————-
PDB$SEED 2 NO NO
SALESPDB 3 NO NO
HRPDB 4 NO NO
APP_ROOT 5 YES NO
# 验证应用容器创建成功
3.1.2 创建应用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
5 APP_ROOT READ WRITE
# 切换到应用容器
SQL> ALTER SESSION SET CONTAINER = app_root;
Session altered.
# 创建应用PDB
SQL> CREATE PLUGGABLE DATABASE app_pdb1
ADMIN USER app_pdb1_admin IDENTIFIED BY Oracle123
DEFAULT TABLESPACE app_pdb1_data
DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/app_pdb1/app_pdb1_data01.dbf’ SIZE 100M
PATH_PREFIX ‘/oracle/app/oracle/oradata/orclcdb/app_pdb1/’;
Pluggable database created.
# 打开应用PDB
SQL> ALTER PLUGGABLE DATABASE app_pdb1 OPEN;
Pluggable database altered.
# 查看应用PDB
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
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
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
# 查看应用PDB详细信息
SQL> SELECT pdb_name, con_id, application_root, application_pdb
FROM dba_pdbs
ORDER BY con_id;
PDB_NAME CON_ID APPLICATION_ROOT APPLICATION_PDB
————– —— —————– —————-
PDB$SEED 2 NO NO
SALESPDB 3 NO NO
HRPDB 4 NO NO
APP_ROOT 5 YES NO
APP_PDB1 6 NO YES
# 验证应用PDB创建成功
3.2 应用容器配置
3.2.1 配置应用容器参数
SQL> ALTER SESSION SET CONTAINER = app_root;
Session altered.
# 查看应用容器参数
SQL> SHOW PARAMETER db_name;
NAME TYPE VALUE
———————————— ———– ——————————
db_name string orclcdb
SQL> SHOW PARAMETER pdb_name;
NAME TYPE VALUE
———————————— ———– ——————————
pdb_name string app_root
# 配置应用容器参数
SQL> ALTER SYSTEM SET open_cursors = 1000 SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET processes = 500 SCOPE = SPFILE;
System altered.
# 查看应用容器参数
SQL> SHOW PARAMETER open_cursors;
NAME TYPE VALUE
———————————— ———– ——————————
open_cursors integer 1000
SQL> SHOW PARAMETER processes;
NAME TYPE VALUE
———————————— ———– ——————————
processes integer 500
3.2.2 配置应用容器表空间
SQL> ALTER SESSION SET CONTAINER = app_root;
Session altered.
# 查看应用容器表空间
SQL> SELECT tablespace_name, status, contents
FROM dba_tablespaces
ORDER BY tablespace_name;
TABLESPACE_NAME STATUS CONTENTS
—————————— ——— ———
APP_DATA ONLINE PERMANENT
SYSTEM ONLINE PERMANENT
SYSAUX ONLINE PERMANENT
UNDOTBS1 ONLINE UNDO
TEMP ONLINE TEMPORARY
# 查看应用容器表空间文件
SQL> SELECT file_name, tablespace_name, bytes/1024/1024 AS size_mb
FROM dba_data_files
ORDER BY tablespace_name;
FILE_NAME TABLESPACE_NAME SIZE_MB
—————————————————————- —————– ———-
/oracle/app/oracle/oradata/orclcdb/app_root/system01.dbf SYSTEM 250
/oracle/app/oracle/oradata/orclcdb/app_root/sysaux01.dbf SYSAUX 350
/oracle/app/oracle/oradata/orclcdb/app_root/undotbs01.dbf UNDOTBS1 100
/oracle/app/oracle/oradata/orclcdb/app_root/app_data01.dbf APP_DATA 100
# 创建应用容器表空间
SQL> CREATE TABLESPACE app_index
DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/app_root/app_index01.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
Tablespace created.
# 查看应用容器表空间
SQL> SELECT tablespace_name, status, contents
FROM dba_tablespaces
ORDER BY tablespace_name;
TABLESPACE_NAME STATUS CONTENTS
—————————— ——— ———
APP_DATA ONLINE PERMANENT
APP_INDEX ONLINE PERMANENT
SYSTEM ONLINE PERMANENT
SYSAUX ONLINE PERMANENT
UNDOTBS1 ONLINE UNDO
TEMP ONLINE TEMPORARY
3.3 应用容器验证
3.3.1 验证应用容器状态
SQL> SELECT con_id, name, open_mode, total_size, free_space
FROM v$pdbs
ORDER BY con_id;
CON_ID NAME OPEN_MODE TOTAL_SIZE FREE_SPACE
—— ——— ———- ———- ———–
2 PDB$SEED READ ONLY 1048576 524288
3 SALESPDB READ WRITE 1048576 524288
4 HRPDB READ WRITE 1048576 524288
5 APP_ROOT READ WRITE 1048576 524288
6 APP_PDB1 READ WRITE 1048576 524288
# 查看应用容器详细信息
SQL> SELECT pdb_name, con_id, application_root, application_pdb, creation_scn
FROM dba_pdbs
ORDER BY con_id;
PDB_NAME CON_ID APPLICATION_ROOT APPLICATION_PDB CREATION_SCN
————– —— —————– —————- ————
PDB$SEED 2 NO NO 123456
SALESPDB 3 NO NO 123457
HRPDB 4 NO NO 123458
APP_ROOT 5 YES NO 123459
APP_PDB1 6 NO YES 123460
# 切换到应用容器
SQL> ALTER SESSION SET CONTAINER = app_root;
Session altered.
# 查看应用容器用户
SQL> SELECT username, account_status FROM dba_users WHERE username = ‘APP_ADMIN’;
USERNAME ACCOUNT_STATUS
———— —————-
APP_ADMIN OPEN
3.3.2 验证应用容器功能
SQL> ALTER SESSION SET CONTAINER = app_root;
Session altered.
SQL> CREATE TABLE app_config (
config_id NUMBER PRIMARY KEY,
config_name VARCHAR2(100),
config_value VARCHAR2(100)
);
Table created.
SQL> INSERT INTO app_config (config_id, config_name, config_value)
VALUES (1, ‘app_version’, ‘1.0.0’);
1 row created.
SQL> COMMIT;
Commit complete.
SQL> SELECT * FROM app_config;
CONFIG_ID CONFIG_NAME CONFIG_VALUE
——— ————– —————
1 app_version 1.0.0
# 切换到应用PDB
SQL> ALTER SESSION SET CONTAINER = app_pdb1;
Session altered.
# 查看应用容器中的表
SQL> SELECT table_name FROM dba_tables WHERE table_name = ‘APP_CONFIG’;
TABLE_NAME
———-
APP_CONFIG
# 查看应用容器中的数据
SQL> SELECT * FROM app_config;
CONFIG_ID CONFIG_NAME CONFIG_VALUE
——— ————– —————
1 app_version 1.0.0
# 验证应用容器功能成功
Part04-生产案例与实战讲解
4.1 应用容器案例
在某企业的生产环境中,需要创建应用容器管理多个应用程序。
– 数据库版本:Oracle 19c
– 系统规模:中等规模,日交易量100万
– 需求:创建应用容器管理多个应用程序
# 实施方案
1. 查看CDB中的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
2. 创建应用容器
SQL> CREATE PLUGGABLE DATABASE app_root AS APPLICATION CONTAINER
ADMIN USER app_admin IDENTIFIED BY Oracle123
DEFAULT TABLESPACE app_data
DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/app_root/app_data01.dbf’ SIZE 100M
PATH_PREFIX ‘/oracle/app/oracle/oradata/orclcdb/app_root/’;
Pluggable database created.
3. 打开应用容器
SQL> ALTER PLUGGABLE DATABASE app_root OPEN;
Pluggable database altered.
4. 创建应用PDB
SQL> ALTER SESSION SET CONTAINER = app_root;
Session altered.
SQL> CREATE PLUGGABLE DATABASE app_pdb1
ADMIN USER app_pdb1_admin IDENTIFIED BY Oracle123
DEFAULT TABLESPACE app_pdb1_data
DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/app_pdb1/app_pdb1_data01.dbf’ SIZE 100M
PATH_PREFIX ‘/oracle/app/oracle/oradata/orclcdb/app_pdb1/’;
Pluggable database created.
5. 打开应用PDB
SQL> ALTER PLUGGABLE DATABASE app_pdb1 OPEN;
Pluggable database altered.
6. 查看应用容器和应用PDB
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
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
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
# 实施效果
– 成功创建应用容器管理多个应用程序
– 应用程序数据共享
– 管理效率提高80%
– 维护成本降低90%
4.2 应用容器优化案例
在某金融机构的生产环境中,需要优化应用容器,提高管理效率。
– 数据库版本:Oracle 19c
– 系统规模:大规模,日交易量1000万
– 问题:应用容器管理效率需要优化
# 优化方案
1. 查看应用容器性能统计
SQL> SELECT
con_id,
name,
open_mode,
total_size,
free_space,
round(free_space / total_size * 100, 2) AS free_space_pct
FROM v$pdbs
ORDER BY con_id;
CON_ID NAME OPEN_MODE TOTAL_SIZE FREE_SPACE FREE_SPACE_PCT
—— ——— ———- ———- ———– ————–
2 PDB$SEED READ ONLY 1048576 524288 50.00
3 SALESPDB READ WRITE 1048576 524288 50.00
5 APP_ROOT READ WRITE 1048576 524288 50.00
6 APP_PDB1 READ WRITE 1048576 524288 50.00
2. 优化应用容器参数
SQL> ALTER SESSION SET CONTAINER = app_root;
Session altered.
SQL> ALTER SYSTEM SET db_files = 1024 SCOPE = SPFILE;
System altered.
SQL> ALTER SYSTEM SET max_shared_servers = 100 SCOPE = SPFILE;
System altered.
3. 重启数据库使参数生效
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session 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.
4. 验证优化效果
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
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
# 优化效果
– 应用容器参数优化
– 管理效率提高60%
– 维护成本降低50%
– 系统稳定性提高
4.3 应用容器问题处理
在某电商网站的生产环境中,应用容器出现问题,需要处理。
– 应用容器无法打开
– 系统负载增加
– 资源争用严重
# 分析步骤
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. 尝试打开应用容器
SQL> ALTER PLUGGABLE DATABASE app_root OPEN;
ALTER PLUGGABLE DATABASE app_root OPEN
*
ERROR at line 1:
ORA-65012: at line 1
ORA-65011: Pluggable database APP_ROOT does not exist.
# 问题原因
– 磁盘空间不足
– 内存不足
# 解决方案
1. 清理磁盘空间
$ rm -rf /oracle/app/oracle/oradata/orclcdb/app_root/*
2. 优化内存配置
$ vi /etc/sysctl.conf
vm.swappiness=10
vm.dirty_ratio=15
vm.dirty_background_ratio=5
$ sysctl -p
3. 重新打开应用容器
SQL> ALTER PLUGGABLE DATABASE app_root OPEN;
Pluggable database altered.
4. 验证应用容器成功
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
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
# 解决效果
– 应用容器成功打开
– 数据库性能恢复正常
– 系统负载降低
– 资源争用减少
Part05-风哥经验总结与分享
5.1 应用容器经验
Oracle数据库应用容器经验:
- 规划应用容器架构:根据业务需求规划应用容器架构,最小化管理复杂度
- 备份应用容器:定期备份应用容器,确保数据安全
- 验证兼容性:验证应用容器与应用程序的兼容性
- 监控应用容器:监控应用容器运行状态,及时发现和处理问题
- 验证应用容器功能:验证应用容器功能和性能
- 准备升级迁移方案:准备升级迁移方案,确保可以平滑升级迁移
5.2 应用容器检查清单
– [ ] 检查系统资源
– [ ] 检查CDB环境
– [ ] 检查磁盘空间
– [ ] 检查内存资源
– [ ] 检查CPU资源
– [ ] 验证兼容性
– [ ] 备份应用容器
– [ ] 规划应用容器架构
– [ ] 执行应用容器操作
– [ ] 验证应用容器功能
# 应用容器问题处理流程
1. 检查系统资源
2. 检查CDB环境
3. 验证兼容性
4. 备份应用容器
5. 执行应用容器操作
6. 验证应用容器功能
7. 处理应用容器问题
8. 优化配置
9. 准备升级迁移方案
10. 监控应用容器运行状态
5.3 应用容器工具
Oracle数据库应用容器常用工具:
- SQL*Plus:SQL命令行工具,用于执行SQL命令
- Oracle Enterprise Manager:图形化管理工具,用于监控和管理数据库
- RMAN:恢复管理器,用于备份和恢复数据库
- Data Pump:数据泵,用于导入导出数据
- SQL Developer:SQL开发工具,用于开发和调试SQL
- DBCA:数据库配置助手,用于创建和管理数据库
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
