大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 ,若此文对你有帮助,一定记得倒点个关注⭐与小红星❤️,收藏学习不迷路 。
Oracle 实例管理
SQL Plus 中,常用指令语句:
DESCRIBE departments # 查询表结构,注:可简写为DESC
List -- 列举历史命令,注:可简写为L
c/old_string/new_string -- 将历史命令中的关键字进行替换
SAVE filename.sql 保存文件
GET 获取文件文件
START 运行
@ 运行脚本(常用)
EDIT 编辑文件
SPOOL 屏幕记录输出至文件(常用)
EXIT
启动、关闭一个数据库实例
-- 语法格式
STARTUP db_options | cdb_options | upgrade_options
where db_options has the following syntax:
[FORCE] [RESTRICT] [PFILE=filename] [QUIET] [ MOUNT [dbname] |
[ OPEN [open_db_options] [dbname] ] | NOMOUNT ]
where open_db_options has the following syntax:
READ {ONLY | WRITE [RECOVER]} | RECOVER
-- STARTUP 命令有几种不同的选项,用于控制启动过程的不同阶段:
SQL> STARTUP NOMOUNT; -- 启动实例,但不加载数据库。通常用于执行一些需要在数据库未挂载时进行的操作,如创建新的控制文件。
STARTUP MOUNT; -- 启动实例并加载数据库,但不打开数据库。通常用于需要在数据库挂载但未打开时进行的操作,如备份控制文件、恢复数据库等。
STARTUP OPEN; -- 启动实例,加载数据库,并打开数据库。最常用的启动选项,使数据库处于完全可用状态,可以接受用户连接和执行操作(常用)。
STARTUP FORCE; -- 强制启动数据库。如果数据库处于异常状态(如启动失败或关闭失败),相当于先执行 SHUTDOWN ABORT,然后执行 STARTUP。
STARTUP RESTRICT;-- 启动数据库,但限制用户连接,只允许 RESTRICTED SESSION 权限的用户。通常用于维护操作,如数据库升级或修复。
- SHUTDOWN : 关闭实例并卸载数据库。
-- 语法格式
SHUTDOWN [ABORT|IMMEDIATE|NORMAL|TRANSACTIONAL [LOCAL]]
-- SHUTDOWN 命令也有几种不同的选项,用于控制关闭过程的不同阶段:
SQL> SHUTDOWN IMMEDIATE; -- 立即关闭 Oracle 数据库实例。它会终止所有活动的事务,回滚未完成的事务,并关闭数据库(常用)。
SHUTDOWN NORMAL; -- 正常关闭数据库, 等待所有活动的事务完成,并且所有用户断开连接后才关闭数据库, 最安全,但是耗时长。
SHUTDOWN TRANSACTIONAL; -- 事务性关闭数据库。它会等待所有活动的事务完成,但不需要所有用户断开连接,比 SHUTDOWN NORMAL 快,但仍然确保数据一致性。
SHUTDOWN ABORT; -- 强制关闭数据库。它会立即关闭数据库,不等待任何事务完成。这可能会导致数据不一致,因此通常只在其他关闭命令失败时使用(慎用)。
-- 3.数据库实例状态变更
ALTERDATABASEMOUNT--更改数据库状态为 MOUNT
ALTERDATABASEOPEN--更改数据库状态为 OPEN
weiyigeek.top-数据库实例启动与关闭图
关闭数据库实例的四种方式(A/I/T/N)对照,建议使用 IMMEDIATE(推荐)、TRANSACTIONAL、NORMAL 等方式关闭,这样重启数据库后不用做实例恢复。
weiyigeek.top-关闭数据库实例的四种方式对照图
查看数据库实例日志
值得注意的是,不推荐使用 shutdown abort 以及 startup force 来关闭数据库,有可能导致数据库数据丢失,例如,如果回滚段来回滚未提交的改变,若回滚段异常则会损坏数据库。
通过检查诊断文件(通常包含运行过程中遇到的重要事件信息)来管理实例,大致有一下几种诊断文件:
警告日志文件(alertSID.log):记录数据库运行中一些操作命令与主要事件结果,每条都对应有时间戳信息,其所路径由初始化参数 BACKGROUND_DUMP_DEST 指定。
后台跟踪文件:记录被后台进程检测到的错误信息,仅在后台进程遇到错误时创建,其路径也由初始化参数 BACKGROUND_DUMP_DEST 指定。用户跟踪文件:记录用户进程连接Oracle服务器产生的,包含跟踪到的SQL执行语句与用户通讯错误信息,其路径定义在 USER_DUMP_DEST 中,大小定义在 MAX_DUMP_FILE_SIZE 中(注:10g及以上将不会限制)。
# 方式1
SQL> SELECT name,value FROM v$diag_info; -- 11g 及以后的方式(推荐方式)
ADR Base:C:APPORACLE
ADR Home:C:APPORACLEdiagrdbmsitgeekdbitgeekdb
Diag Trace:C:APPORACLEdiagrdbmsitgeekdbitgeekdbtrace
Diag Alert:C:APPORACLEdiagrdbmsitgeekdbitgeekdbalert
Diag Incident:C:APPORACLEdiagrdbmsitgeekdbitgeekdbincident
Diag Cdump:C:apporaclediagrdbmsitgeekdbitgeekdbcdump
Health Monitor:C:APPORACLEdiagrdbmsitgeekdbitgeekdbhm
Default Trace File:C:APPORACLEdiagrdbmsitgeekdbitgeekdbtraceitgeekdb_ora_7136.trc
# 方式2
SQL> show parameter dump; -- 10g 及以前的方式
background_core_dump: partial
background_dump_dest: C:APPORACLEPRODUCT12.2.0DBHOME_1RDBMSTRACE
core_dump_dest: C:apporaclediagrdbmsitgeekdbitgeekdbcdump
max_dump_file_size: unlimited
shadow_core_dump: none
user_dump_dest : C:APPORACLEPRODUCT1
下述日志目录是 Oracle 故障排查和性能分析的核心位置,DBA 经常需要检查其中的内容来定位问题。
| 目录/文件 | 主要用途 |
|---|---|
| ADR Base | 所有 Oracle 诊断数据的根目录。 |
| ADR Home | 特定数据库实例的诊断主目录。 |
| Diag Trace | 会话和后台进程的跟踪文件。 |
| Diag Alert | 数据库警报日志(关键事件记录)。 |
| Diag Incident | 严重错误(如 ORA-600)的详细数据。 |
| Diag Cdump | 进程崩溃时的核心转储文件。 |
| Health Monitor | 数据库健康检查报告。 |
| Default Trace File | 特定会话的详细跟踪信息。 |
在日志中,需重点关注带有 Error 关键字以及 ORA-xxx 的行。
实践案例
某业务系统停机维修,需要提前关闭数据库,待维修完成后,再将数据库启动,停止和启动过程中需要关注日志,验证是否存在错误,及是否正常启动。
# 1.停监听
lsnrctl stop
# 2.登录数据库
SQL> connect / as sysdba
# 3.关闭数据库
SQL> shutdown immediate
# 数据库停机维修完成后,恢复数据库运行:
# 1.登录数据库
SQL> connect / as sysdba
# 2.启动数据库
SQL> startup
# 3.启监听
lsnrctl start
weiyigeek.top-数据库系统停机维护图
加入:作者【全栈工程师修炼指南】知识星球
『 全栈工程师修炼指南』星球,主要涉及全栈工程师(Full Stack Development)实践文章,包括但不限于企业SecDevOps和网络安全等保合规、安全渗透测试、编程开发、云原生(Cloud Native)、物联网工业控制(IOT)、人工智能Ai,从业书籍笔记,人生职场认识等方面资料或文章。
Q: 加入作者【全栈工程师修炼指南】星球后有啥好处?
✅ 将获得作者最新工作学习实践文章以及网盘资源。
✅ 将获得作者珍藏多年的全栈学习笔记(需连续两年及以上老星球友,也可单次购买)。
✅ 将获得作者专门答疑学习交流群,解决在工作学习中的问题。
✅ 将获得作者远程支持(在作者能力范围内且合规)。
目前新人仅需 69 元即可加入作者星球,数量有限,期待你的加入!
829