Oracle 数 据 库 应 用 技 术 河 南 中 医 学 院 信 息 技 术 学 院 王 哲
第 四 章 管 理 表 空 间 主 讲 内 容 : 表 空 间 及 管 理 第 2 页
主 要 内 容 一. 表 空 间 基 础 知 识 二. 管 理 表 空 间 三. 其 他 表 空 间 第 3 页
一. 表 空 间 基 础 知 识 在 创 建 数 据 库 时,Oracle 会 自 动 地 创 建 多 个 表 空 间, 如 system users 等 表 空 间 ; 例 1: SELECT tablespace_name FROM dba_tablespaces; SELECT file_name, tablespace_name FROM dba_data_files WHERE tablespace_name = SYSTEM ; 第 4 页
表 空 间 用 于 存 储 数 据 库 用 户 的 所 有 模 式 对 象, 用 户 可 以 使 用 这 些 表 空 间 进 行 数 据 操 作 ; Oracle 数 据 库 中 最 大 的 逻 辑 存 储 结 构, 与 操 作 系 统 中 的 数 据 文 件 相 对 应 ORACLE 数 据 库 中 的 一 个 表 空 间 由 一 个 或 多 个 数 据 文 件 组 成, 但 一 个 数 据 文 件 只 能 属 于 一 个 表 空 间 ; 在 Oracle 系 统 里, 表 空 间 和 数 据 文 件 是 一 对 不 能 分 开 的 概 念, 也 就 是 创 建 表 空 间 时 必 须 创 建 数 据 文 件, 增 加 数 据 文 件 时 必 须 指 定 表 空 间 第 5 页
表 空 间 system users temp example sysaux undotbs1 说 明 存 储 数 据 字 典, 包 括 表 视 图 和 存 储 过 程 的 定 义 等 存 储 数 据 库 用 户 创 建 的 数 据 库 对 象 存 储 sql 语 句 处 理 的 表 和 索 引 的 信 息 如 果 安 装 时 选 择 实 例 方 案, 则 此 表 空 间 是 各 样 例 帐 户 的 对 象 System 表 空 间 的 辅 助 空 间, 一 些 选 件 的 对 象 都 存 放 在 此 表 空 间 内 以 减 少 system 表 空 间 的 负 荷 存 储 撤 销 信 息 用 的 表 空 间 第 6 页
system 表 空 间 Oracle 系 统 的 每 个 版 本 都 一 直 要 使 用 system 表 空 间 存 放 内 部 数 据 和 数 据 字 典,system 表 空 间 主 要 存 放 sys 用 户 各 个 对 象 和 其 他 用 户 的 少 量 对 象 ; 可 以 从 dba_segments 数 据 字 典 中 查 询 到 某 个 表 空 间 所 存 储 的 对 象 类 型 第 7 页
例 2, 查 询 system 表 空 间 内 存 放 的 对 象 及 对 象 拥 有 者 ; SQL> select owner, tablespace_name from dba_segments where tablespace_name= SYSTEM order by owner, segment_type 第 8 页
但 是, 在 实 际 应 用 中, 如 果 用 户 都 使 用 系 统 自 动 创 建 的 这 几 个 表 空 间, 将 会 严 重 影 响 I/O 性 能 ; 因 此, 需 要 根 据 实 际 情 况 创 建 不 同 的 表 空 间, 这 样 既 可 以 减 轻 系 统 表 空 间 的 负 担, 又 可 以 使 得 数 据 库 中 的 数 据 分 布 更 清 晰 第 9 页
二 管 理 表 空 间 1. 创 建 表 空 间 2. 维 护 表 空 间 3. 删 除 表 空 间 第 10 页
1 创 建 表 空 间 建 立 表 空 间 是 DBA 经 常 要 做 的 工 作 之 一, 在 创 建 表 空 间 时, 应 该 基 于 以 下 几 点 进 行 考 量 : 创 建 临 时 表 空 间 还 是 撤 销 表 空 间 ( 默 认 为 永 久 性 ) 数 据 文 件 是 否 自 动 扩 展 ( 默 认 为 off) 表 空 间 的 状 态 在 线 还 是 不 在 线 ( 默 认 online) 数 据 库 对 象 的 任 何 操 作 是 否 产 生 日 志 ( 默 认 logging) 首 先 要 拥 有 create tablespace 权 限 的 用 户, 比 如 sys; 第 11 页
语 法 格 式 Create [temporary undo] TableSpace tablespace_name Datafile /path/filename size integer [k/m] reuse [,..] [ ONLINE OFFLINE ] [ LOGGING NOLOGGING ] [ FORCE LOGGING ] [ DEFAULT STORAGE storage ] [ COMPRESS NOCOMPRESS ] 第 12 页
例 3, 创 建 一 个 永 久 性 表 空 间 tbs_1, 初 始 大 小 为 10MB, 自 动 增 长, 每 次 增 长 5MB, 最 大 为 100MB; SQL> Create Tablespace tbs_1 datafile file_1.dbf size 10M Autoextend on next 5M Maxsize 100M; 第 13 页
2 维 护 表 空 间 维 护 表 空 间 是 一 项 必 须 做 的 工 作, 一 般 包 括 对 应 用 系 统 表 空 间 system 表 空 间 及 sysaux 表 空 间 的 维 护 改 变 表 空 间 的 状 态 ; 改 变 表 空 间 名 称 ; 管 理 表 空 间 文 件 ; 设 置 默 认 表 空 间 ; 删 除 表 空 间 ; 第 14 页
(1) 改 变 表 空 间 状 态 设 置 表 空 间 为 只 读 方 式, 从 而 保 证 表 空 间 数 据 的 完 整, 一 般 在 进 行 数 据 库 的 备 份 与 恢 复 操 作 历 史 数 据 的 完 整 性 保 护 等 情 况 下, 可 将 相 应 的 表 空 间 设 置 为 只 读 表 空 间 ; 例 4, 将 tbs_1 表 空 间 设 置 为 只 读 方 式 alter tablespace tbs_1 read only; 第 15 页
例 5, 将 tbs_2 表 空 间 设 置 为 可 读 写 方 式 ; alter tablespace tbs_2 read write; 备 注 : 将 某 个 表 空 间 设 置 为 只 读, 该 表 空 间 除 了 表 的 数 据 不 能 进 行 insert update 和 delete 操 作 外, 某 些 对 象 还 是 可 以 删 除 的, 如 索 引 和 目 录 仍 可 以 被 删 除 第 16 页
表 空 间 状 态 属 性 ALTER TABLESPACE tablespace_name READ ONLY; ALTER TABLESPACE tablespace_name READ WRITE; ALTER TABLESPACE tablespace_name ONLINE; ALTER TABLESPACE tablespace_name OFFLINE parameter; 第 17 页
(2) 修 改 表 空 间 名 称 Oracle 11g 的 新 功 能 之 一 是 可 以 对 表 空 间 名 称 进 行 重 新 命 名, 需 要 提 醒 的 是,DBA 只 能 对 一 般 的 表 空 间 进 行 更 名, 不 能 对 system 和 sysaux 表 空 间 进 行 更 名, 也 不 能 对 处 于 offline 状 态 的 表 空 间 进 行 更 名 ; 语 法 格 式 SQL> Alter Tablespace old_name Rename to new_name; 第 18 页
查 询 表 空 间 和 对 应 的 数 据 文 件 ; SQL> select tablespace_name,file_name from dba_data_files; 例 6, 对 tab1 表 空 间 进 行 更 名 ; SQL> Alter Tablespace tab1 Rename to tab2; 第 19 页
(3) 管 理 表 空 间 中 的 数 据 文 件 1 2 3 修 改 数 据 文 件 的 大 小 增 加 新 的 数 据 文 件 到 表 空 间 删 除 无 数 据 的 数 据 文 件 第 20 页
1 修 改 数 据 文 件 的 大 小 语 法 格 式 ( 简 化 ): Alter Database Datafile file_name Resize newsize K M ; 查 看 表 空 间 的 数 据 文 件 信 息 : SELECT tablespace_name, file_name, bytes FROM dba_data_files WHERE tablespace_name = name'; 第 21 页
例 7, 修 改 tbs_1 表 空 间 对 应 的 数 据 文 件 的 大 小 ; ALTER DATABASE DATAFILE 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\tbs_1.DBF RESIZE 40M; 第 22 页
2 增 加 新 的 数 据 文 件 到 表 空 间 当 某 个 表 空 间 被 设 置 为 非 自 动 扩 展 而 且 目 前 该 表 空 间 的 自 由 空 间 不 能 满 足 新 的 扩 展 时,DBA 要 对 表 空 间 追 加 新 的 数 据 文 件, 以 满 足 对 象 扩 展 的 需 要 ; 语 法 格 式 ( 简 化 ) : Alter Tablespace tablespace_name Add datafile /path/file_name.dbf size K M; 第 23 页
例 8, 为 tbs_1 表 空 间 增 加 两 个 新 的 数 据 文 件 ; SQL> ALTER TABLESPACE tbs_1 2 ADD DATAFILE 3 'E:\app\Administrator\oradata\orcl\tbs_1_02.dbf' 4 SIZE 10M 5 AUTOEXTEND ON NEXT 5M MAXSIZE 40M, 6 'E:\app\Administrator\oradata\orcl\tbs_1_03.dbf' 7 SIZE 10M 8 AUTOEXTEND ON NEXT 5M MAXSIZE 40M; 上 述 语 句 为 在 表 空 间 tbs_1 目 录 下 增 加 了 两 个 数 据 文 件, 名 称 分 别 为 tbs_1_02.dbf 和 tbs_1_03.dbf 第 24 页
3 删 除 无 数 据 的 数 据 文 件 从 Oracle 11g R2 开 始, 允 许 从 表 空 间 中 删 除 无 数 据 的 数 据 文 件 语 法 格 式 : ALTER TABLESPACE tablespace_name DROP DATAFILE file_name; 第 25 页
例 9, 删 除 tbs_1 表 空 间 的 数 据 文 件 tbs_1_03.dbf; SQL> ALTER TABLESPACE tbs_1 DROP DATAFILE 'E:\app\Administrator\oradata\orcl\tbs_1_03.dbf'; 第 26 页
4 设 置 默 认 表 空 间 建 立 用 户 时, 如 果 不 指 定 表 空 间, 则 默 认 的 临 时 表 空 间 是 Temp, 默 认 的 永 久 表 空 间 是 System; 为 避 免 应 用 系 统 与 Oracle 系 统 竞 争 system 表 空 间,Oracle 11g 系 统 允 许 dba 将 非 temp 临 时 表 空 间 设 置 为 临 时 表 空 间, 并 将 非 system 表 空 间 设 置 为 默 认 永 久 表 空 间 第 27 页
例 10, 将 临 时 表 空 间 temp2 设 置 为 默 认 的 临 时 表 空 间 ; SQL> alter database default temprory tablespace temp2; 例 11, 将 表 空 间 users 设 置 为 默 认 表 空 间, 并 查 询 默 认 表 空 间 的 信 息 ; SQL> alter database default tablespace users; 第 28 页
5 删 除 表 空 间 一 般 具 有 DBA 或 者 具 有 drop tablespace 权 限 的 用 户 都 可 进 行 表 空 间 的 删 除 操 作 ; 当 Oracle 不 采 用 Managed Files(OEM) 管 理 文 件 时, 删 除 表 空 间 实 际 上 仅 从 数 据 字 典 和 控 制 文 件 上 将 该 表 空 间 的 有 关 信 息 去 掉, 并 没 有 真 正 删 除 该 表 空 间 所 对 应 的 物 理 文 件 ; 因 此, 要 想 通 过 删 除 表 空 间 来 释 放 磁 盘 空 间 的 话, 在 删 除 表 空 间 后, 还 要 手 工 用 操 作 系 统 命 令 删 除 与 任 何 表 空 间 无 关 的 物 理 数 据 文 件 第 29 页
语 法 格 式 : DROP TABLESPACE tablespace_name [including contents] -- 删 除 表 空 间 同 时 删 除 数 据 [cascade constraints] -- 删 除 表 空 间 同 时 删 除 完 整 性 限 制, 如 主 键 及 唯 一 索 引 等 ; 例 12, 删 除 表 空 间 及 其 所 有 内 容 ; DROP TABLESPACE tbs1 including contents cascade constraints; 第 30 页
三 其 他 表 空 间 临 时 表 空 间 撤 销 表 空 间 第 31 页
1 临 时 表 空 间 临 时 表 空 间 是 一 个 磁 盘 空 间, 主 要 用 于 存 储 用 户 在 执 行 ORDER BY 等 语 句 进 行 排 序 或 汇 总 时 产 生 的 临 时 数 据, 它 是 所 有 用 户 公 用 的 默 认 情 况 下, 所 有 用 户 都 使 用 temp 作 为 临 时 表 空 间 但 是 也 允 许 使 用 其 他 表 空 间 作 为 临 时 表 空 间, 这 需 要 在 创 建 用 户 时 进 行 指 定 第 32 页
2 撤 销 表 空 间 用 户 对 数 据 库 中 的 数 据 进 行 修 改 后,Oracle 将 会 把 修 改 前 的 数 据 存 储 到 撤 消 表 空 间 中, 如 果 用 户 需 要 对 数 据 进 行 恢 复, 就 会 使 用 到 撤 消 表 空 间 中 存 储 的 撤 消 数 据 第 33 页
小 结 表 空 间 基 础 知 识 管 理 表 空 间 其 他 表 空 间 第 34 页
再 见 第 35 页