《Oracle 8i 开发使用手册》第14章:附加主题
来源:云盘
/田浩然上传的资料/电子书/Oracle/oracle8开发使用手册/14.pdf(中译本第14章,10 页,文本型 PDF)
本章五个主题
新 ROWID 格式 / 口令管理增强 / 恢复管理器 RMAN / 高级队列 AQ / 约束·NLS·SYS 安全性。
1. 新 ROWID(Oracle 8.x)
- 动因:支持分区、跨多表空间、突破文件数限制。ROWID 是 Oracle 一切存储寻址的基础。
- 文件号从”绝对”变”相对”:绝对文件号(dba_data_files.FILE_NO,库内唯一)+ 相对文件号(dba_files.RELATIVE_FNO,表空间内唯一)。因文件号只对表空间相对,ROWID 必须额外存数据对象号(dba_objects.DATA_OBJECT_ID,标识表/分区段);表被 truncate 或分区搬移后数据对象号版本递增,用于块版本校验(与回滚段比对)。
- 格式:64 位编码、18 字符宽 = 6 字符数据对象号 + 6 字符块号 + 3 字符行号(+相对文件号);内部存储 10 字节(7.x 是 6 字节)。
- 受限 vs 扩展:受限 ROWID(无点、绝对文件号)用于无分区表/本地索引/链接指针;扩展 ROWID(完整格式)用于分区表上的全局索引与内核存储。7.x 看 8.x 的 ROWID 需 DBMS_ROWID 包解释。
- 兼容坑:Oracle 7 表可导出进 8,含新 ROWID 的 8.x 表不能导回 7;应用若存储了 ROWID,导入后必须重算(内容过时);移植工具会自动加宽存储 ROWID 的列。
- DBMS_ROWID 包(由 catproc.sql 调 dbmsutil.sql 创建):rowid_create / rowid_info / rowid_type(0受限1扩展) / rowid_object / rowid_relative_fno / rowid_block_number / rowid_row_number / rowid_to_absolute_fno / rowid_to_extended / rowid_to_restricted / rowid_verify。
2. 口令管理增强(现代 DBA 视角仍不过时)
- 开关:运行 utlpwdmg.sql,通过 PROFILE(环境资源文件)挂到用户/组;与 resource_limit 参数不同,口令限制始终强制生效。
- 能力:失败登录自动锁账(可自动超时或仅手动解锁)、口令有效期+宽限期(可按组差异化:A组90+5天、B组30+1天)、口令历史(禁止重用)、复杂验证函数(可自定义 PL/SQL 替换缺省 verify_function:≥4字符、≠用户ID、字母+数字+标点各至少1、与旧口令至少3字符不同)。
- CREATE PROFILE 缺省值:failed_login_attempts=3 次、password_life_time=60 天、password_reuse_time=180 天、password_reuse_max=无限、password_lock_time=1 天、password_grace_time=10 天。
- 细节:password_reuse_time 与 password_reuse_max 互斥(只允许一个取数值)。新视图列:DBA_USERS.account_status/grace_date/lock_date/expiry_date;DBA_PROFILES 增 resource_type 列;新视图 user_password_limits。
3. RMAN 恢复管理器
- 结构四要素:RMAN 接口(CLI 或 OEM GUI)/ BACKUP·RECOVER·RESTORE 服务器函数 / 恢复目录(catrman.sql 建在专用”恢复数据库”)/ 存储子系统(OS 或第三方如 EMC、Legato、IBM,8.0.4 起集成)。
- 关键架构点:每个目标数据库备份它自己——RMAN 只初始化和管理,实际备份由目标库服务器进程完成;恢复目录存备份集/归档日志/控制文件等元数据。目录同步(catalog sync)很重要,因为 8.x 控制文件开始跟踪日志转换与归档拷贝(增长可用 control_file_record_keep_time 控制)。
- 恢复目录自身的备份悖论:角色反转——把某个目标库临时当作恢复库的备份目标,保证至少有两份目录。目录应与核心应用库分机存放。
- 无目录模式可用但受限:无表空间级时间点恢复(PTR,因回滚段信息需查目录)、无存储脚本、控制文件损坏时仅部分自动恢复。SYSTEM 表空间不支持 PTR。
- 术语与增量:备份集(多文件写成一个集,使用前须 restore,支持增量)vs 镜像复制(一对一,仅磁盘,可直接改名即用,可注册外部镜像)。增量备份只备份变化块、跳过未用块——这是 RMAN 相对 EBU/冷备的杀手级特性;0~7 级多级增量仿 UNIX ufs dump 策略(2级=周、1级=日,只备份自上次同级或更低级以来的变化),恢复时任一级最多只需一个增量。
- 备份要求库打开(取回滚信息),恢复只需实例启动;备份/恢复都校验块损坏(破碎块=备份读取时被修改的块,重读取一致版本)。监控视图 VBACKUP_LOG。
4. 高级队列 AQ
- 定位:延时(异步)执行机制,FIFO/优先级队列,持久化保证宕机重启后消息仍被处理;等价于内置的 MOM,无需第三方。适用:工作控制、任务流管理。
- 概念:消息=最小工作单元(payload 可为任意对象类型 + 控制信息);ENQUEUE/DEQUEUE(dbms_aq 包,需 aq_user_role);消息表存队列;支持多接收者(订阅者 subscriber)、消息分组、响应/异常队列、事务性与非事务性消息。
- 管理:dbms_aqadm 包(建/删队列表与队列、订阅者、启停时间管理器),需 AQ_ADMINISTRATOR_ROLE,且 SYS 先 grant_type_access 授权对象类型。
- 坑:消息带时间属性(延时/截止/保持)时必须设 init.ora
AQ_TM_PROCESSES=1启动时间管理器进程。视图:DBA_QUEUES/USER_QUEUES、AQ$<queue_table>。
5. 约束 / NLS / SYS 安全性
- 延迟约束:可 DEFER 到提交时检查——违反只回滚整个事务;立即约束在语句级检查,只回滚该语句。FORCED 约束只查新 DML、忽略存量脏数据。唯一/主键约束允许用非唯一索引支撑。
- NLS:新增 NCHAR(定长多字节,≤2000 字符)与 NVARCHAR2(≤4000);字面量用
N'...'前缀。 - SYS 安全收紧:非 SYSDBA 身份(无 OSDBA 组、无 SYS 口令)不能连 SYS 模式;ANY 类系统权限(如 SELECT ANY TABLE)不再能访问 SYS 对象,必须 SELECT_CATALOG_ROLE / EXECUTE_CATALOG_ROLE。这是”数据字典访问从隐式特权改为显式角色”的经典案例。
可行动点
- 口令管理一节的六个 PROFILE 参数,可直接映射到现代系统审计清单(对照 PostgreSQL 的密码策略扩展、Linux pam_pwquality)——缺省值 3 次锁定/60 天有效期是 2000 年代合规基线的化石样本。
- RMAN 的”0-7 级增量 + 每级只恢复一个增量”设计,是理解任何现代备份工具(restic/borg 反向思路)分层增量策略的参照系。
- ROWID 演变说明一个通用规律:存储寻址格式变更是最难兼容的 schema 变更——凡应用把内部定位符持久化到库外,升级即埋雷。
关联
- 同书第18章(分区)、第20章(实现增强)、第10章(对象类型/对象标识符)
- UNIX系统安全工具-第3章-帐号安全基础(同一时代的口令策略思想:UNIX 靠 crypt 机制、Oracle 靠 PROFILE 参数,互为 OS 层与 DB 层的镜像)