1. 项目概述
作为一名在数据库领域摸爬滚打多年的老DBA,我深知Oracle在Linux系统上的安装过程对新手来说有多棘手。不同于Windows的一键安装包,Linux环境下需要处理各种依赖关系、内核参数调整和权限配置。这篇教程将用最直白的方式,手把手带你完成从零开始的完整安装过程。
注意:本教程基于Oracle 19c和CentOS 7/8编写,但核心步骤适用于大多数Linux发行版和Oracle 11g/12c/21c版本
2. 环境准备
2.1 硬件需求检查
在开始前,建议先确认服务器配置是否达标:
- 内存:最小4GB(生产环境建议16GB+)
- 交换空间:内存1.5-2倍(可用
free -h查看) - 磁盘空间:
- /tmp目录至少1GB
- 安装目录建议50GB+
- 数据文件目录根据业务需求
bash复制# 检查内存和交换空间
free -h
# 检查磁盘空间
df -h
2.2 操作系统配置
2.2.1 关闭SELinux
编辑/etc/selinux/config文件:
bash复制SELINUX=disabled
执行setenforce 0立即生效
2.2.2 防火墙配置
开放Oracle监听端口(默认1521):
bash复制firewall-cmd --permanent --add-port=1521/tcp
firewall-cmd --reload
2.2.3 安装依赖包
CentOS/RHEL:
bash复制yum install -y binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel
3. Oracle软件安装
3.1 创建Oracle用户和组
bash复制groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle
3.2 配置内核参数
编辑/etc/sysctl.conf,添加:
bash复制fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
执行sysctl -p生效
3.3 配置用户环境变量
编辑/home/oracle/.bash_profile:
bash复制export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
3.4 安装包解压与运行
bash复制unzip linuxx64_193000_db_home.zip -d $ORACLE_HOME
cd $ORACLE_HOME
./runInstaller
常见问题:如果图形界面无法启动,可添加
-ignorePrereq -silent参数进行静默安装
4. 数据库创建与配置
4.1 使用DBCA创建数据库
bash复制dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname orcl \
-sid orcl \
-responseFile NO_VALUE \
-characterSet AL32UTF8 \
-memoryPercentage 40 \
-emConfiguration LOCAL \
-datafileDestination /u01/oradata \
-redoLogFileSize 200 \
-recoveryAreaDestination /u01/fra \
-storageType FS \
-sampleSchema true
4.2 监听器配置
bash复制netca -silent -responseFile $ORACLE_HOME/assistants/netca/netca.rsp
4.3 服务自启动配置
创建/etc/init.d/oracle服务脚本:
bash复制#!/bin/bash
# chkconfig: 345 99 10
case "$1" in
start)
su - oracle -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
;;
stop)
su - oracle -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
设置权限并加入服务:
bash复制chmod 755 /etc/init.d/oracle
chkconfig --add oracle
5. 安装后验证与优化
5.1 基础连接测试
bash复制sqlplus / as sysdba
SQL> select status from v$instance;
5.2 关键参数检查
sql复制-- 检查内存参数
show parameter sga_target
show parameter pga_aggregate_target
-- 检查字符集
select * from nls_database_parameters where parameter like '%CHARACTERSET%';
5.3 性能优化建议
- 调整SGA/PGA大小(通常SGA占内存60%,PGA占20%)
- 开启AWR自动快照:
sql复制exec dbms_workload_repository.modify_snapshot_settings(interval=>60);
- 配置自动扩展表空间:
sql复制ALTER DATABASE DATAFILE '/u01/oradata/orcl/system01.dbf' AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
6. 常见问题排查
6.1 ORA-12514: TNS监听程序错误
检查$ORACLE_HOME/network/admin/listener.ora配置:
bash复制LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname)(PORT = 1521))
)
)
6.2 ORA-01034: ORACLE not available
检查实例状态:
bash复制ps -ef | grep pmon
sqlplus / as sysdba
startup
6.3 图形界面安装卡死
改用静默安装模式:
bash复制./runInstaller -silent -responseFile /path/to/response.rsp
7. 维护与备份基础
7.1 日常检查脚本
创建/home/oracle/check_db.sh:
bash复制#!/bin/bash
# 检查实例状态
sqlplus -s / as sysdba << EOF
set heading off
select 'Instance Status: '||status from v\$instance;
select 'Tablespace Usage:' from dual;
select tablespace_name,round(used_percent)||'%' from dba_tablespace_usage_metrics;
exit
EOF
7.2 RMAN基础备份
bash复制rman target /
RMAN> configure controlfile autobackup on;
RMAN> configure retention policy to recovery window of 7 days;
RMAN> backup database plus archivelog;
7.3 日志轮转配置
编辑/etc/logrotate.d/oracle:
bash复制/u01/app/oracle/diag/rdbms/*/*/trace/*.trc {
daily
rotate 30
compress
missingok
notifempty
copytruncate
}
8. 安全加固建议
8.1 修改默认密码
sql复制ALTER USER sys IDENTIFIED BY "新密码";
ALTER USER system IDENTIFIED BY "新密码";
8.2 启用审计
sql复制-- 基本审计配置
AUDIT CREATE SESSION;
AUDIT ALTER DATABASE;
-- 查看审计记录
SELECT * FROM dba_audit_trail;
8.3 网络加密
配置sqlnet.ora:
bash复制SQLNET.ENCRYPTION_SERVER = required
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
SQLNET.CRYPTO_CHECKSUM_SERVER = required
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA1)
9. 性能监控工具
9.1 AWR报告生成
sql复制-- 生成AWR快照
exec dbms_workload_repository.create_snapshot;
-- 生成报告
@?/rdbms/admin/awrrpt.sql
9.2 ASH实时监控
sql复制-- 查看当前活动会话
@?/rdbms/admin/ashrpt.sql
9.3 OEM控制台启动
bash复制emctl start dbconsole
访问地址:https://服务器IP:1158/em
10. 升级与补丁
10.1 OPatch工具使用
bash复制# 检查已安装补丁
$ORACLE_HOME/OPatch/opatch lsinventory
# 应用补丁
unzip p12345678_190000_Linux-x86-64.zip
cd 12345678
$ORACLE_HOME/OPatch/opatch apply
10.2 季度补丁集(PSU)安装
- 关闭数据库和监听
- 备份ORACLE_HOME
- 执行补丁安装脚本
- 重新编译无效对象:
sql复制@?/rdbms/admin/utlrp.sql
11. 多租户环境配置
11.1 CDB创建
bash复制dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname cdb \
-sid cdb \
-createAsContainerDatabase true \
-numberOfPDBs 1 \
-pdbName pdb1 \
-pdbAdminPassword password \
-responseFile NO_VALUE
11.2 PDB管理
sql复制-- 查看PDB状态
show pdbs
-- 打开PDB
alter pluggable database pdb1 open;
-- 切换会话
alter session set container=pdb1;
12. 高可用配置基础
12.1 Data Guard物理备库
主库配置:
sql复制ALTER DATABASE FORCE LOGGING;
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby';
12.2 RAC基础环境
需要配置:
- 共享存储(ASM或共享文件系统)
- 专用网络(心跳线)
- 集群软件(GI)
13. 数据迁移方案
13.1 数据泵导出导入
bash复制# 导出
expdp system/password directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=expdp.log schemas=SCOTT
# 导入
impdp system/password directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log remap_schema=SCOTT:NEWSCOTT
13.2 跨平台传输表空间
sql复制-- 源端
exec dbms_tts.transport_set_check('USERS', TRUE);
-- 检查是否自包含
select * from transport_set_violations;
-- 导出元数据
host expdp system/password transport_tablespaces=USERS dumpfile=tts.dmp directory=DATA_PUMP_DIR
14. 云环境部署
14.1 Oracle云基础设施(OCI)
- 创建VM实例
- 配置块存储
- 使用Marketplace中的Oracle数据库镜像
14.2 AWS RDS Oracle
- 选择Oracle引擎版本
- 配置实例规格和存储
- 设置备份保留期和监控
15. 开发环境配置
15.1 SQL Developer连接
- 下载并安装SQL Developer
- 新建连接:
- 类型:Oracle
- 主机名:服务器IP
- 端口:1521
- SID:orcl
- 测试连接
15.2 客户端TNS配置
编辑$ORACLE_HOME/network/admin/tnsnames.ora:
bash复制ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = server_ip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
16. 自动化运维脚本
16.1 自动备份脚本
bash复制#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin
rman target / << EOF
run {
allocate channel c1 device type disk;
backup database plus archivelog;
release channel c1;
}
EOF
16.2 监控告警脚本
bash复制#!/bin/bash
# 检查表空间使用率
output=$(sqlplus -s / as sysdba << EOF
set pagesize 0 feedback off
select tablespace_name,round(used_percent) from dba_tablespace_usage_metrics where used_percent > 80;
exit
EOF
)
if [ -n "$output" ]; then
echo "警告:以下表空间使用率超过80%"
echo "$output"
# 可添加邮件发送逻辑
fi
17. 性能调优实战
17.1 SQL调优步骤
- 识别问题SQL:
sql复制select sql_id, executions, elapsed_time/executions/1000 avg_ms
from v$sqlarea
where executions > 0
order by avg_ms desc;
- 获取执行计划:
sql复制select * from table(dbms_xplan.display_cursor('sql_id'));
- 添加索引或重写SQL
17.2 统计信息收集
sql复制-- 表级统计信息
exec dbms_stats.gather_table_stats('SCOTT','EMP');
-- 系统级统计信息
exec dbms_stats.gather_database_stats;
18. 故障恢复演练
18.1 控制文件恢复
sql复制-- 检查控制文件位置
show parameter control_files;
-- 模拟损坏
host rm /u01/oradata/orcl/control01.ctl
-- 恢复步骤
startup mount;
recover database using backup controlfile;
alter database open resetlogs;
18.2 数据文件恢复
sql复制-- 模拟损坏
host rm /u01/oradata/orcl/users01.dbf
-- 恢复步骤
startup mount;
recover datafile 4; -- 通过v$datafile查看文件编号
alter database open;
19. 安全审计实施
19.1 细粒度审计(FGA)
sql复制BEGIN
DBMS_FGA.ADD_POLICY(
object_schema => 'HR',
object_name => 'EMPLOYEES',
policy_name => 'SALARY_ACCESS',
audit_condition => 'SALARY > 10000',
audit_column => 'SALARY',
handler_schema => NULL,
handler_module => NULL,
enable => TRUE
);
END;
/
19.2 数据库防火墙
- 安装Oracle Database Vault
- 配置规则:
sql复制BEGIN
DVSYS.DBMS_MACADM.CREATE_RULE(
rule_name => 'Protect_HR_Data',
rule_expr => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'')=''HR''');
END;
/
20. 容器化部署方案
20.1 Docker基础镜像
dockerfile复制FROM oraclelinux:7-slim
COPY oracle-database-ee-19c-1.0-1.x86_64.rpm /tmp
RUN yum install -y /tmp/oracle-database-ee-19c-1.0-1.x86_64.rpm && \
rm -rf /tmp/oracle-database-ee-19c-1.0-1.x86_64.rpm
ENV ORACLE_SID=ORCLCDB
ENV ORACLE_PDB=ORCLPDB1
COPY init.sql /opt/oracle/scripts/setup
EXPOSE 1521
CMD ["/bin/bash", "-c", "source /home/oracle/.bashrc; /etc/init.d/oracle-xe-18c start; tail -f /dev/null"]
20.2 Kubernetes部署
- 创建PersistentVolumeClaim
- 部署StatefulSet
- 配置Headless Service
- 添加健康检查探针
21. 多语言支持配置
21.1 字符集转换
sql复制-- 检查当前字符集
select * from nls_database_parameters where parameter like '%CHARACTERSET%';
-- 转换步骤
1. 创建新库使用AL32UTF8字符集
2. 使用数据泵导出导入
3. 或使用CSALTER工具转换
21.2 全球化开发建议
- 始终使用NVARCHAR2存储多语言文本
- 设置NLS_LANG环境变量:
bash复制export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
- 应用层统一使用UTF-8编码
22. 备份恢复进阶
22.1 增量备份策略
bash复制rman target /
RMAN> configure retention policy to recovery window of 7 days;
RMAN> configure controlfile autobackup on;
RMAN> backup incremental level 0 database;
RMAN> backup incremental level 1 cumulative database;
22.2 表空间时间点恢复(TSPITR)
sql复制-- 确定恢复时间点
select to_char(sysdate-1/24,'YYYY-MM-DD HH24:MI:SS') from dual;
-- 执行恢复
rman target /
RMAN> recover tablespace users until time "to_date('2023-01-01 12:00:00','YYYY-MM-DD HH24:MI:SS')";
23. 监控体系搭建
23.1 Prometheus监控
- 安装oracle_exporter
- 配置采集指标:
yaml复制metrics:
- name: oracle_sessions
query: |
SELECT count(*) as value FROM v$session
labels:
- status
- 配置Grafana仪表盘
23.2 自定义监控脚本
bash复制#!/bin/bash
# 检查锁等待
locks=$(sqlplus -s / as sysdba << EOF
set heading off
select count(*) from v\$lock where block=1;
exit
EOF
)
if [ $locks -gt 0 ]; then
echo "发现锁等待:$locks"
# 获取锁详情
sqlplus -s / as sysdba @lock_details.sql
fi
24. 资源管理配置
24.1 资源管理器
sql复制BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
consumer_group => 'OLTP_GROUP',
comment => 'OLTP工作负载');
DBMS_RESOURCE_MANAGER.CREATE_PLAN(
plan => 'DAYTIME_PLAN',
comment => '日间资源计划');
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => 'DAYTIME_PLAN',
group_or_subplan => 'OLTP_GROUP',
comment => 'OLTP组分配',
cpu_p1 => 80);
DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/
24.2 内存自动管理
sql复制-- 启用自动内存管理
ALTER SYSTEM SET memory_target=8G SCOPE=SPFILE;
-- 调整SGA/PGA自动管理
ALTER SYSTEM SET sga_target=6G SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=2G SCOPE=SPFILE;
25. 分区表实践
25.1 范围分区表示例
sql复制CREATE TABLE sales (
sale_id NUMBER,
sale_date DATE,
amount NUMBER
) PARTITION BY RANGE (sale_date) (
PARTITION sales_q1 VALUES LESS THAN (TO_DATE('01-APR-2023','DD-MON-YYYY')),
PARTITION sales_q2 VALUES LESS THAN (TO_DATE('01-JUL-2023','DD-MON-YYYY')),
PARTITION sales_q3 VALUES LESS THAN (TO_DATE('01-OCT-2023','DD-MON-YYYY')),
PARTITION sales_q4 VALUES LESS THAN (TO_DATE('01-JAN-2024','DD-MON-YYYY'))
);
25.2 分区维护操作
sql复制-- 添加分区
ALTER TABLE sales ADD PARTITION sales_q5
VALUES LESS THAN (TO_DATE('01-APR-2024','DD-MON-YYYY'));
-- 合并分区
ALTER TABLE sales MERGE PARTITIONS sales_q1, sales_q2
INTO PARTITION sales_h1;
-- 分区交换
ALTER TABLE sales EXCHANGE PARTITION sales_q3
WITH TABLE sales_archive;
26. 物化视图优化
26.1 创建刷新物化视图
sql复制CREATE MATERIALIZED VIEW mv_sales_summary
REFRESH COMPLETE ON DEMAND
ENABLE QUERY REWRITE
AS
SELECT product_id, SUM(amount), COUNT(*)
FROM sales
GROUP BY product_id;
26.2 物化视图日志
sql复制-- 在主表创建物化视图日志
CREATE MATERIALIZED VIEW LOG ON sales
WITH ROWID, SEQUENCE (product_id, amount)
INCLUDING NEW VALUES;
-- 创建快速刷新物化视图
CREATE MATERIALIZED VIEW mv_sales_detail
REFRESH FAST ON COMMIT
AS
SELECT s.rowid sales_rowid, s.product_id, s.amount
FROM sales s;
27. 外部表应用
27.1 创建外部表
sql复制CREATE DIRECTORY ext_tab_dir AS '/u01/external_data';
CREATE TABLE ext_sales (
sale_id NUMBER,
sale_date DATE,
amount NUMBER
)
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY ext_tab_dir
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY ','
MISSING FIELD VALUES ARE NULL
)
LOCATION ('sales_data.csv')
)
REJECT LIMIT UNLIMITED;
27.2 外部表与数据泵集成
sql复制-- 创建外部表指向数据泵导出文件
CREATE TABLE ext_emp
ORGANIZATION EXTERNAL (
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY dpump_dir
LOCATION ('emp.dmp')
)
AS SELECT * FROM employees;
28. 数据库链配置
28.1 创建数据库链
sql复制CREATE DATABASE LINK remote_db
CONNECT TO remote_user IDENTIFIED BY password
USING 'remote_tns';
28.2 跨库查询优化
sql复制-- 使用DRIVING_SITE提示控制执行位置
SELECT /*+ DRIVING_SITE(remote_table) */ *
FROM local_table l, remote_table@remote_db r
WHERE l.id = r.id;
29. 内存列存储
29.1 In-Memory选项配置
sql复制-- 检查IM列存储状态
SELECT pool, alloc_bytes, used_bytes
FROM v$inmemory_area;
-- 启用表的内存存储
ALTER TABLE sales INMEMORY;
-- 指定列优先级
ALTER TABLE sales INMEMORY
MEMCOMPRESS FOR QUERY HIGH (product_id, amount)
NO INMEMORY (sale_date);
29.2 内存压缩策略
sql复制-- 修改压缩级别
ALTER TABLE sales INMEMORY MEMCOMPRESS FOR CAPACITY HIGH;
-- 查看内存中对象
SELECT segment_name, inmemory_size, bytes_not_populated
FROM v$im_segments;
30. 全文检索实现
30.1 创建全文索引
sql复制-- 创建词法分析器首选项
BEGIN
ctx_ddl.create_preference('my_lexer', 'BASIC_LEXER');
ctx_ddl.set_attribute('my_lexer', 'index_themes', 'YES');
END;
/
-- 创建全文索引
CREATE INDEX doc_text_idx ON documents(text)
INDEXTYPE IS ctxsys.context
PARAMETERS ('lexer my_lexer');
30.2 全文检索查询
sql复制-- 基本全文检索
SELECT * FROM documents
WHERE CONTAINS(text, 'Oracle AND database') > 0;
-- 模糊匹配
SELECT * FROM documents
WHERE CONTAINS(text, 'fuzzy(compter, 70, 6, weight)') > 0;
31. 空间数据处理
31.1 创建空间表
sql复制-- 安装空间组件
@?/md/admin/catmd.sql
-- 创建空间表
CREATE TABLE buildings (
id NUMBER,
name VARCHAR2(100),
shape SDO_GEOMETRY
);
-- 插入空间数据
INSERT INTO buildings VALUES (
1, 'Headquarters',
SDO_GEOMETRY(
2003, -- 二维多边形
4326, -- SRID (WGS84)
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1),
SDO_ORDINATE_ARRAY(116.404,39.915, 116.408,39.915, 116.408,39.918, 116.404,39.918, 116.404,39.915)
)
);
31.2 空间索引与查询
sql复制-- 创建空间索引
CREATE INDEX buildings_sidx ON buildings(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;
-- 空间查询
SELECT a.name FROM buildings a, buildings b
WHERE b.name = 'Headquarters'
AND SDO_WITHIN_DISTANCE(a.shape, b.shape, 'distance=100 unit=meter') = 'TRUE';
32. 数据库加密
32.1 TDE透明数据加密
sql复制-- 创建加密表空间
CREATE TABLESPACE secure_ts
DATAFILE '/u01/oradata/orcl/secure01.dbf' SIZE 100M
ENCRYPTION USING 'AES256'
DEFAULT STORAGE(ENCRYPT);
-- 加密现有表
ALTER TABLE customers MODIFY (credit_card_no ENCRYPT);
32.2 列级加密
sql复制-- 创建钱包
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/wallet' IDENTIFIED BY wallet_password;
-- 加密列
CREATE TABLE employee (
id NUMBER,
name VARCHAR2(100),
salary NUMBER ENCRYPT USING 'AES256'
);
33. 数据库分片
33.1 分片环境配置
sql复制-- 创建分片目录
CREATE SHARD CATALOG -user shard_user/password -database shard_catalog
-- 添加分片
ADD SHARD -shardgroup shardgroup1 -connect shard1_user/password@shard1
-- 创建分片表
CREATE SHARDED TABLE customers (
cust_id NUMBER,
name VARCHAR2(100),
region VARCHAR2(10)
) PARTITION BY CONSISTENT HASH (cust_id)
PARTITIONS AUTO TABLESPACE SET ts1;
33.2 分片查询路由
sql复制-- 直接连接到特定分片
CONNECT shard_user/password@shard1
-- 全局服务自动路由
CONNECT shard_user/password@shard_global
34. 机器学习集成
34.1 Oracle Machine Learning
sql复制-- 创建机器学习用户
CREATE USER omldemo IDENTIFIED BY password
DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;
GRANT CREATE SESSION, CREATE MINING MODEL TO omldemo;
-- 创建模型
BEGIN
DBMS_DATA_MINING.CREATE_MODEL(
model_name => 'customer_segmentation',
mining_function => dbms_data_mining.clustering,
data_table_name => 'customers',
case_id_column_name => 'cust_id',
target_column_name => NULL,
settings_table_name => 'clustering_settings');
END;
/
34.2 模型应用
sql复制-- 使用模型预测
SELECT cust_id,
PREDICTION(customer_segmentation USING *) cluster_id
FROM new_customers;
35. 区块链表特性
35.1 创建区块链表
sql复制CREATE BLOCKCHAIN TABLE ledger (
id NUMBER,
transaction_date TIMESTAMP,
details VARCHAR2(100),
signature VARCHAR2(2000)
)
NO DROP UNTIL 30 DAYS IDLE
NO DELETE LOCKED
HASHING USING "SHA2_512" VERSION "v1";
35.2 区块链表验证
sql复制-- 插入数据
INSERT INTO ledger VALUES (1, SYSTIMESTAMP, 'Transaction 1', NULL);
COMMIT;
-- 验证链完整性
DECLARE
verified BOOLEAN;
BEGIN
verified := DBMS_BLOCKCHAIN_TABLE.VERIFY_ROWS('LEDGER');
DBMS_OUTPUT.PUT_LINE('Verification: ' || CASE WHEN verified THEN 'OK' ELSE 'FAILED' END);
END;
/
36. 数据库升级策略
36.1 预升级检查
bash复制# 运行预升级信息工具
$ORACLE_HOME/bin/dbupgdiag.sql
# 检查无效对象
@?/rdbms/admin/utlrp.sql
36.2 原地升级步骤
- 备份数据库
- 关闭数据库
- 运行升级安装程序
- 执行数据库升级脚本:
bash复制cd $ORACLE_HOME/bin
./dbupgrade
- 重新编译无效对象
- 测试应用连接
37. 性能诊断工具
37.1 SQL Tuning Advisor
sql复制-- 创建调优任务
DECLARE
task_name VARCHAR2(30);
BEGIN
task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
sql_id => 'g8v7m5n3s1p2k',
scope => 'COMPREHENSIVE',
time_limit => 3600);
DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name);
END;
/
-- 查看建议
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('task_name') FROM dual;
37.2 SQL Monitor报告
sql复制-- 获取实时监控报告
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
sql_id => 'g8v7m5n3s1p2k',
type => 'TEXT',
report_level => 'ALL') AS report
FROM dual;
38. 资源隔离方案
38.1 PDB资源管理
sql复制-- 创建PDB资源计划
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN(
plan => 'CDB_PLAN',
comment => 'CDB资源分配计划');
DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE(
plan => 'CDB_PLAN',
pluggable_database => 'PDB1',
shares => 3,
utilization_limit => 80);
DBMS_RESOURCE_MANAGER.VALIDATE_CDB_PLAN('CDB_PLAN');
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/
38.2 服务隔离
sql复制-- 创建专用服务
BEGIN
DBMS_SERVICE.CREATE_SERVICE(
service_name => 'oltp_svc',
network_name => 'oltp_svc',
aq_ha_notifications => TRUE);
DBMS_SERVICE.START_SERVICE('oltp_svc');
END;
/
-- 将服务映射到资源组
ALTER SYSTEM SET service_names='oltp_svc' SCOPE=BOTH;
39. 数据库克隆技术
39.1 快照克隆
sql复制-- 创建可刷新克隆
CREATE PLUGGABLE DATABASE pdb_clone FROM pdb_source
SNAPSHOT COPY
FILE_NAME_CONVERT=('/u01/oradata/CDB/pdb_source/','/u01/oradata/CDB/pdb_clone/');
-- 定期刷新
ALTER PLUGGABLE DATABASE pdb_clone REFRESH;
39.2 热克隆
sql复制-- 源PDB置于只读模式
ALTER PLUGGABLE DATABASE pdb_source OPEN READ ONLY;
-- 执行克隆
CREATE PLUGGABLE DATABASE pdb_clone FROM pdb_source
FILE_NAME_CONVERT=('/u01/oradata/CDB/pdb_source/','/u01/oradata/CDB/pdb_clone/');
-- 恢复源PDB读写
ALTER PLUGGABLE DATABASE pdb_source CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE pdb_source OPEN READ WRITE;
40. 数据库卸载策略
40.1 完整卸载步骤
- 停止所有Oracle服务:
bash复制$ORACLE_HOME/bin/dbshut
$ORACLE_HOME/bin/emctl stop dbconsole
- 运行卸载程序:
bash复制$ORACLE_HOME/deinstall/deinstall
- 手动删除残留文件:
bash复制rm -rf /u01/app/oracle
rm -rf /etc/oraInst.loc /etc/oratab
- 清理用户和环境变量:
bash复制userdel -r oracle
groupdel oinstall
groupdel dba
40.2 选择性卸载组件
bash复制# 仅卸载数据库软件
$ORACLE_HOME/oui/bin/runInstaller -silent -detachHome ORACLE_HOME=$ORACLE_H