当前位置: 首页 > news >正文

Oracle体系结构-警报日志文件 (Alert Log File / Alert SID.log)

第一部分:密码文件 (Password File)

1. 原理

  • 核心目的: 密码文件主要用于远程数据库管理员身份验证。当用户需要以 SYSDBA, SYSOPER, SYSBACKUP, SYSDG, SYSKM特权身份从客户端通过网络连接到数据库实例(而不是直接在数据库服务器本机操作系统上连接)时,Oracle 就需要验证这些用户的权限。
  • 认证机制: 数据库启动时(NOMOUNT 或更高阶段),在监听器 (Listener) 协助建立连接后,实例本身尚未完全打开数据库数据字典来验证用户。此时,密码文件提供了一个外部存储库,用于验证尝试以特权身份连接的用户名和密码。
  • 文件本质: 它是一个加密的二进制文件,存储了被授予 SYSDBA, SYSOPER 等权限的数据库用户的用户名及其对应的密码哈希值(不是明文密码)。
  • 与操作系统的关系: 在 Unix/Linux 上,密码文件通常位于 $ORACLE_HOME/dbs 目录下,名称格式为 orapw<ORACLE_SID> (例如 orapworcl)。在 Windows 上,通常位于 %ORACLE_HOME%\database 目录下,名称格式为 PWD<ORACLE_SID>.ora (例如 PWDorcl.ora)。文件权限通常设置为 640 (-rw-r-----),确保只有 oracle 用户和 dba 组可以读写。

2. 特性

  • 静态文件: 内容不会在数据库正常操作期间频繁变动。只有在授予或撤销用户 SYSDBA/SYSOPER 等权限,或者更改这些用户的密码时才会更新。
  • 实例级: 密码文件与特定的 Oracle 实例 (ORACLE_SID) 关联。
  • 特权用户存储: 只存储被显式授予了 SYSDBA, SYSOPER, SYSBACKUP, SYSDG, SYSKM 权限的用户。普通数据库用户即使拥有 DBA 角色,如果未被授予这些特权身份,其密码也不会存储在密码文件中。
  • 共享与独占: 在单实例环境中,密码文件是独占的。在 RAC 环境中,强烈推荐在所有节点上使用同一个共享的密码文件(通常放在共享存储上,如 ASM 磁盘组或集群文件系统),以确保所有节点对特权用户的认证一致。也可以在每个节点维护一份拷贝,但必须保持同步,否则会导致连接问题。
  • 加密: 存储的是密码的单向哈希值(早期版本算法较弱,后期版本如 12c+ 使用更安全的 SHA 算法),无法从文件内容反推出原始密码。
  • 大小: 文件大小固定,在创建时指定(通过 orapwdentries 参数)。如果特权用户数量超过初始分配条目数,需要重建文件。

3. 作用

  • 启用远程特权连接: 这是最主要的作用。允许 DBA 从远程客户端使用 SQL*Plus, SQL Developer, RMAN, Data Pump 等工具以 AS SYSDBA 等身份连接数据库,执行启动、关闭、备份恢复、创建用户等需要高权限的操作。
  • 数据库启动初始阶段认证: 在数据库启动到 NOMOUNTMOUNT 阶段时,密码文件是验证 SYS 用户连接(例如执行 STARTUP MOUNT 命令)的唯一方式,因为数据字典此时还不可用。
  • 权限管理: 通过 GRANT SYSDBA TO <username>;REVOKE SYSDBA FROM <username>; 命令,将用户加入或移出密码文件,从而授予或撤销其远程执行特权操作的能力。
  • 强制密码更改: 当修改 SYS 用户或其他特权用户的密码时,密码文件会立即更新。下次远程特权连接必须使用新密码。

4. 管理操作

  • 创建: 使用 orapwd 实用程序。
    orapwd file=$ORACLE_HOME/dbs/orapw<ORACLE_SID> password=<SYS_password> entries=<max_users> force=y
    
    • file: 指定完整路径和文件名。
    • password: 设置 SYS 用户的密码(12c 之前必须指定;12c 之后 SYS 密码通常由数据库创建时指定,此参数可省略或用于重置)。
    • entries: 预计的最大特权用户数量。
    • force: 覆盖已存在的同名文件。
    • (可选) format: 12c+ 可用,指定格式 1212.2 以使用更安全的 SHA512 算法。
  • 添加/移除用户:
    • 授予权限 (自动添加用户到密码文件):
      GRANT SYSDBA TO scott;
      
    • 撤销权限 (自动从密码文件移除用户):
      REVOKE SYSDBA FROM scott;
      
  • 更改特权用户密码: 使用 ALTER USER 命令更改 SYS 或其他特权用户的密码会同时更新数据字典和密码文件
  • 查看内容: 无法直接读取二进制内容。可通过动态性能视图 V$PWFILE_USERS 查询哪些用户拥有特权以及这些特权是什么:
    SELECT * FROM V$PWFILE_USERS;
    

5. 故障恢复

密码文件损坏或丢失会导致无法以特权身份进行远程连接。本地操作系统认证(如果配置了 OSDBA/OSOPER 组)通常不受影响。

  • 症状:
    • 尝试远程 CONNECT / AS SYSDBA 失败 (ORA-01031: insufficient privileges)。
    • 尝试远程 CONNECT sys/<password>@<service> AS SYSDBA 失败 (ORA-01017: invalid username/password; logon denied),即使密码确认正确。
    • V$PWFILE_USERS 可能无法查询或返回错误。
    • 监听器日志或数据库告警日志 (alert_<SID>.log) 中可能出现相关错误。
  • 恢复步骤:
    1. 确定本地操作系统认证可用 (关键!): 登录数据库服务器操作系统,确保当前用户属于 OSDBA (通常 dba 组) 或 OSOPER 组。
    2. 本地连接: 使用操作系统认证连接到数据库实例 (通常 sqlplus / as sysdba)。
    3. 重建密码文件:
      • 使用 orapwd 命令重建文件 (参考上面的创建命令)。
      • 重要: 如果重建时指定了 password 参数,它会重置 SYS 用户的密码!如果不想重置 SYS 密码 (12c+ 常见),在重建时不指定 password 参数即可。文件重建后,SYS 的密码保持其在数据库内部的当前状态。
    4. 重新授予权限: 重建后的密码文件只包含 SYS 用户。需要重新为其他特权用户执行 GRANT SYSDBA/SYSOPER 命令。
    5. 测试远程连接: 尝试从远程客户端使用特权用户连接,验证恢复成功。
  • 预防与最佳实践:
    • 将密码文件包含在常规的数据库文件系统备份策略中。
    • 在 RAC 环境中,确保所有节点使用共享的密码文件或各节点副本保持严格同步。
    • 定期检查 V$PWFILE_USERS 以确保权限分配符合预期。
    • 使用强密码并定期更新特权用户密码。

第二部分:临时文件 (Temp Files)

1. 原理

  • 核心目的: 临时文件是 TEMP 表空间的物理存储文件。TEMP 表空间专门用于存储数据库操作过程中产生的临时数据。这些数据是会话私有的或全局临时的,并且不需要持久化
  • 数据本质: 存储的数据包括:
    • 大型排序操作(ORDER BY, GROUP BY, DISTINCT, UNION, 创建索引等)的中间结果。
    • 哈希连接 (HASH JOIN) 的哈希区。
    • 临时 LOB 数据。
    • 临时表和临时 LOB 的索引数据。
    • 某些类型的查询重写操作。
    • 结果集缓存(如果过大无法放入 PGA)。
  • 存储管理: Oracle 使用临时文件作为磁盘上的溢出区域。当会话的私有 SQL 区域(在 PGA 中)无法容纳操作所需的临时数据时,数据就会被写入到 TEMP 表空间的临时文件中。写入是直接路径 I/O,绕过 Buffer Cache,提高效率。
  • 空间分配: TEMP 表空间使用临时文件扩展区 (Temp Extents) 管理。这些扩展区是按需分配的。当会话需要临时空间时,Oracle 会在临时文件中分配一个扩展区给该会话使用。会话结束时(或事务结束时,对于全局临时表行),该会话使用的扩展区会被标记为空闲,并可立即被其他会话重用。不需要等待检查点。这是 TEMP 表空间和 PERMANENT 表空间在空间回收机制上的关键区别。
  • 文件本质: 临时文件也是操作系统文件,通常具有 .dbf.tmp 扩展名。它们由数据库创建和管理。

2. 特性

  • 非持久性: 存储在临时文件中的数据是临时的。数据库重启后,临时文件中的所有数据都会被清除。临时文件本身不会被删除,但内容会被重置。
  • 不生成 Redo: 对临时文件的写入操作**不产生重做日志 (Redo Log)**。因为临时数据不需要恢复。这是提高涉及大量临时数据操作性能的关键。
  • 可能生成 Undo (特殊): 虽然不生成 Redo,但对全局临时表 (Global Temporary Tables, GTT) 的 DML 操作(INSERT, UPDATE, DELETE会生成 Undo 数据(存储在 Undo 表空间),以确保事务的读一致性和回滚能力。这些 Undo 会生成 Redo。对排序和哈希操作的临时数据写入则完全不生成 Undo 或 Redo。
  • NOLOGGING 模式: 临时文件总是处于 NOLOGGING 模式。即使显式指定 LOGGING 也会被忽略。这进一步强调了临时数据不需要日志记录的特性。
  • 空间管理: TEMP 表空间使用临时文件扩展区 (Temp Extents) 管理,采用位图 (Bitmap) 方式跟踪空闲空间,效率很高。空间分配和回收非常快速。
  • 自动扩展: 临时文件通常配置为自动扩展 (AUTOEXTEND ON), 以避免空间不足错误 (ORA-01652: unable to extend temp segment)。可以设置 NEXTMAXSIZE 来控制增长。
  • 共享性: TEMP 表空间是数据库级的共享资源。所有需要临时空间的会话都会从同一个(或配置的多个)TEMP 表空间分配临时扩展区。
  • 默认存在: 数据库创建时 (CREATE DATABASE),通常会自动创建一个默认的 TEMP 表空间及其关联的临时文件。

3. 作用

  • 支持内存密集型操作: 为超出 PGA 内存容量的大型排序、哈希连接、位图操作等提供磁盘暂存空间,确保这些操作能够完成。
  • 存储会话私有临时数据: 为每个会话在执行复杂 SQL 时产生的私有临时数据提供存储。
  • 存储全局临时表 (GTT) 数据: 提供全局临时表数据的物理存储位置。GTT 的定义(元数据)存储在数据字典中,但其实际数据行存储在分配给的 TEMP 表空间中。
  • 提高性能: 通过避免使用永久表空间存储临时数据,减少对永久表空间的 I/O 竞争和碎片化。直接路径 I/O 和 NOLOGGING 特性也提升了写入效率。
  • 管理临时空间需求: 集中管理数据库运行期间产生的所有临时数据存储需求。

4. 管理操作

  • 创建临时表空间:
    CREATE TEMPORARY TABLESPACE temp
    TEMPFILE '/u01/oradata/orcl/temp01.dbf' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE 10G
    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
    
    • 使用 TEMPFILE 关键字指定临时文件。
    • EXTENT MANAGEMENT LOCAL 是必须的(也是唯一支持的)。
    • UNIFORM SIZE 指定所有扩展区大小相同,是管理临时空间的最佳实践。
  • 添加临时文件: 给现有 TEMP 表空间添加更多空间。
    ALTER TABLESPACE temp ADD TEMPFILE '/u01/oradata/orcl/temp02.dbf' SIZE 2G AUTOEXTEND ON NEXT 200M MAXSIZE 20G;
    
  • 调整大小/移动/重命名:
    • Resize:
      ALTER DATABASE TEMPFILE '/u01/oradata/orcl/temp01.dbf' RESIZE 5G;
      
    • Move/Rename (需要表空间离线): 移动或重命名临时文件相对复杂,因为 TEMP 表空间通常不能轻易离线(除非没有活动会话使用它)。
      1. 创建新的 TEMP 表空间 (CREATE TEMPORARY TABLESPACE ...).
      2. 将默认临时表空间切换到新的:
        ALTER DATABASE DEFAULT TEMPORARY TABLESPACE new_temp;
        
      3. 等待所有使用旧 TEMP 表空间的会话结束(或强制 kill)。
      4. 删除旧的 TEMP 表空间及其文件:
        DROP TABLESPACE old_temp INCLUDING CONTENTS AND DATAFILES;
        
      5. (可选)重命名新的 TEMP 表空间为原来的名字(如果需要),并确保它是默认的。
  • 删除临时文件: 不能单独删除临时文件,只能通过删除其所属的 TEMP 表空间来删除。
    DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;
    
    在删除前,必须确保它不是默认临时表空间。
  • 监控:
    • DBA_TEMP_FILES / V$TEMPFILE: 查看临时文件信息(名称、大小、状态、已用/空闲空间)。
    • V$SORT_USAGE: 查看当前正在进行的排序操作及其使用的临时空间。
    • V$TEMPSEG_USAGE: 查看当前会话使用的临时段信息。
    • DBA_TABLESPACES: 查看表空间信息,包括 TEMP 表空间。
    • V$SESSTAT / V$SYSSTAT: 统计信息如 sorts (disk) 可以指示排序溢出到磁盘的频率。
    • V$TEMP_SPACE_HEADER: (11gR2+) 提供更详细的临时空间使用信息。

5. 故障恢复

临时文件损坏或丢失通常不会导致数据库崩溃,但会严重影响依赖临时空间的查询和操作。

  • 症状:
    • 执行需要大量临时空间的操作(如大排序、哈希连接、使用大 GTT)时失败,报错 ORA-01578: ORACLE data block corrupted (file # <file_id>, block # <block_id>)ORA-00376: file <file_id> cannot be read at this timeORA-01110: data file <file_id>: '/path/to/tempfile.dbf'。错误通常指向具体的临时文件。
    • 操作报错 ORA-01652: unable to extend temp segment,但如果检查文件系统空间充足且文件可写,则可能是文件内部损坏导致无法分配新扩展区。
    • 数据库告警日志 (alert_<SID>.log) 中会记录文件 I/O 错误或校验和错误。
  • 恢复步骤:
    1. 识别损坏的文件: 根据错误信息或告警日志确认哪个临时文件损坏。
    2. 重建临时文件 (推荐方法):
      • 由于临时文件内容不重要,最简单的恢复方法是删除损坏的临时文件并添加一个新的
      • 确保有足够的磁盘空间。
      • 执行删除和添加操作:
        -- 假设损坏的文件是 file_id=3
        ALTER DATABASE TEMPFILE '/path/to/corrupted_temp.dbf' DROP INCLUDING DATAFILES;
        ALTER TABLESPACE temp ADD TEMPFILE '/path/to/new_temp.dbf' SIZE ... AUTOEXTEND ... ;
        
      • 如果 TEMP 表空间只有一个临时文件且它损坏了,需要先添加一个新的,然后再删除旧的:
        ALTER TABLESPACE temp ADD TEMPFILE '/path/to/new_temp.dbf' SIZE ... AUTOEXTEND ... ;
        ALTER DATABASE TEMPFILE '/path/to/corrupted_temp.dbf' DROP INCLUDING DATAFILES;
        
    3. 重建 TEMP 表空间 (备选方法): 如果损坏严重或想彻底重建:
      • 创建一个新的临时表空间 new_temp
      • 将默认临时表空间切换到 new_temp
      • 等待所有会话切换到新的 TEMP 表空间(可能需要时间或手动终止旧会话)。
      • 删除损坏的旧 TEMP 表空间及其文件 (DROP TABLESPACE ... INCLUDING CONTENTS AND DATAFILES;)。
      • (可选)重命名 new_temp 为原来的名字,并确保它是默认的。
  • 为什么不需要介质恢复?
    • 临时文件不包含持久化数据。
    • 对临时文件的写入不生成 Redo。因此,无法使用 Redo Log 进行恢复。
    • 数据库重启后,临时文件内容本就会被清空。直接重建文件是最快、最安全的方案。
  • 预防与最佳实践:
    • 将临时文件放置在高性能、高可用性的存储上(如 RAID 10, ASM),因为临时文件的 I/O 可能非常密集。
    • 配置合理的 AUTOEXTEND 设置(NEXT 大小和 MAXSIZE),避免频繁的小扩展和潜在的磁盘空间耗尽问题。
    • 监控 V$SORT_USAGEV$TEMP_SPACE_HEADER 以了解临时空间使用模式和压力,适时增加临时文件大小或数量。
    • 使用 UNIFORM SIZE 扩展区管理以减少碎片。
    • 在 RAC 环境中,可以为每个实例配置自己的 TEMP 表空间(实例私有)或使用共享的 TEMP 表空间。共享 TEMP 更常见,但需要确保底层存储能承受并发 I/O。私有 TEMP 可以隔离实例间的临时 I/O 影响。
    • 虽然不需要备份临时文件内容(因为非持久),但包含临时文件定义的数据库控制文件和元数据备份是重要的。如果整个数据库需要恢复,重建 TEMP 表空间是恢复步骤的一部分。

总结对比表

特性密码文件 (Password File)临时文件 (Temp Files)
核心目的远程特权用户 (SYSDBA, SYSOPER 等) 身份验证存储数据库操作产生的临时数据 (排序, 哈希, GTT 等)
文件本质加密的二进制文件数据库管理的操作系统文件 (通常 .dbf.tmp)
持久性持久化存储用户权限关系非持久化 - 数据库重启后内容清空
关键数据特权用户名及其密码哈希值会话私有或全局临时的中间结果数据
生成 Redo否 (文件独立更新) (核心特性)
生成 Undo仅针对 GTT 的 DML (Undo 本身产生 Redo)
NOLOGGING不适用总是 (即使指定 LOGGING 也无效)
空间管理固定条目数 (entries 参数)本地管理的临时扩展区 (位图), UNIFORM SIZE 最佳
故障恢复重建文件 (orapwd), 重新授权。不能 RMAN 恢复直接重建文件/表空间不需要/不能介质恢复 (无 Redo)
关联对象特定实例 (ORACLE_SID)TEMP 表空间
监控视图V$PWFILE_USERSDBA_TEMP_FILES, V$TEMPFILE, V$SORT_USAGE, V$TEMP_SPACE_HEADER
典型位置$ORACLE_HOME/dbs (Unix), %ORACLE_HOME%\database (Win)$ORACLE_BASE/oradata/<DB_NAME>/, ASM 磁盘组等
共享 (RAC)强烈推荐共享 或 严格同步各节点副本通常共享一个 TEMP 表空间,也可配置实例私有
影响故障症状无法远程特权连接需要临时空间的操作失败 (ORA-01578, ORA-00376 等)

理解密码文件和临时文件的原理、特性、作用和管理方法,特别是它们在故障恢复策略上的根本区别(密码文件需要重建和重授权,临时文件直接重建即可),对于 Oracle 数据库管理员进行有效的系统管理、性能调优和故障排除至关重要。

http://www.dtcms.com/a/389385.html

相关文章:

  • 解锁 TiDB:供应链场景下分布式分库分表的案例
  • 【IEEE出版 | 早鸟优惠开启】人工智能驱动图像处理与计算机视觉技术国际学术研讨会 (AIPCVT 2025)
  • Ubuntu之旅-02 Redis
  • 基于RK3588+FPGA的无人机飞控系统,支持AI算力和FPGA实时性,强大的图像处理能力,支持全国产化
  • 杂七杂八之基于ApiPost的Jar包调用
  • 华为HCCL集合通信库AllGather算子全流程解析
  • uv管理的python项目怎么打包成docker部署发布上线
  • unity之uv编辑
  • 华为电源研发的IPD实践:从概念到生命周期的结构化管控
  • MySQL中什么是回表查询,如何避免和优化?
  • MySql01
  • 2025版基于springboot的旅游门票预定系统
  • 3. Linux 计划任务管理
  • EasyCVR在智慧城市中场景中的核心应用与实践方案
  • LeetCode 刷题【84. 柱状图中最大的矩形】
  • CPP网络编程基础知识
  • 临床AI产品化全流程研究:环境聆听、在环校验与可追溯系统的多技术融合实践(上)
  • 【k8s】web服务优雅关闭用户连接
  • 设计模式的七大原则总述
  • C/C++柔性数组
  • 从 LiveData 到 Flow:Android 状态管理的现代化演进
  • 34、模型微调技术实战 - LoRA参数高效微调全流程
  • ASP.NET Core 中基于角色的授权
  • C++ 在 Windows 下实现最基础的 WebSocket 服务端与客户端
  • 并发、分布式和实时设计方法
  • C语言第15讲
  • windows 下使用 bat 批处理运行 Chrome 无头模式刷一波访问量
  • 项目名称:基于Qt框架的跨平台天气预报应用程序​​
  • 王自如重操旧业拆箱iPhone:苹果新机发售旧机发热是惯例……
  • 鸿蒙Next Core File Kit:文件管理的高效安全之道