`

Oracle数据库中如何改善表空间的管理

阅读更多

在Oracle9i Database之前,如果在创建用户时没有指定默认表空间,那么它将默认为SYSTEM 表空间。如果用户在创建一个段时没有显式地指定一个表空间,那么这个段将在 SYSTEM 中创建—前提是用户在 SYSTEM 表空间中拥有配额(要么显式地授予,要么通过系统权限 UNLIMITED TABLESPACE 来授予)。Oracle9i 允许DBA为所有未用显式的临时表空间子句创建的用户指定一个默认的临时表空间,从而减少了这个问题。

在 Oracle Database 10g 中,您可以类似地为用户指定一个默认表空间。在数据库创建期间,CREATE DATABASE 命令可以包含子句 DEFAULT TABLESPACE 。在创建之后,您可以通过发出以下命令来使一个表空间变成默认表空间:

 

ALTER DATABASE DEFAULT TABLESPACE ;

未用 DEFAULT TABLESPACE 子句创建的所有用户将以作为它们的默认表空间。您可以在任何时候通过这个 ALTER 命令来改变默认表空间,从而允许您在不同的节点上将不同的表空间指定为默认表空间。

重要注意事项:拥有旧的表空间的所有用户的默认表空间都被修改为,即使有些表空间是为某些用户显式指定的。例如,假定用户 USER1 和 USER2 的表空间分别是 TS1 和 TS2 — 它们是在用户创建期间显式指定的。数据库当前的默认表空间是 TS2,但之后,数据库的默认表空间变为 TS1。即使 USER2 的默认表空间是显式指定为 TS2 的,它也将变为 TS1。小心这种边界效应!

如果在数据库创建期间没有指定默认表空间,它将默认为 SYSTEM。但您如何才能知道现有的数据库的默认表空间是哪一个?发出以下查询:

 

SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE';

DATABASE_PROPERTIES 视图显示默认表空间之外,还显示一些非常重要的信息 — 例如默认临时表空间、全局数据库名、时区等。

非必要模式的默认表空间

几种模式(如智能代理用户 DBSNMP、数据挖掘用户 ODM)与用户操作不直接相关,但对数据库完整性仍很重要。这些模式中的一些曾经用 SYSTEM 作为它们的默认表空间 — 这是在 SYSTEM 表空间内对象增殖的又一个原因。

Oracle Database 10g 引进了一个新的称为 SYSAUX 的表空间,它用来保存这些模式的对象。这个表空间是在数据库创建期间自动创建的,并在本地进行管理。唯一允许修改的是数据文件的名称。

这种方法在 SYSTEM 损坏需要完整的数据库恢复时,为恢复提供支持。SYSAUX 中的对象可以被恢复为任意正常的用户对象,同时数据库本身保持运行。

但如果您想将 SYSAUX 中的这些模式中的一些转移到一个不同的表空间中时,该怎么办?例如,考虑 LogMiner 使用的对象,这些对象的大小经常增长,直到最终填满表空间。出于可管理性的原因,您可能考虑将它们转移到它们自己的表空间中。但实现这一目的的最好的方法是什么?

作为一个数据库管理员,了解转移这些特殊对象的正确过程对您而言是很重要的。幸运的是,Oracle Database 10g 提供了一个新的视图使要凭猜测来做的工作形象化。这个视图,V$SYSAUX_OCCUPANTS,列出了表空间 SYSAUX 中的模式的名称、它们的说明、当前使用的空间,以及如何转移它们。

注意 LogMiner 如何被清楚地显示为占用 7,488 KB 的空间。它归模式 SYSTEM 所有,而要转移对象,您需要执行打包的过程 SYS.DBMS_LOGMNR_D.SET_TABLESPACE。不过,对于 STATSPACK 对象,这个视图推荐使用导入/导出方法;而对于流,没有转移过程 — 因而您不能容易地将它们从 SYSAUX 表空间中转移出来。列 MOVE_PROCEDURE 默认显示 SYSAUX 中存在的几乎所有工具的正确的转移过程。也可以逆向使用转移过程来使对象回到 SYSAUX 表空间中。

重命名一个表空间

在数据仓库环境中(典型地,对于数据中心体系结构),在数据库之间传输表空间是很常见的。但源数据库和目标数据库必须不存在拥有相同名称的表空间。如果存在两个拥有相同名称的表空间,则目标表空间中的段必须转移到一个不同的表空间中,然后重新创建这个表空间— 这个任务说起来容易做起来难。

Oracle Database 10g 提供了一个方便的解决方案:您可以用以下命令来简单地重命名一个现有的表空间(SYSTEM 和 SYSAUX 除外) — 无论是永久表空间还是临时表空间:

 

ALTER TABLESPACE RENAME TO ;


这个功能还将应用在存档过程中。假定您有一个按范围分区的表,用于记录销售历史数据,每个月的这个分区位于按这个月份命名的一个表空间中 — 例如,1 月份的分区命名为 JAN,并位于一个名称为 JAN 的表空间中。这样您就拥有了一个将信息保留 12 个月的策略。在 2004 年 1 月,您将能够存档 2003 年 1 月的数据。大致的操作流程类似于以下操作:

◆利用 ALTER TABLE EXCHANGE PARTITION 从分区 JAN 中创建一个独立的表 JAN03。
◆将表空间重命名为 JAN03。
◆为表空间 JAN03 创建一个可传输表空间集。
◆将表空间 JAN03 重新命名为 JAN。
◆将空的分区交换回表中。

第 1、2、4 和 5 步很简单,并且不会过度地消耗资源(如重做和撤消空间)。第 3 步只是拷贝文件并只为 JAN03 输出数据字典信息,这也是个非常轻松的过程。如果您需要恢复之前存档的分区,这个过程也非常简单,您只需要将相同的过程反过来就行了。

Oracle Database 10g 在处理这些重命名的方式上相当智能化。如果您重命名作为 UNDO 或默认临时表空间的表空间,这可能产生混淆。但数据库将自动调整必要的记录来反映这种变化。例如,将默认表空间的名称从 USERS 修改为 USER_DATA 将自动修改视图 DATABASE_PROPERTIES。在修改之前,查询:

 

select property_value from database_properties where property_name = 'DEFAULT_PERMANENT_TABLESPACE';

返回 USERS。在运行下面的语句之后:

 

alter tablespace users rename to user_data;

上述查询返回 USER_DATA,因为所有对 USERS 的引用都被修改为到 USER_DATA。修改默认临时表空间的情况一样。甚至修改 UNDO 表空间的名称也将触发 SPFILE 中的变化,如下所示:

 

SQL> select value from v$spparameter where name = 'undo_tablespace'; VALUE -------- UNDOTBS1 SQL> alter tablespace undotbs1 rename to undotbs; Tablespace altered. SQL> select value from v$spparameter where name = 'undo_tablespace'; VALUE -------- UNDOTBS

结论

在最近的几个 Oracle 版本演变的过程中,对象处理得到了稳定的增强。Oracle8i 引进了表从一个表空间到另一个表空间的转移,Oracle 9i Database R2 引进了列重命名,现在 — 在最新的版本中 — 表空间自身的重命名成为可能。这些增强显著地减轻了数据库管理员的任务 — 特别是在数据仓库或数据中心环境中。

分享到:
评论

相关推荐

    oracle数据库_实例_用户_表空间之间的关系

    Oracle 数据库实例用户表空间之间的关系是 Oracle 数据库管理系统的核心概念。了解它们之间的关系对于数据库的设计、管理和优化至关重要。 数据库 Oracle 数据库是一个物理存储单元,包括数据文件(ORA 或者 DBF)...

    oracle数据库、表空间及数据文件之间的关系

    在Oracle数据库管理系统的架构中,数据库、表空间与数据文件之间存在着紧密的联系。理解这些组件之间的相互作用对于有效地管理和维护Oracle数据库至关重要。 #### 一、Oracle数据库简介 Oracle数据库是甲骨文公司...

    Oracle 数据库中改善的表空间管理

    Oracle 数据库中的表空间管理是数据库架构中的关键组成部分,它涉及到数据存储和组织。在早期版本的 Oracle(如 Oracle9i 之前),如果在创建用户时没有指明默认表空间,用户的所有对象会默认存储在 SYSTEM 表空间中...

    Oracle数据库空间的使用和管理

    Oracle数据库空间的管理和使用是数据库管理员的关键任务,它直接影响到数据库的性能和应用程序的响应速度。Oracle数据库将存储空间逻辑上划分为多个表空间,每个表空间由一个或多个物理数据文件组成。数据存储的基本...

    Oracle数据库中有关表空间设计管理方法.pdf

    Oracle数据库表空间设计管理方法是一篇专门介绍Oracle数据库中如何进行表空间设计与管理的文章,涵盖了数据库结构、设计原则以及表空间问题解决方法等重要知识点。为了更好地理解和运用这些知识点,我们将从以下几个...

    Oracle数据库_实例_用户_表空间之间的关系.doc

    表空间是Oracle数据库中用于组织和管理数据存储的逻辑单元。每个表空间都与一个或多个数据文件关联,数据文件是数据库中实际存储数据的物理文件。一个表空间可以包含多个数据文件,而每个数据文件只能属于一个表空间...

    oracle数据库-改变表空间数据文件的位置

    表空间是Oracle数据库中用于存储数据的逻辑存储单元,而数据文件则是表空间的物理存储单元。每个表空间都可以包含多个数据文件,以便存储大量数据。 在某些情况下,我们可能需要改变表空间数据文件的位置,例如当...

    查看ORACLE 数据库及表信息.docx

    ORACLE数据库中的表空间信息是数据库管理员需要了解的重要信息。通过查看表空间信息,可以了解表空间的大小、使用情况等信息。 1. 查看ORACLE数据库中的表空间信息 使用以下SQL语句可以查看ORACLE数据库中的表空间...

    Oracle数据库用户、表、表空间之间关系.doc

    总结起来,Oracle数据库的物理结构与逻辑结构相互配合,通过数据文件、表空间、段、区和数据块等层次实现数据的存储和管理。用户则根据需要在这些逻辑单位中创建和操作模式对象,实现对数据库数据的高效管理和使用。...

    Oracle数据库对象管理及备份与恢复.pdf

    分区是Oracle数据库提供的一种将表或索引拆分成更小部分的机制,有助于改善性能和可管理性。分区类型包括散列分区、列表分区、范围分区、组合分区等。管理分区表包括增加分区、交换分区、修改分区表名称和重组分区等...

    Oracle数据库创建表空间和用户.doc

    在Oracle数据库管理中,创建表空间和用户是基础但至关重要的操作,这直接影响到数据库的性能、安全性和数据管理效率。以下将详细解析如何在Oracle数据库中创建表空间和用户,以及这一过程中涉及的关键概念和步骤。 ...

    实验2Oracle数据库物理存储结构管理.docx

    四、表空间管理 表空间是Oracle数据库中的逻辑存储单元,用于存储数据文件和日志文件。表空间可以被添加、删除和调整大小。例如,我们可以将USERS表空间添加到BOOKSALES数据库中。 五、数据文件命名和重命名 数据...

    Oracle数据库的空间使用和管理方法

    总之,理解Oracle数据库的空间管理概念和最佳实践,能够帮助我们更好地规划和管理数据库空间,避免不必要的碎片,提高应用程序的执行效率。通过合理配置表空间、选择合适的区片大小、利用分区技术,可以显著优化...

    oracle数据库存储管理

    Oracle 数据库存储管理是数据库管理员的核心任务之一,涉及到数据文件管理、控制文件操作、重做日志文件和表空间操作等方面。 一、数据文件管理 数据文件是 Oracle 数据库的物理存储单元,用于存储数据库中的数据...

    Oracle 数据库管理教程

    备份和恢复是数据库管理中最为关键的环节之一。第8章详述了逻辑备份、脱机备份、联机备份以及数据库恢复的方法。Oracle提供了Export和Import工具进行逻辑备份和恢复。对于联机备份,需要理解归档模式和非归档模式的...

    Oracle数据库.pdf

    Oracle数据库管理是数据库管理员(DBA)日常工作中不可或缺的一部分,涉及到用户管理、系统参数配置、表空间操作等多个方面。在Oracle环境中,以下是一些关键的知识点: 1. **用户管理**: - `ALTER USER`语句用于...

    Oracle数据库体系结构( 中文详细版)

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,其强大的功能和稳定性使其在企业级应用中占据了重要地位。本文将详细解析Oracle数据库的体系结构,帮助读者深入理解其内部工作原理。 Oracle数据库的...

    Oracle数据库管理员

    Oracle数据库管理员是一个关键角色,负责管理和维护...以上内容涵盖了Oracle数据库管理中的核心概念,包括管理模式、用户权限、数据库标识、文件管理和连接方式等,这些都是数据库管理员日常工作中必须掌握的基础知识。

Global site tag (gtag.js) - Google Analytics