会话(删除连接的会话)
所有的会话都在表 v$session 中。
sql
select sid,serial#,username from v$session; # 通过这个查询可以了解当前活动的数据库会话情况。
alter system kill session 'sid,serial#'; # 用于终止指定会话
自己不能杀自己。。。
Read-Only Mode只读模式
只读模式(Read-Only Mode) 是一种数据库操作模式,允许用户查询数据,但不允许对数据进行任何修改。以下是只读模式的作用和特点:
作用
- 执行查询,使用本地管理的表空间执行磁盘排序。
- 将数据文件离线和在线,但不包括表空间。
- 执行离线数据文件和空间的恢复。
- 保护数据:防止数据被意外或恶意修改,确保数据的完整性和一致性。
- 提高性能:在只读模式下,数据库可以优化查询性能,因为不需要处理写操作的锁和日志。
- 适合用于生成报告和数据分析,用户可以安全地查询数据而不影响数据库的状态。
- 维护和备份:在进行数据库维护或备份时,可以将数据库设置为只读模式,以确保备份数据的一致性。
特点 - 访问限制:只读模式下,用户无法执行INSERT、UPDATE、DELETE等数据修改操作。
- 会话级和实例级:可以在会话级别或实例级别设置只读模式。会话级别的设置只影响当前会话,而实例级别的设置影响整个数据库实例。
- 恢复模式:可以在需要时轻松切换回读写模式,恢复对数据的修改权限。
- 适用场景:常用于数据仓库、报告服务器、备份期间等场景。
设置只读模式:
sql
ALTER DATABASE READ ONLY;
设置会话为只读模式:
sql
ALTER SESSION SET READ ONLY;
取消只读模式, 将实例设置为读写模式:
sql
ALTER DATABASE READ WRITE;
总结
只读模式是一种有效的数据库管理策略,能够保护数据、提高查询性能,并适用于多种场景。通过合理使用只读模式,可以确保数据的安全性和一致性。
关闭数据库
关闭数据库的过程
关闭Oracle数据库是一个重要的操作,涉及多个步骤,以确保数据的完整性和一致性。以下是关闭数据库的详细过程:
-
数据写入
在关闭数据库时,Oracle会将SGA(系统全局区)中的所有数据库数据和恢复数据分别写入数据文件和重做日志文件。这一过程确保所有未写入的数据都被安全保存。
-
关闭在线数据文件
接下来,Oracle会关闭所有在线数据文件和重做日志记录。任何处于离线状态的表空间及其数据文件也会被关闭。这意味着:在线数据文件的所有更改都已写入。离线表空间的数据文件保持关闭状态。
-
数据库状态
此时,数据库处于关闭状态,无法进行正常的操作。用户无法连接到数据库,所有的事务和查询都将被拒绝。
-
控制文件状态
在关闭数据库后,控制文件保持打开状态,但仍然处于挂载状态。这意味着控制文件仍然可以用于管理数据库的结构,但不允许进行任何数据操作。
卸载数据库 -
卸载过程
在关闭数据库后,Oracle将卸载数据库,以解除与实例的关联。此时,实例仍然保留在计算机的内存中。卸载数据库的步骤包括:
解除数据库与实例的连接。
关闭数据库的控制文件。
-
控制文件关闭
卸载数据库后,Oracle关闭该数据库的控制文件,确保不再对该数据库进行任何操作。
关闭实例
- 关闭实例的步骤
关闭实例是关闭数据库的最后一步。当您关闭一个实例时,Oracle会执行以下操作:
从内存中删除SGA(系统全局区)。
终止所有后台进程。 - 实例关闭后的状态
关闭实例后,数据库和实例之间的所有关联都被解除,Oracle数据库完全停止运行。此时,计算机的内存中不再保留任何与该数据库相关的信息。
总结
关闭数据库是一个多步骤的过程,涉及数据写入、关闭数据文件、卸载数据库和关闭实例等步骤。每个步骤都至关重要,以确保数据的完整性和系统的稳定性。正确地执行这些操作可以避免数据丢失和系统故障。
数据库的关闭模式
1.NORMAL 模式
这是一种较为温和的关机方式。在 NORMAL 模式下,数据库不允许新的连接,会等待当前会话结束后才进行关机操作。这意味着如果有用户正在进行数据库操作,数据库会等待这些操作完成后再关闭。这种模式可以确保数据的完整性和一致性,避免因突然关机而导致数据丢失或损坏。例如,当你在进行一些重要的业务处理,不希望被意外中断时,可以选择这种模式进行关机。
2.IMMEDIATE 模式
IMMEDIATE 模式会立即中断所有正在进行的数据库操作,不等待当前会话和事务结束。它会强制回滚未提交的事务,并关闭数据库。这种模式适用于需要快速关闭数据库的情况,比如在数据库出现严重故障或需要紧急维护时。但是,由于不等待事务结束,可能会导致一些数据不一致的情况,因此在使用这种模式时需要谨慎考虑。
3.TRANSACTIONAL 模式
在 TRANSACTIONAL 模式下,数据库会等待当前事务结束后再进行关机。这可以确保所有已提交的事务都被正确保存,而未提交的事务会被回滚。这种模式在一定程度上保证了数据的完整性,同时也比 NORMAL 模式更快地关闭数据库,因为它不需要等待所有会话结束。
4.ABORT 模式
ABORT 模式是一种比较极端的关机方式,它会立即终止数据库进程,不进行任何清理操作。这种模式可能会导致数据文件损坏、事务丢失等严重问题,因此只有在数据库无法以其他方式关闭时才应使用。在使用 ABORT 模式后,重新启动数据库时需要进行恢复操作,以确保数据库的一致性。
诊断文件
- 警报日志(Alert Log)
- 描述:记录数据库的启动、关闭、错误、警告和重要事件。
- 位置 :通常位于
ORACLE_HOME/diag/rdbms/<dbname>/<dbname>/trace/alert_<dbname>.log
。 - 用途 :
- 用于监控数据库的健康状态。
- 查看错误和警告信息。
- 记录日常操作信息。
- 诊断数据库错误。
- 特点 :
- 每个条目都包含时间戳和由 DBA 管理的信息。
- 记录数据库的启动、关闭、错误、警告和重要事件。
- 由
BACKGROUND_DUMP_DEST
定义的位置。 - 是数据库管理员监控和维护数据库的重要工具。
- 跟踪文件(Trace Files)
- 描述:记录特定会话或进程的详细信息,包括 SQL 执行、性能统计和错误信息。
- 位置 :通常位于
ORACLE_HOME/diag/rdbms/<dbname>/<dbname>/trace/
。 - 用途 :
- 深入分析特定问题,如性能瓶颈、死锁等。
- 记录 SQL 执行的详细信息,帮助优化查询。
- 生成方式 :
- 由数据库进程或会话生成。
- 可以通过设置跟踪级别或使用
ALTER SESSION
命令启用。
- 内容 :
- 包含 SQL 语句、绑定变量、执行计划和性能统计信息。
- 记录错误信息和警告。
- 创建时机 :
- 当跟踪被启用时,或在发生错误时自动生成。
- 文件大小 :
- 文件大小通常没有限制,直到手动删除或达到系统限制。
- 用户跟踪文件
- 描述:由用户会话生成,记录会话的执行情况。
- 用途 :
- 用于调试和分析特定用户的操作。
- 识别性能问题和错误。
- 生成方式 :
- 用户跟踪文件由用户会话生成,通常通过执行
ALTER SESSION SET SQL_TRACE = TRUE
命令启用。 - 也可以由服务器进程生成,记录特定会话的执行信息。
- 用户跟踪文件由用户会话生成,通常通过执行
- 内容 :
- 包含跟踪 SQL 语句的执行统计信息,如执行时间、逻辑读、物理读等。
- 记录用户的错误消息,当用户会话遇到错误时,会生成相应的跟踪文件。
- 创建时机 :
- 当用户会话启用跟踪时,系统会创建用户跟踪文件。
- 位置 :
- 用户跟踪文件的位置由初始化参数
USER_DUMP_DEST
定义。
- 用户跟踪文件的位置由初始化参数
- 文件大小 :
- 文件大小由初始化参数
MAX_DUMP_FILE_SIZE
定义,限制了单个跟踪文件的最大大小。
- 文件大小由初始化参数
- 诊断目录(Diagnostic Destination)
- 描述:Oracle 11g 及更高版本引入的集中管理诊断文件的目录。
- 位置 :通过初始化参数
DIAGNOSTIC_DEST
指定。 - 用途 :
- 简化诊断文件的管理和访问。
- 集中存储所有相关的诊断文件,便于查找和维护。
- 特点 :
- 包含警报日志、跟踪文件和其他诊断信息。
- 提供统一的目录结构,方便 DBA 管理。
- 性能视图
- 描述 :通过动态性能视图(如
V$DIAG_INFO
、V$SESSION
)获取诊断信息。 - 用途 :
- 实时监控数据库状态,获取会话和性能信息。
- 帮助 DBA 进行性能调优和故障排查。
- 生成方式 :
- 动态生成,实时反映数据库的运行状态。
- 内容 :
- 提供会话状态、锁信息、性能统计等。
- 可通过 SQL 查询访问,实时获取信息。
- 特点 :
- 不会持久保存,随时可以查询。
- 提供丰富的数据库运行时信息,帮助 DBA 进行监控和分析。
总结
这些诊断文件和信息对于数据库管理员来说是非常重要的工具,帮助他们监控数据库的运行状态、诊断问题并进行性能调优。
不同版本Oracle诊断文件的命名规则
文件类型 | Oracle 10g 及之前版本 | Oracle 11g 及更高版本 | Oracle 12c 及更高版本 |
---|---|---|---|
警报日志 | alert_<dbname>.log |
alert_<dbname>.log |
alert_<dbname>.log |
跟踪文件 | ora_<pid>.trc |
ora_<pid>.trc |
ora_<pid>.trc |
用户跟踪文件 | <username>_<sid>_<serial#>.trc |
<username>_<sid>_<serial#>.trc |
<username>_<sid>_<serial#>.trc |
诊断目录 | 不适用 | ORACLE_HOME/diag/rdbms/<dbname>/<dbname>/trace/ |
ORACLE_HOME/diag/rdbms/<dbname>/<dbname>/trace/ |
说明
<dbname>
:数据库名称<pid>
:进程 ID<username>
:用户名<sid>
:会话 ID<serial#>
:序列号
启用与关闭用户跟踪
- 会话级别启用/禁用用户跟踪
-
使用
ALTER SESSION
命令:sqlALTER SESSION SET SQL_TRACE = TRUE; # 启用跟踪 ALTER SESSION SET SQL_TRACE = FALSE; # 禁用跟踪
-
执行 DBMS 过程:
sqlEXEC DBMS_SESSION.SET_SQL_TRACE(TRUE); # 启用跟踪 EXEC DBMS_SESSION.SET_SQL_TRACE(FALSE); # 禁用跟踪
- 实例级别启用/禁用用户跟踪
-
设置初始化参数 :
sqlALTER SYSTEM SET SQL_TRACE = TRUE SCOPE=SPFILE; # 启用跟踪 ALTER SYSTEM SET SQL_TRACE = FALSE SCOPE=SPFILE; # 禁用跟踪
- 注意:更改实例级别的参数通常需要重启数据库才能生效。
诊断文件生命周期和启动原因
诊断文件 | 生命周期 | 启动原因 |
---|---|---|
警报日志 | 数据库启动时创建,持续更新 | 数据库启动、关闭或发生重要事件时 |
跟踪文件 | 跟踪启用时创建,跟踪会话结束或错误发生时更新 | 用户或 DBA 启用 SQL 跟踪时,或遇到错误时 |
用户跟踪文件 | 会话启用跟踪时创建,持续存在 | 用户通过 ALTER SESSION 启用跟踪时,或遇到错误时 |
诊断目录 | 数据库创建时定义,持续存在 | 通过初始化参数 DIAGNOSTIC_DEST 指定 |
性能视图 | 动态生成,实时反映数据库状态 | DBA 通过 SQL 查询访问性能视图 |