创 刊 词 硅 谷 明 天 计 划 已 久 的 系 列 技 术 简 报, 在 广 大 客 户 朋 友 的 关 注 下, 自 即 日 起 正 式 创 刊 了 作 为 该 系 列 技 术 简 报 责 任 编 辑, 在 此 向 广 大 客 户 朋 友, 和 参 与 该 系 列 简 报 撰 写 编 辑 美 工 发 布 的 所 有 同 事, 表 示 深 深 的 谢 意, 感 谢 大 家 的 持 续 关 注 和 辛 勤 劳 动 我 相 信, 有 朋 友 们 的 关 注 和 同 事 的 努 力, 我 们 一 定 会 越 办 越 好 我 们 的 系 列 技 术 简 报, 将 分 二 条 主 线, 一 条 是 关 于 Oracle, 一 条 是 关 于 SQL Server 我 们 将 以 半 月 刊 的 形 式, 向 大 家 讲 述 产 品 体 系 架 构, 最 新 产 品 潮 流, 成 功 案 例, 典 型 应 用 等 我 们 希 望 以 此 为 桥 梁, 向 大 家 及 时 传 递 最 新 的 相 关 技 术, 普 及 数 据 库 知 识, 宣 传 硅 谷 明 天 最 新 的 活 动 信 息 Oracle 系 列 篇 将 分 十 五 期 发 表, 其 相 应 主 题 : Oracle Net 服 务 器 端 基 本 配 置 Oracle Net 体 系 结 构 Oracle Shared Server 的 使 用 和 配 置 Oracle 数 据 库 安 全 Oracle 数 据 库 服 务 器 的 结 构 概 述 存 储 结 构 和 关 系 管 理 表 和 索 引 管 理 表 空 间 和 数 据 文 件 管 理 还 原 (undo) 数 据 管 理 和 维 护 在 线 日 志 管 理 数 据 对 象 管 理 索 引 控 制 文 件 命 名 方 法 配 置 维 护 数 据 完 整 性 本 刊 推 出 以 后, 我 们 将 适 时 推 出 对 应 的 视 频 录 像, 敬 请 大 家 期 待, 索 取 硅 谷 明 天 总 经 理
管 理 表 1. 存 储 用 户 数 据 在 Oracle 数 据 库 中 有 几 种 存 储 用 户 数 据 的 方 法 : 的 行 常 规 表 分 区 表 按 索 引 组 织 的 表 集 簇 表 (cluster) 分 区 表 它 具 有 以 下 特 征 : 每 个 分 区 表 有 一 个 或 多 个 分 区, 每 个 分 区 存 储 已 分 区 ( 使 用 范 围 分 区 散 列 分 区 组 合 分 区 或 列 表 分 区 ) 分 区 表 中 的 每 个 分 区 为 一 个 段, 可 各 自 位 于 不 同 的 表 空 间 中 对 于 能 够 同 时 使 用 几 个 进 程 进 行 查 询 或 操 作 的 大 型 表, 分 区 非 常 有 用 有 一 些 特 殊 的 命 令 可 用 来 管 理 一 个 表 内 的 分 区 按 索 引 组 织 的 表 : 按 索 引 组 织 的 表 就 像 在 一 个 或 多 个 列 中 具 有 主 键 索 引 的 堆 表 (heap table) 但 是, 按 索 引 组 织 的 表 并 不 为 表 和 B 树 索 引 维 护 两 个 单 独 的 存 储 空 间, 而 是 仅 维 护 一 个 包 含 表 主 键 和 其 它 列 值 的 树 由 于 设 置 PCTTHRESHOLD 值 以 及 较 长 的 行 长 度 需 要 溢 出 区 域, 所 以 可 能 存 在 溢 出 段 (overflow segment) 按 索 引 组 织 的 表 为 进 行 涉 及 精 确 匹 配 和 范 围 搜 索 的 查 询, 提 供 基 于 键 的 对 表 数 据 的 快 速 访 问 此 外, 存 储 要 求 也 降 低 了, 因 为 键 列 在 表 和 索 引 中 不 重 复 除 非 索 引 条 目 变 得 非 常 大, 否 则 其 余 的 非 键 列 就 存 储 在 索 引 中 ; 在 此 情 况 下,Oracle 服 务 器 提 供 OVERFLOW 子 句 来 处 理 此 问 题 集 簇 表 : 集 簇 表 为 存 储 表 数 据 提 供 另 一 种 可 选 的 方 法 簇 由 一 个 表 或 共 享 相 同 数 据 块 的 一 组 表 构 成, 它 们 之 所 以 被 组 织 在 一 起, 是 因 为 它 们 共 享 共 同 的 列 并 且 经 常 一 起 使 用 据 簇 具 有 以 下 特 征 : 簇 有 一 个 集 簇 键, 用 来 标 识 需 要 存 储 在 一 起 的 多 个 行 集 簇 键 可 由 一 个 或 多 个 列 组 成 簇 中 的 表 具 有 与 集 簇 键 相 对 应 的 列 集 簇 是 一 种 对 使 用 表 的 应 用 程 序 透 明 的 机 制 可 以 象 操 作 存 储 在 常 规 表 中 的 数 据 那 样 操 作 集 簇 表 中 的 数 更 新 集 簇 键 中 的 一 列 可 能 需 要 移 植 该 行 集 簇 键 独 立 于 主 键 簇 中 的 表 可 有 一 个 主 键, 它 可 以 是 集 簇 键, 也 可 以 是 另 一 组 列 创 建 簇 通 常 是 为 了 改 善 性 能 随 机 访 问 集 簇 数 据 更 快, 而 对 集 簇 表 进 行 全 表 扫 描 通 常 较 慢 簇 会 重 新 规 范 表 的 物 理 存 储, 但 不 影 响 其 逻 辑 结 构 2. oracle 内 置 数 据 类 型 标 量 数 据 类 型 : 字 符 数 据 : 字 符 数 据 可 以 作 为 长 度 固 定 或 长 度 可 变 的 字 符 串 存 储 在 数 据 库 中
长 度 固 定 的 字 符 数 据 类 型 ( 如 CHAR 和 NCHAR) 存 储 时 带 有 填 补 空 格 NCHAR 是 全 球 化 支 持 包 含 的 一 种 数 据 类 型, 存 储 固 定 长 度 的 Unicode 数 据, 其 最 大 大 小 取 决 于 存 储 一 个 字 符 所 需 要 的 字 节 数, 上 限 为 每 行 2,000 个 字 节 缺 省 值 为 1 个 字 符 或 1 个 字 节, 具 体 取 决 于 字 符 集 长 度 可 变 的 字 符 数 据 类 型 仅 使 用 存 储 实 际 列 值 所 需 要 的 字 节 数, 并 且 每 行 的 大 小 可 以 不 同, 最 大 可 达 4,000 字 节 VARCHAR2 和 NVARCHAR2 就 是 长 度 可 变 的 字 符 数 据 类 型 的 例 子 数 字 数 据 类 型 :Oracle 数 据 库 中 的 数 字 始 终 以 长 度 可 变 的 数 据 存 储 最 多 可 以 存 储 38 个 有 效 数 位 数 字 数 据 类 型 需 要 : 时 间 指 数 用 1 个 字 节 尾 数 中 的 每 两 个 有 效 数 位 用 1 个 字 节 负 数 用 1 个 字 节 ( 如 果 有 效 数 位 少 于 38 个 字 节 ) DATE 数 据 类 型 :Oracle 服 务 器 将 日 期 存 储 在 包 含 七 个 字 节 的 固 定 长 度 字 段 中 Oracle DATE 始 终 包 括 TIMESTAMP 数 据 类 型 : 此 数 据 类 型 存 储 日 期 和 时 间, 包 括 零 点 几 秒, 最 高 可 达 9 位 小 数 TIMESTAMP WITH TIME ZONE 和 TIMESTAMP WITH LOCAL TIME ZONE 可 以 使 用 时 区 设 定 时 间, 如 夏 时 制 TIMESTAMP 和 TIMESTAMP WITH LOCAL TIME ZONE 可 用 于 主 键, 而 TIMESTAMP WITH TIME ZONE 则 不 能 RAW 数 据 类 型 : 可 以 使 用 此 数 据 类 型 存 储 小 型 二 进 制 数 据 在 网 络 中 的 计 算 机 之 间 传 输 RAW 数 据 时, 或 者 使 用 Oracl 实 用 程 序 将 RAW 数 据 从 一 个 数 据 库 移 到 另 一 个 数 据 库 时,Oracle 服 务 器 不 执 行 字 符 集 转 换 存 储 实 际 列 值 所 需 要 的 字 节 数 大 小 随 每 行 大 小 而 异, 最 多 为 2,000 字 节 LONG LONG RAW 和 大 型 对 象 (LOB) 数 据 类 型 : Oracle 为 存 储 LOB 提 供 六 种 数 据 类 型 : CLOB 和 LONG 用 于 存 储 大 型 的 宽 度 固 定 的 字 符 数 据 NCLOB 用 于 存 储 大 型 的 宽 度 固 定 国 家 字 符 集 数 据 BLOB 和 LONG RAW 用 于 存 储 非 结 构 化 数 据 BFILE 用 于 存 储 操 作 系 统 文 件 中 的 非 结 构 化 数 据 LONG 和 LONGRAW 数 据 类 型 以 前 用 于 非 结 构 化 数 据, 如 二 进 制 图 像 文 档 或 地 理 信 息, 目 前 主 要 用 于 向 后 兼 容 这 两 种 数 据 类 型 已 由 LOB 数 据 类 型 代 替 LOB 数 据 类 型 与 LONG 和 LONG RAW 不 同, 不 能 互 换 LOB 不 支 持 LONG 应 用 程 序 编 程 接 口 (API), 反 之 亦 然 集 合 数 据 类 型 : 有 两 种 集 合 数 据 类 型 可 用 来 为 表 中 的 一 个 给 定 行 存 储 重 复 的 数 据 变 化 数 组 (VARRAY): 变 化 数 组 对 于 存 储 包 含 少 量 组 成 元 素 的 列 表 ( 如 客 户 的 电 话 号 码 ) 非 常 有 用 VARRAY 具 有 以 下 特 征 : 数 组 即 一 组 有 序 的 数 据 组 成 元 素 一 个 给 定 数 组 的 所 有 组 成 元 素 的 数 据 类 型 相 同 每 个 组 成 元 素 都 有 索 引, 即 与 数 组 中 组 成 元 素 的 位 置 相 对 应 的 编 号 数 组 中 组 成 元 素 的 数 目 决 定 了 数 组 的 大 小 Oracle 服 务 器 允 许 数 组 的 大 小 可 以 变 化, 但 在 声 明 数 组 类 型 时 必 须 指 定 最 大 大 小 嵌 套 表 : 嵌 套 表 提 供 一 种 将 一 个 表 定 义 为 另 一 个 表 内 一 列 的 方 法 嵌 套 表 可 用 来 存 储 可 能 包 含 大 量 记 录 的 集 合 ( 比 如 一 个 订 单 中 的 若 干 条 目 )
类 型 嵌 套 表 一 般 具 有 以 下 特 征 : 嵌 套 表 是 一 组 无 次 序 的 记 录 或 行 嵌 套 表 中 的 各 行 结 构 相 同 嵌 套 表 中 的 行 与 父 表 分 别 存 储, 并 且 父 表 中 的 对 应 行 有 一 个 指 针 嵌 套 表 的 存 储 特 点 可 由 数 据 库 管 理 员 来 定 义 嵌 套 表 没 有 预 先 确 定 的 最 大 大 小 关 系 数 据 类 型 (REF): 关 系 类 型 在 数 据 库 内 用 作 指 针 使 用 这 些 类 型 需 要 对 象 (Objects) 选 项 例 : 订 购 的 每 一 项 都 可 以 指 向 或 引 用 PRODUCTS 表 中 的 一 行, 而 不 必 存 储 产 品 代 码 Oracle 用 户 定 义 的 数 据 类 型 :Oracle 服 务 器 允 许 用 户 定 义 抽 象 的 数 据 类 型 并 在 应 用 程 序 内 使 用 这 些 数 据 3. ROWID ROWID 为 一 个 十 六 进 制 串, 表 示 行 在 所 在 的 表 中 唯 一 的 行 地 址 该 数 据 类 型 主 要 用 于 返 回 ROWID 伪 列 寿 险 的 ROWID 包 括 块 编 号, 行 编 号, 文 件 编 号 扩 展 的 ROWID 在 磁 盘 上 需 要 10 个 字 节 的 存 储 空 间, 并 使 用 18 个 字 符 来 显 示 它 包 含 下 列 组 成 元 素 : 数 据 对 象 编 号 : 每 个 数 据 对 象 ( 如 表 或 索 引 ) 在 创 建 时 都 分 配 有 此 编 号, 并 且 此 编 号 在 数 据 库 中 是 唯 一 的 相 关 文 件 编 号 : 此 编 号 对 于 表 空 间 中 的 每 个 ( 数 据 ) 文 件 是 唯 一 的 块 编 号 : 表 示 包 含 此 行 的 块 在 文 件 中 的 位 置 行 编 号 : 标 识 块 头 中 行 目 录 位 置 的 位 置 在 内 部, 数 据 对 象 编 号 需 要 32 位 相 关 文 件 编 号 需 要 10 位 块 编 号 需 要 22 位 行 编 号 需 要 16 位, 加 起 来 总 共 是 80 位 或 10 个 字 节 扩 展 的 ROWID 使 用 以 64 为 基 数 的 编 码 方 案 来 显 示, 该 方 案 将 六 个 位 置 用 于 数 据 对 象 编 号 三 个 位 置 用 于 相 关 文 件 编 号 六 个 位 置 用 于 块 编 号 三 个 位 置 用 于 行 编 号 以 64 为 基 数 的 编 码 方 案 使 用 字 符 A-Z a-z 0-9 和 / 共 有 64 个 字 符, 如 下 例 所 示 : SQL> SELECT department_id, rowid FROM hr.departments; DEPARTMENT_ID ROWID ------------- ------------------ 10 AAABQMAAFAAAAA6AAA 20 AAABQMAAFAAAAA6AAB 30 AAABQMAAFAAAAA6AAC 40 AAABQMAAFAAAAA6AAD 50 AAABQMAAFAAAAA6AAE 60 AAABQMAAFAAAAA6AAF 在 本 例 中 : AAABQM 是 数 据 对 象 编 号 AAF 是 相 关 文 件 编 号 AAAAA6 是 块 编 号 AAA 是 ID=10 的 部 分 的 行 编 号 使 用 ROWID 定 位 行 :
因 为 一 个 段 只 能 驻 留 在 一 个 表 空 间 中, 所 以,Oracle 服 务 器 可 以 使 用 数 据 对 象 编 号 来 确 定 包 含 某 一 行 的 表 空 间 表 空 间 中 的 相 关 文 件 编 号 用 来 定 位 文 件, 块 编 号 用 来 定 位 包 含 该 行 的 块, 行 编 号 用 来 定 位 该 行 的 行 目 录 条 目 行 目 录 条 目 可 以 用 来 定 位 行 首 这 样,ROWID 就 可 以 用 来 定 位 一 个 数 据 库 中 的 任 意 行 4. 行 的 结 构 行 数 据 作 为 长 度 可 变 的 记 录 存 储 在 数 据 库 块 中 通 常, 一 个 行 的 各 列 按 其 定 义 时 的 顺 序 存 储, 并 且 不 存 储 尾 随 的 NULL 列 注 : 对 于 非 尾 随 的 NULL 列, 列 长 度 需 要 占 用 一 个 字 节 表 中 的 每 行 具 有 : 行 头 : 用 来 存 储 行 中 的 列 数 链 接 信 息 和 行 锁 定 状 态 行 数 据 : 对 于 每 一 列,Oracle 服 务 器 存 储 列 的 长 度 和 值 ( 如 果 该 列 不 超 过 250 个 字 节, 需 要 一 字 节 来 存 储 列 长 度 ; 如 果 该 列 超 过 250 字 节, 需 要 三 字 节 来 存 储 列 长 度 列 值 在 紧 靠 列 长 度 字 节 后 面 存 储 ) 相 邻 的 行 之 间 不 需 要 任 何 空 隙 块 中 的 每 一 行 在 行 目 录 中 都 有 一 个 位 置 目 录 位 置 指 向 行 首 5. 创 建 表 创 建 表 的 存 储 子 句 例 :STORAGE(INITIAL 200K NEXT 200K PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 5) STORAGE 子 句 指 定 表 的 存 储 特 性 给 第 一 个 区 分 配 的 存 储 空 间 为 200 KB 需 要 第 二 个 区 时, 就 会 再 创 建 一 个 200KB 的 区 ( 是 由 NEXT 值 定 义 的 ) 需 要 第 三 个 区 时, 就 会 创 建 一 个 200 KB 的 区, 这 是 因 为 已 将 PCTINCREASE 设 置 为 零 将 可 以 使 用 的 最 大 区 数 设 置 为 5, 最 小 区 数 设 置 为 1 MINEXTENTS: 这 是 要 分 配 的 最 小 区 数 MAXEXTENTS: 这 是 要 分 配 的 最 大 区 数 如 果 将 MINEXTENTS 指 定 为 一 个 大 于 1 的 值, 而 表 空 间 包 含 多 个 数 据 文 件, 则 这 些 区 将 分 布 在 不 同 的 数 据 文 件 中 PCTINCREASE: 这 是 NEXT 区 及 以 后 的 区 有 关 区 大 小 增 长 的 百 分 比 TABLESPACE 子 句 : TABLESPACE 子 句 指 定 将 要 在 其 中 创 建 表 的 表 空 间 示 例 中 的 表 将 驻 留 在 数 据 表 空 间 内 如 果 省 略 TABLESPACE, 则 Oracle 在 包 含 该 表 的 方 案 的 所 有 者 的 缺 省 表 空 间 中 创 建 对 象 创 建 表 的 原 则 将 各 个 表 存 放 在 单 独 的 表 空 间 中, 而 不 是 存 放 在 有 还 原 段 临 时 段 和 索 引 的 表 空 间 内 使 用 本 地 管 理 的 表 空 间 以 避 免 产 生 存 储 碎 片 将 表 的 标 准 区 大 小 设 置 小 一 些, 以 减 少 表 空 间 存 储 碎 片 创 建 临 时 表 CREATE GLOBAL TEMPORARY TABLE 命 令 创 建 针 对 特 定 事 务 处 理 或 针 对 特 定 会 话 的 临 时 表 对 于 针 对 特 定 事 务 处 理 的 临 时 表, 数 据 仅 在 该 事 务 处 理 期 间 存 在 ; 对 于 针 对 特 定 会 话 的 临 时 表, 数 据 仅 在 该 会 话 期 间 存 在 会 话 中 的 数 据 专 用 于 该 会 话 每 个 会 话 只 能 查 看 和 修 改 自 己 的 数 据 不 能 为 临 时 表 的 数 据 获 取 DML 锁 控 制 行 持 续 时 间 的 子 句 为 : ON COMMIT DELETE ROWS: 用 来 指 定 仅 在 该 事 务 处 理 内 可 看 到 这 些 行 ON COMMIT PRESERVE ROWS: 用 来 指 定 在 整 个 会 话 期 间 都 能 看 到 这 些 行 可 以 为 临 时 表 创 建 索 引 视 图 和 触 发 器 可 以 使 用 导 出 和 导 入 实 用 程 序 来 导 出 和 导 入 临 时 表 的 定 义 但 是, 即 使 使 用 ROWS 选 项, 也 导 不 出 任 何
数 据 所 有 会 话 都 能 看 到 临 时 表 的 定 义 例 : CREATE GLOBAL TEMPORARY TABLE hr.employees_temp ON COMMIT DELETE ROWS AS SELECT * FROM hr.employees; 6. 设 置 pctuse 和 pctfree 计 算 PCTFREE ( 平 均 行 大 小 - 初 始 行 大 小 )*100/ 平 均 行 大 小 PCTFREE 值 越 高, 可 为 数 据 库 块 内 的 更 新 提 供 的 空 间 就 越 大 如 果 表 存 在 下 面 两 种 情 况, 则 应 设 置 一 个 更 高 的 值 : 某 些 列 最 初 为 NULL, 后 来 更 新 为 某 个 值 某 些 列 由 于 更 新, 大 小 可 能 增 加 PCTFREE 的 值 越 高, 块 密 度 就 越 低, 即 每 个 块 容 纳 的 行 数 就 越 少 上 面 的 公 式 确 保 块 中 有 足 够 的 空 闲 空 间 供 行 增 长 使 用 计 算 PCTUSED 100 - PCTFREE - max(10, (maximum-row-size/blocksize)*100); 设 置 PCTUSED 以 确 保 只 有 在 具 备 足 够 空 间 来 容 纳 一 个 平 均 大 小 的 行 时 才 将 块 返 回 到 空 闲 列 表 中 如 果 空 闲 列 表 中 的 某 个 块 没 有 足 够 的 空 间 来 插 入 一 行,Oracle 服 务 器 将 查 找 空 闲 列 表 中 的 下 一 个 块 直 到 找 到 具 备 足 够 空 间 的 块 或 者 到 达 列 表 的 末 尾, 这 种 线 性 扫 描 才 会 结 束 使 用 给 定 的 公 式 可 以 增 加 找 到 具 有 所 需 空 闲 空 间 的 块 的 概 率, 从 而 缩 短 扫 描 空 闲 列 表 的 时 间 注 : 可 以 使 用 ANALYZE TABLE 命 令 估 算 平 均 行 大 小 的 值 7. 行 移 植 和 行 链 接 行 移 植 如 果 将 PCTFREE 设 置 为 一 个 较 低 的 值, 则 在 一 个 块 中 可 能 没 有 足 够 的 空 间 来 容 纳 更 新 后 增 长 的 行 出 现 这 种 情 况 时,Oracle 服 务 器 就 会 把 整 个 行 移 到 一 个 新 块, 并 创 建 一 个 从 原 块 指 向 新 位 置 的 指 针 这 个 进 程 就 称 为 行 移 植 在 移 植 行 时, 与 该 行 相 关 联 的 输 入 / 输 出 (I/O) 性 能 会 降 低, 因 为 Oracle 服 务 器 必 须 扫 描 两 个 数 据 块 才 能 检 索 该 数 据 行 链 接 如 果 一 个 行 过 大 而 任 何 一 个 块 都 容 纳 不 下, 就 会 发 生 行 链 接 如 果 行 包 含 的 列 太 长, 就 可 能 发 生 这 种 情 况 在 这 种 情 况 下,Oracle 服 务 器 将 该 行 拆 分 成 更 小 的 数 据 块, 称 为 行 片 段 每 个 行 片 段 存 储 在 一 个 块 中, 并 带 有 检 索 和 组 合 整 行 所 需 要 的 指 针 如 果 可 能, 可 通 过 选 择 较 大 的 块 大 小 或 将 一 个 表 拆 分 成 包 含 更 少 列 的 多 个 表 来 最 大 限 度 地 减 少 行 链 接 8. 更 改 存 储 和 块 使 用 参 数 语 法 : ALTER TABLE [schema.]table {[ storage-clause ] [ INITRANS integer ] [ MAXTRANS integer]} 可 修 改 的 参 数 及 其 修 改 的 影 响 如 下 : NEXT: 当 Oracle 服 务 器 为 表 分 配 另 一 个 区 时, 就 会 使 用 新 的 值 此 后 的 区 大 小 将 按 PCTINCREASE 增
加 PCTINCREASE: 对 PCTINCREASE 的 更 改 将 记 录 到 数 据 字 典 中 Oracle 服 务 器 分 配 下 一 个 区 时, 将 使 用 它 来 重 新 计 算 NEXT 例 : 一 个 表 有 两 个 区, 其 中 NEXT=10K,PCTINCREASE=0 如 果 将 PCTINCREASE 更 改 为 100, 则 要 分 配 的 第 三 个 区 为 10K, 第 四 个 区 为 20K, 第 五 个 区 为 40K, 以 此 类 推 MINEXTENTS:MINEXTENTS 的 值 可 以 更 改 为 任 何 小 于 或 等 于 表 中 的 当 前 区 数 的 值 它 不 会 对 表 立 即 产 生 作 用, 但 在 截 断 表 时 将 用 到 它 MAXEXTENTS:MAXEXTENTS 的 值 可 以 设 置 为 任 何 大 于 或 等 于 表 的 当 前 区 数 的 值 也 可 以 将 该 值 设 置 为 UNLIMITED 限 制 : 表 的 INITIAL 值 不 能 修 改 指 定 的 NEXT 的 值 将 舍 入 为 块 大 小 的 一 个 倍 数, 该 值 大 于 或 等 于 指 定 的 值 9. 手 动 分 配 区 控 制 一 个 表 的 区 在 文 件 之 间 的 分 配 在 大 量 加 载 数 据 前 避 免 表 的 动 态 扩 展 语 法 : ALTER TABLE [schema.]table ALLOCATE EXTENT [ ([SIZE integer [K M]] [ DATAFILE filename ]) ] 如 果 忽 略 SIZE,Oracle 服 务 器 将 使 用 DBA_TABLES 中 的 NEXT_EXTENT 大 小 来 分 配 区 在 DATAFILE 子 句 中 指 定 的 文 件 必 须 属 于 该 表 所 属 的 表 空 间 否 则, 该 语 句 就 会 生 成 错 误 如 果 未 使 用 DATAFILE 子 句, 则 Oracle 服 务 器 将 在 包 含 该 表 的 表 空 间 中 的 一 个 文 件 中 分 配 区 注 : 手 动 分 配 区 不 会 影 响 DBA_TABLES 中 的 NEXT_EXTENT 的 值 执 行 此 命 令 时,Oracle 服 务 器 不 会 重 新 计 算 下 一 个 区 的 大 小 10. 重 新 组 织 非 分 区 表 用 于 将 表 移 到 另 一 个 表 空 间 中 或 者 重 新 组 织 区 多 用 于 update 或 delete 操 作 多 的 段, 重 新 组 织 可 以 减 少 碎 片 该 操 作 不 适 用 于 按 索 引 组 织 的 表 ALTER TABLE table MOVE TABLESPACE tbs; --tbs 为 目 的 表 空 间 移 动 表 后, 必 须 重 建 索 引, 否 则 会 报 错 11. 截 断 表 截 断 一 个 表 将 删 除 表 中 所 有 行, 从 而 释 放 已 使 用 的 空 间 对 应 的 索 引 将 被 截 断 不 能 截 断 某 个 外 键 正 在 引 用 的 表 使 用 此 命 令 时 不 会 触 发 删 除 触 发 器 12. 删 除 表 DROP TABLE [schema.] table [CASCADE CONSTRAINTS] 删 除 一 个 表 后, 该 表 所 使 用 的 区 将 得 以 释 放 如 果 这 些 区 是 相 邻 的, 则 可 以 在 以 后 某 个 时 间 自 动 或 手 动 将 它 们 合 并 如 果 该 表 是 外 键 关 系 中 的 父 表, 就 必 须 使 用 CASCADE CONSTRAINTS 选 项 13. 删 除 列 从 每 行 中 删 除 列 长 度 和 数 据, 释 放 数 据 块 中 的 空 间 删 除 列 可 能 需 要 很 长 时 间, 并 且 且 需 要 大 量 的 还 原 空 间 从 大 型 表 中 删 除 列 时, 可 以 指 定 检 查 点 来 尽 量 减 少 还 原 空 间 的 使 用
ALTER TABLE hr.employees DROP COLUMN comments CASCADE CONSTRAINTS CHECKPOINT 1000; 每 1,000 行 出 现 一 个 检 查 点 在 操 作 运 行 完 成 前, 该 表 一 直 被 标 记 为 INVALID 如 果 操 作 过 程 中 例 程 失 败, 则 该 表 在 启 动 后 仍 将 处 于 INVALID 状 态, 因 此 该 操 作 必 须 完 成 : ALTER TABLE hr.employees DROP COLUMNS CONTINUE; 如 果 表 处 于 VALID 状 态, 则 使 用 此 语 句 将 生 成 错 误 使 用 UNUSED 选 项 除 将 列 从 表 中 删 除 以 外, 还 可 以 先 将 列 标 记 为 未 使 用, 以 后 再 删 除 因 为 没 有 删 除 数 据, 所 以 此 操 作 不 回 收 磁 盘 空 间, 因 而 具 有 速 度 比 较 快 的 优 点 被 标 为 未 使 用 的 列 可 在 以 后 系 统 活 动 较 少 时 从 表 中 删 除 未 使 用 的 列 就 像 不 属 于 表 一 样 查 询 时 看 不 到 未 使 用 列 中 的 数 据 此 外, 在 执 行 DESCRIB 命 令 时, 也 不 会 显 示 这 些 列 的 名 称 和 数 据 类 型 用 户 可 以 添 加 与 未 使 用 的 列 同 名 的 新 列 如 果 想 删 除 同 一 表 中 的 两 列, 则 可 先 将 列 设 置 为 未 使 用 然 后 再 删 除 在 删 除 两 列 时, 表 中 的 所 有 行 都 会 更 新 两 次 ; 但 如 果 将 这 些 列 设 置 为 未 使 用 然 后 再 删 除, 则 所 有 的 行 仅 更 新 一 次 例 : ALTER TABLE hr.employees SET UNUSED COLUMN comments CASCADE CONSTRAINTS; 要 确 定 包 含 未 使 用 列 的 表, 可 以 查 询 视 图 DBA_UNUSED_COL_TABS 要 确 定 已 完 成 一 部 分 DROP COLUMN 操 作 的 表, 可 查 询 DBA_PARTIAL_DROP_TABS 视 图 不 能 执 行 下 列 操 作 : 从 对 象 类 型 表 中 删 除 列 从 嵌 套 表 中 删 除 列 删 除 一 个 表 中 的 所 有 列 删 除 分 区 键 列 从 SYS 拥 有 的 表 中 删 除 列 从 按 索 引 组 织 的 表 中 删 除 主 键 列 如 果 有 未 使 用 但 未 删 除 的 LONG 或 LONG RAW 列, 将 无 法 向 表 中 添 加 LONG 或 LONG RAW 列 ( 即 使 表 的 说 明 显 示 没 有 LONG 或 LONG RAW 列 也 是 如 此 ) 14. 获 取 表 信 息 DBA_TABLES DBA_OBJECTS