CentOS 7.9环境下达梦数据库安装与优化指南
1. CentOS 7.9环境准备与优化达梦数据库作为国产数据库的代表产品在企业级应用中越来越常见。而CentOS 7.9作为稳定可靠的Linux发行版是部署达梦数据库的理想选择。在开始安装前我们需要对操作系统环境进行充分准备。1.1 系统基础环境检查首先通过SSH连接到目标服务器执行以下命令检查系统版本cat /etc/redhat-release uname -a确认输出显示为CentOS 7.9且架构为x86_64。达梦数据库对硬件有一定要求建议内存至少4GB生产环境建议16GB以上磁盘系统分区50GB以上数据分区单独规划CPU建议4核以上检查系统资源使用情况free -h df -h lscpu1.2 系统参数调优达梦数据库对Linux内核参数有特定要求需要修改/etc/sysctl.conf文件vim /etc/sysctl.conf添加或修改以下参数kernel.sem 250 32000 100 200 kernel.shmmax 68719476736 kernel.shmall 4294967296 fs.file-max 6815744 net.ipv4.ip_local_port_range 9000 65500 net.core.rmem_default 262144 net.core.wmem_default 262144 net.core.rmem_max 4194304 net.core.wmem_max 4194304保存后执行sysctl -p使配置生效。1.3 用户和目录规划创建专用的dmdba用户和组groupadd dinstall useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba echo dmdba:Dameng123 | chpasswd创建达梦安装目录和数据目录mkdir -p /dm8 chown dmdba:dinstall /dm8 chmod -R 775 /dm8注意生产环境中密码应设置更复杂此处仅为示例2. 达梦数据库软件获取与准备2.1 官方安装包下载达梦数据库提供多种安装包格式推荐从官网下载最新稳定版的ISO镜像或压缩包。以DM8为例常见安装包命名规则dm8_20230101_x86_rh7_64.isodm8_20230101_x86_rh7_64.tar.gz下载完成后验证文件完整性md5sum dm8_20230101_x86_rh7_64.iso对比官网提供的MD5值确保文件完整。2.2 依赖包安装达梦数据库运行需要一些基础依赖yum install -y glibc libaio libnsl gcc gcc-c ksh compat-libstdc-33对于图形化安装还需要安装图形环境yum groupinstall -y GNOME Desktop yum install -y xorg-x11-utils xorg-x11-xauth xorg-x11-server-utils2.3 环境变量配置切换到dmdba用户配置环境变量su - dmdba vim ~/.bash_profile添加以下内容export DM_HOME/dm8 export PATH$DM_HOME/bin:$PATH export LD_LIBRARY_PATH$DM_HOME/bin:$LD_LIBRARY_PATH保存后执行source ~/.bash_profile使配置生效。3. 达梦数据库安装详细步骤3.1 图形化安装过程挂载ISO镜像文件mkdir -p /mnt/dmiso mount -o loop dm8_20230101_x86_rh7_64.iso /mnt/dmiso启动图形化安装界面xhost su - dmdba export DISPLAY:0.0 cd /mnt/dmiso ./DMInstall.bin安装过程中需要注意的关键选项选择语言简体中文安装类型典型安装安装目录/dm8选择组件全选初始化数据库选择是设置数据库参数数据库名DAMENG实例名DMSERVER端口号5236字符集UTF-8根据实际需求选择大小写敏感根据应用需求选择3.2 静默安装方式对于无图形界面的服务器可以使用静默安装方式。首先准备响应文件vim /tmp/dm_install.rsp内容示例INSTALL_TYPETYPICAL LICENSE_ACCEPTEDTRUE LOCALEzh_CN DEST_DIR/dm8 INIT_DBTRUE DB_NAMEDAMENG INSTANCE_NAMEDMSERVER PORT_NUM5236 CHARSETUTF-8 CASE_SENSITIVEN执行静默安装./DMInstall.bin -q /tmp/dm_install.rsp3.3 安装后配置安装完成后需要执行root脚本/dm8/script/root/root_installer.sh创建服务使用root用户vim /usr/lib/systemd/system/DmServiceDMSERVER.service内容示例[Unit] DescriptionDM Database Service Afternetwork.target [Service] Typeforking Userdmdba Groupdinstall ExecStart/dm8/bin/DmServiceDMSERVER start ExecStop/dm8/bin/DmServiceDMSERVER stop ExecReload/dm8/bin/DmServiceDMSERVER restart [Install] WantedBymulti-user.target启用服务systemctl daemon-reload systemctl enable DmServiceDMSERVER systemctl start DmServiceDMSERVER4. 数据库初始化与基础配置4.1 数据库初始化验证检查数据库状态/dm8/bin/DmServiceDMSERVER status使用disql工具连接测试/dm8/bin/disql SYSDBA/SYSDBAlocalhost:5236成功连接后执行简单SQL测试SELECT * FROM V$VERSION; CREATE TABLE TEST(ID INT, NAME VARCHAR(50)); INSERT INTO TEST VALUES(1,达梦测试); SELECT * FROM TEST;4.2 关键参数配置修改dm.ini配置文件位于/dm8/data/DAMENG/MEMORY_TARGET 2048 # 共享内存大小(MB) MAX_SESSIONS 500 # 最大会话数 BUFFER 1000 # 数据缓冲区大小(MB)在线修改参数需要重启生效SP_SET_PARA_VALUE(1, MEMORY_TARGET, 2048); SP_SET_PARA_VALUE(1, MAX_SESSIONS, 500);4.3 用户与权限管理创建业务用户CREATE USER DMUSER IDENTIFIED BY Dameng123 DEFAULT TABLESPACE MAIN; GRANT RESOURCE TO DMUSER; GRANT VTI TO DMUSER;权限管理建议避免直接使用SYSDBA账户进行业务操作按最小权限原则分配权限定期审计用户权限5. 常见问题与解决方案5.1 安装阶段问题问题1图形界面无法启动解决方案# 确保X11转发配置正确 vim /etc/ssh/sshd_config # 确保有以下配置 X11Forwarding yes X11UseLocalhost no # 重启SSH服务 systemctl restart sshd # 客户端连接时添加-X参数 ssh -X dmdba服务器IP问题2依赖包缺失典型错误libaio.so.1: cannot open shared object file 解决方案yum provides */libaio.so.1 yum install -y libaio5.2 运行阶段问题问题1连接数不足错误信息Max sessions are exceeded 解决方案-- 临时增加会话数 ALTER SYSTEM SET MAX_SESSIONS500 SPFILE; -- 永久修改需要重启数据库问题2内存不足错误信息Out of memory 解决方案-- 查看当前内存配置 SELECT * FROM V$PARAMETER WHERE NAME LIKE %MEMORY%; -- 调整内存参数 SP_SET_PARA_VALUE(1, MEMORY_TARGET, 4096);5.3 性能优化建议内存配置MEMORY_TARGET总内存的50-70%BUFFER总内存的60-70%SORT_BUF_SIZE适当增大排序缓冲区I/O优化数据文件、日志文件分开存放使用RAID10提高I/O性能调整DB_WRITER_PROCESSES参数SQL优化使用达梦性能视图V$SQL、V$SESSION等定期收集统计信息创建合适的索引6. 达梦数据库工具使用6.1 管理工具介绍DM Manager图形化管理工具提供数据库监控、SQL开发、备份恢复等功能启动方式/dm8/tool/dm_managerdisql命令行工具类似Oracle的sqlplus支持脚本执行、结果导出等功能基本用法disql 用户名/密码IP:端口DTS迁移工具数据迁移和同步工具支持异构数据库迁移位于/dm8/tool/dts6.2 备份与恢复物理备份# 全量备份 /dm8/bin/DMRMAN BACKUP DATABASE /dm8/data/DAMENG/dm.ini FULL BACKUPSET /dm8/backup/full_bak # 增量备份 /dm8/bin/DMRMAN BACKUP DATABASE /dm8/data/DAMENG/dm.ini INCREMENT BACKUPSET /dm8/backup/incr_bak逻辑备份# 导出 /dm8/bin/dexp SYSDBA/SYSDBAlocalhost:5236 FILEfull_exp.dmp LOGexp.log FULLY # 导入 /dm8/bin/dimp SYSDBA/SYSDBAlocalhost:5236 FILEfull_exp.dmp LOGimp.log FULLY6.3 监控与维护常用监控SQL-- 查看会话信息 SELECT * FROM V$SESSION; -- 查看锁信息 SELECT * FROM V$LOCK; -- 查看SQL执行情况 SELECT * FROM V$SQL WHERE EXECUTIONS0 ORDER BY ELAPSED_TIME DESC; -- 查看表空间使用情况 SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 SIZE(MB) FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME;定期维护任务每日检查数据库状态表空间使用率备份状态每周任务统计信息收集日志文件检查每月任务性能分析参数调优7. 外部工具连接配置7.1 Navicat连接达梦下载并安装Navicat Premium创建新连接选择达梦类型配置连接参数连接名自定义主机数据库服务器IP端口5236用户名/密码数据库账户测试连接并保存注意Navicat需要安装达梦的ODBC驱动才能连接7.2 Python连接达梦安装Python驱动pip install dmPython示例代码import dmPython conn dmPython.connect( userDMUSER, passwordDameng123, serverlocalhost, port5236, autoCommitTrue ) cursor conn.cursor() cursor.execute(SELECT * FROM TEST) for row in cursor: print(row) cursor.close() conn.close()7.3 JDBC连接配置Java应用中使用达梦JDBC驱动下载dm.jar驱动文件添加到项目依赖连接示例String url jdbc:dm://localhost:5236; String user DMUSER; String password Dameng123; Connection conn DriverManager.getConnection(url, user, password); Statement stmt conn.createStatement(); ResultSet rs stmt.executeQuery(SELECT * FROM TEST); while(rs.next()) { System.out.println(rs.getInt(1) rs.getString(2)); } rs.close(); stmt.close(); conn.close();8. 高级配置与集群部署8.1 主备集群部署达梦支持多种高可用方案以下是主备集群配置要点环境准备至少两台服务器配置主机名解析配置SSH互信主库配置# dm.ini INSTANCE_NAME DMSERVER PORT_NUM 5236 MAL_INI 1 ARCH_INI 1备库配置# dm.ini INSTANCE_NAME DMSTANDBY PORT_NUM 5237 MAL_INI 1 ARCH_INI 1配置MAL系统# dmmal.ini [MAL_INST1] MAL_INST_NAME DMSERVER MAL_HOST 主库IP MAL_PORT 61141 [MAL_INST2] MAL_INST_NAME DMSTANDBY MAL_HOST 备库IP MAL_PORT 61142配置归档# dmarch.ini [ARCHIVE_LOCAL1] ARCH_TYPE LOCAL ARCH_DEST /dm8/arch ARCH_FILE_SIZE 1024 ARCH_SPACE_LIMIT 0 [ARCHIVE_REALTIME1] ARCH_TYPE REALTIME ARCH_DEST DMSTANDBY8.2 读写分离配置达梦通过DM MPP实现读写分离配置dmwatcher.ini[GRP1] DW_TYPE GLOBAL DW_MODE AUTO DW_ERROR_TIME 10 INST_RECOVER_TIME 300 INST_ERROR_TIME 10 INST_OGUID 453331 INST_NAME DMSERVER INST_HOST 主库IP INST_PORT 5236 INST_DW_PORT 52141 [GRP1] DW_TYPE GLOBAL DW_MODE AUTO DW_ERROR_TIME 10 INST_RECOVER_TIME 300 INST_ERROR_TIME 10 INST_OGUID 453331 INST_NAME DMSTANDBY INST_HOST 备库IP INST_PORT 5237 INST_DW_PORT 52142启动顺序先启动主库再启动备库最后启动watcher验证状态-- 在主库执行 SELECT * FROM V$DMWATCHER; SELECT * FROM V$DMMONITOR;8.3 性能监控与调优达梦提供丰富的性能视图关键性能指标-- 缓冲区命中率 SELECT * FROM V$BUFFERPOOL; -- SQL执行统计 SELECT * FROM V$SQLSTAT; -- 等待事件 SELECT * FROM V$SYSTEM_EVENT;AWR报告-- 创建快照 SP_CREATE_SYSTEM_SNAPSHOTS(); -- 生成AWR报告 SP_AWR_REPORT(开始快照ID, 结束快照ID, HTML, /tmp/awr_report.html);SQL调优-- 查看执行计划 EXPLAIN SELECT * FROM TEST WHERE ID1; -- SQL跟踪 SP_TRACE_SET(1, 1, 1, 1, /tmp/sql_trace);9. 迁移与升级策略9.1 异构数据库迁移使用达梦DTS工具迁移其他数据库MySQL到达梦迁移创建迁移工程配置源库和目标库连接选择迁移对象设置数据类型映射执行迁移并验证Oracle到达梦迁移特别注意序列、包等特殊对象检查SQL语法差异验证PL/SQL兼容性迁移后检查数据一致性验证性能对比测试应用兼容性测试9.2 达梦版本升级升级前准备完整备份数据库检查升级文档的兼容性说明准备回退方案升级步骤# 停止数据库服务 systemctl stop DmServiceDMSERVER # 备份原安装目录 cp -r /dm8 /dm8_bak # 安装新版本 ./DMInstall.bin -i # 执行升级脚本 /dm8/upgrade.sh # 启动服务 systemctl start DmServiceDMSERVER升级后验证检查数据库版本验证关键业务功能监控性能变化9.3 数据同步方案基于日志的数据同步配置归档日志使用DMRMAN工具应用日志实时数据同步使用达梦DataWatch组件配置实时同步任务ETL工具集成使用Kettle等ETL工具配置定时同步任务10. 安全加固与审计10.1 账户安全策略密码策略-- 设置密码复杂度 SP_SET_PARA_VALUE(1, PWD_POLICY, 3); -- 设置密码有效期 ALTER USER DMUSER PASSWORD EXPIRE INTERVAL 90 DAY;账户锁定-- 设置登录失败锁定 SP_SET_PARA_VALUE(1, FAILED_LOGIN_ATTEMPTS, 5); SP_SET_PARA_VALUE(1, FAILED_LOGIN_DELAY, 10);权限回收-- 定期检查并回收不必要的权限 SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE NOT IN (SYSDBA,SYSAUDITOR);10.2 数据加密透明数据加密(TDE)-- 创建加密密钥 SP_INIT_TDE(1, AES256, 加密密码); -- 加密表空间 CREATE TABLESPACE ENC_TS DATAFILE enc_data.dbf SIZE 100 ENCRYPT WITH AES256;列级加密-- 创建加密列 CREATE TABLE ENC_TABLE ( ID INT, NAME VARCHAR(50) ENCRYPT WITH AES256 );备份加密/dm8/bin/DMRMAN BACKUP DATABASE /dm8/data/DAMENG/dm.ini ENCRYPT WITH 加密密码 BACKUPSET /dm8/backup/enc_bak10.3 审计配置开启审计-- 开启系统审计 SP_SET_PARA_VALUE(1, AUDIT_SYSTEM_LEVEL, 1); -- 开启语句审计 SP_AUDIT_STMT(ALL, ALL, ALL);审计策略配置-- 审计关键表操作 SP_AUDIT_OBJECT(TABLE, DMUSER, TEST, ALL); -- 审计权限变更 SP_AUDIT_SYSTEM(GRANT, SUCCESS);审计日志分析-- 查询审计记录 SELECT * FROM SYS.AUD$ WHERE OBJ_NAMETEST; -- 定期归档审计日志 SP_AUDIT_ARCHIVE(30);11. 容器化部署方案11.1 Docker部署达梦获取官方镜像docker pull dmdb/dmdbms:latest运行容器docker run -d --name dm8 \ -p 5236:5236 \ -e PAGE_SIZE16 \ -e CASE_SENSITIVEN \ -e CHARSET1 \ -e DB_NAMEDAMENG \ -e INSTANCE_NAMEDMSERVER \ -e SYSDBA_PWDDameng123 \ -v /data/dm8:/opt/dmdbms/data \ dmdb/dmdbms:latest容器管理# 查看日志 docker logs dm8 # 进入容器 docker exec -it dm8 /bin/bash # 停止/启动 docker stop dm8 docker start dm811.2 Docker Compose部署创建docker-compose.yml文件version: 3 services: dmdb: image: dmdb/dmdbms:latest container_name: dm8 environment: - PAGE_SIZE16 - CASE_SENSITIVEN - CHARSET1 - DB_NAMEDAMENG - INSTANCE_NAMEDMSERVER - SYSDBA_PWDDameng123 ports: - 5236:5236 volumes: - /data/dm8:/opt/dmdbms/data restart: unless-stopped启动服务docker-compose up -d11.3 Kubernetes部署创建ConfigMapapiVersion: v1 kind: ConfigMap metadata: name: dm-config data: init.sql: | CREATE TABLESPACE TS_DATA DATAFILE ts_data.dbf SIZE 1024; CREATE USER K8SUSER IDENTIFIED BY Dameng123 DEFAULT TABLESPACE TS_DATA; GRANT RESOURCE TO K8SUSER;创建DeploymentapiVersion: apps/v1 kind: Deployment metadata: name: dmdb spec: replicas: 1 selector: matchLabels: app: dmdb template: metadata: labels: app: dmdb spec: containers: - name: dmdb image: dmdb/dmdbms:latest env: - name: DB_NAME value: DAMENG - name: SYSDBA_PWD value: Dameng123 ports: - containerPort: 5236 volumeMounts: - mountPath: /opt/dmdbms/data name: dm-data - mountPath: /docker-entrypoint-initdb.d name: init-sql volumes: - name: dm-data persistentVolumeClaim: claimName: dm-pvc - name: init-sql configMap: name: dm-config items: - key: init.sql path: init.sql创建ServiceapiVersion: v1 kind: Service metadata: name: dmdb-service spec: selector: app: dmdb ports: - protocol: TCP port: 5236 targetPort: 5236 type: NodePort12. 备份恢复与容灾12.1 备份策略设计全量备份/dm8/bin/DMRMAN BACKUP DATABASE /dm8/data/DAMENG/dm.ini FULL BACKUPSET /dm8/backup/full_$(date %Y%m%d) COMPRESSED增量备份/dm8/bin/DMRMAN BACKUP DATABASE /dm8/data/DAMENG/dm.ini INCREMENT WITH BACKUPDIR /dm8/backup BACKUPSET /dm8/backup/incr_$(date %Y%m%d)归档日志备份/dm8/bin/DMRMAN BACKUP ARCHIVE LOG ALL BACKUPSET /dm8/backup/arch_$(date %Y%m%d)12.2 恢复演练全库恢复/dm8/bin/DMRMAN RESTORE DATABASE /dm8/data/DAMENG/dm.ini FROM BACKUPSET /dm8/backup/full_20230101 /dm8/bin/DMRMAN RECOVER DATABASE /dm8/data/DAMENG/dm.ini FROM BACKUPSET /dm8/backup/full_20230101 /dm8/bin/DMRMAN RECOVER DATABASE /dm8/data/DAMENG/dm.ini UPDATE DB_MAGIC时间点恢复/dm8/bin/DMRMAN RESTORE DATABASE /dm8/data/DAMENG/dm.ini FROM BACKUPSET /dm8/backup/full_20230101 /dm8/bin/DMRMAN RECOVER DATABASE /dm8/data/DAMENG/dm.ini WITH ARCHIVEDIR /dm8/arch UNTIL TIME 2023-01-01 12:00:00 /dm8/bin/DMRMAN RECOVER DATABASE /dm8/data/DAMENG/dm.ini UPDATE DB_MAGIC12.3 容灾方案主备切换演练# 备库执行接管 /dm8/bin/dmwatcher /dm8/data/DAMENG/dmwatcher.ini takeover # 原主库恢复为备库 /dm8/bin/dmwatcher /dm8/data/DAMENG/dmwatcher.ini open # 重新建立主备关系 /dm8/bin/dmwatcher /dm8/data/DAMENG/dmwatcher.ini confirm异地容灾配置配置异地归档日志传输设置延迟应用策略定期演练异地切换监控与告警配置监控主备状态设置延迟告警阈值定期检查网络连通性13. 性能测试与优化13.1 基准测试工具达梦自带的DMBENCH/dm8/bin/dbench -U DMUSER -P Dameng123 -S localhost -P 5236 -n 100 -c 20Sysbench测试sysbench oltp_read_write \ --db-driverdm \ --dm-hostlocalhost \ --dm-port5236 \ --dm-userDMUSER \ --dm-passwordDameng123 \ --dm-dbDAMENG \ --tables10 \ --table-size100000 \ --threads20 \ --time300 \ --report-interval10 \ prepare/run/cleanup自定义测试脚本-- 创建测试表 CREATE TABLE PERF_TEST( ID INT PRIMARY KEY, NAME VARCHAR(100), CREATE_TIME DATETIME, CONTENT TEXT ); -- 插入测试数据 BEGIN FOR i IN 1..100000 LOOP INSERT INTO PERF_TEST VALUES(i, TEST||i, SYSDATE, LPAD(X,1000,X)); IF MOD(i,1000)0 THEN COMMIT; END IF; END LOOP; COMMIT; END; / -- 执行测试查询 SELECT /* MONITOR */ COUNT(*) FROM PERF_TEST WHERE NAME LIKE TEST%;13.2 性能监控指标关键性能计数器-- 缓冲区命中率 SELECT (1-PHYSICAL_READS/(CONSISTENT_GETSDB_BLOCK_GETS))*100 HIT_RATIO FROM V$BUFFERPOOL; -- SQL执行效率 SELECT SQL_TEXT, EXECUTIONS, ELAPSED_TIME/EXECUTIONS AVG_TIME FROM V$SQL WHERE EXECUTIONS0 ORDER BY ELAPSED_TIME/EXECUTIONS DESC;等待事件分析SELECT EVENT, TOTAL_WAITS, TIME_WAITED FROM V$SYSTEM_EVENT ORDER BY TIME_WAITED DESC;资源使用情况-- 内存使用 SELECT * FROM V$MEMORY_DYNAMIC_COMPONENTS; -- CPU使用 SELECT * FROM V$SYS_TIME_MODEL;13.3 优化案例分享案例1慢SQL优化问题SQLSELECT * FROM ORDERS WHERE CREATE_DATE SYSDATE-30;优化方案添加CREATE_DATE索引只查询必要字段使用分区表按日期范围分区案例2批量插入优化原始方式BEGIN FOR i IN 1..10000 LOOP INSERT INTO TEST VALUES(i, TEST); END LOOP; END;优化后INSERT INTO TEST SELECT LEVEL, TEST FROM DUAL CONNECT BY LEVEL10000;案例3统计信息不准问题现象执行计划不稳定 解决方案-- 收集表统计信息 DBMS_STATS.GATHER_TABLE_STATS(DMUSER, TEST); -- 固定执行计划 SP_CREATE_SQL_PLAN_BASELINE(SELECT * FROM TEST WHERE ID?);14. 日常运维最佳实践14.1 巡检清单每日巡检检查数据库状态检查表空间使用率检查备份执行情况检查错误日志每周巡检检查性能指标趋势检查无效对象检查统计信息时效检查碎片情况每月巡检全面性能分析参数调优评估容量规划评估安全审计回顾14.2 自动化运维巡检脚本示例#!/bin/bash # 数据库状态检查 STATUS$($DM_HOME/bin/DmServiceDMSERVER status | grep running) if [ -z $STATUS ]; then echo 数据库服务未运行 | mail -s 数据库告警 adminexample.com fi # 表空间检查 $DM_HOME/bin/disql SYSDBA/SYSDBAlocalhost:5236 EOF SET HEADING OFF SET FEEDBACK OFF SPOOL /tmp/tablespace_check.log SELECT TABLESPACE_NAME, ROUND(USED_SIZE/1024/1024,2) USED(MB), ROUND(TOTAL_SIZE/1024/1024,2) TOTAL(MB), ROUND(USED_SIZE/TOTAL_SIZE*100,2) PERCENT FROM V$TABLESPACE; SPOOL OFF EOF # 发送报告 cat /tmp/tablespace_check.log | mail -s 表空间报告 adminexample.com备份自动化#!/bin/bash # 全量备份 BACKUP_DIR/dm8/backup DATE$(date %Y%m%d) $DM_HOME/bin/DMRMAN BACKUP DATABASE $DM_HOME/data/DAMENG/dm.ini FULL BACKUPSET $BACKUP_DIR/full_$DATE COMPRESSED # 保留最近7天备份 find $BACKUP_DIR -name full_* -mtime 7 -exec rm -f {} \;监控集成配置Prometheus监控达梦设置Grafana监控看板配置告警规则14.3 故障处理流程故障分类紧急故障数据库宕机、数据损坏重要故障性能严重下降、空间不足一般故障非关键功能异常处理流程信息收集日志、现象、时间点影响评估业务影响范围临时解决缓解措施根本解决问题定位与修复复盘改进防止再次发生常见故障处理数据库无法启动检查日志文件检查参数文件尝试恢复控制文件性能突然下降检查等待事件检查锁情况检查资源使用空间不足扩展表空间清理历史数据优化存储结构15. 开发规范与最佳实践15.1 SQL开发规范书写规范关键字大写使用缩进添加必要注释避免SELECT *性能规范使用绑定变量避免全表扫描合理使用索引注意事务大小示例对比-- 不推荐 select * from user where name like %张%; -- 推荐 SELECT user_id, user_name, phone FROM user WHERE name LIKE 张% AND status 1;15.2 存储过程开发编写规范CREATE OR REPLACE PROCEDURE update_user_score( p_user_id IN INT, p_score IN INT, p_result OUT INT ) AS v_count INT; BEGIN -- 检查用户存在 SELECT COUNT(*) INTO v_count FROM user WHERE user_id p_user_id; IF v_count 0 THEN p_result : -1; -- 用户不存在 RETURN; END IF; -- 更新分数 UPDATE user SET score score p_score WHERE user_id p_user_id; COMMIT; p_result : 0; -- 成功 EXCEPTION WHEN OTHERS THEN ROLLBACK; p_result : -2; -- 系统异常 END; /调试技巧使用DBMS_OUTPUT输出调试信息添加日志表记录执行过程使用异常处理捕获错误15.3 应用连接管理**连接池配置