我的团队维护一个大约为 10 的 Oracle 数据库。200GB 大小。所有数据(表、索引等)都位于单个“USERS”表空间中。这是一个坏主意吗?拥有多个表空间有什么好处,在什么情况下我想向我的数据库添加更多表空间?
谢谢!
我的团队维护一个大约为 10 的 Oracle 数据库。200GB 大小。所有数据(表、索引等)都位于单个“USERS”表空间中。这是一个坏主意吗?拥有多个表空间有什么好处,在什么情况下我想向我的数据库添加更多表空间?
谢谢!
我的偏见(这主要是个人喜好问题)是,如果创建额外的表空间没有令人信服的好处,那么使用单个表空间会更轻松。
除非您的应用程序属于这些特殊情况之一,否则拥有单独表空间的唯一好处是吸引 DBA 的组织意识。就个人而言,我非常高兴能够避免每次创建对象时都指定表空间名称,或者在不可避免地错误地在默认表空间中创建对象时花费循环从“错误”表空间中移动对象。就个人而言,当使用具有自动扩展区管理的本地管理表空间对具有不同统一扩展区大小的手动优化表空间集使用时,如果“浪费”了几十 MB 的空间,我并不太担心。另一方面,优秀的 DBA 往往非常关心事情的组织方式“就这样”,所以我
请参阅http://download.oracle.com/docs/cd/B10501_01/server.920/a96521/tspaces.htm
请参阅http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/physical.htm
您可以使用多个表空间来执行以下任务:
控制数据库数据的磁盘空间分配
为数据库用户分配特定的空间配额
通过使单个表空间联机或脱机来控制数据的可用性
执行部分数据库备份或恢复操作
跨设备分配数据存储以提高性能
使用不同表空间的一个原因是希望使用表空间传输在数据库之间移动数据。如果您想要移动一组有限的数据而不必导出和导入它,那么表空间传输是一个不错的选择,特别是如果出于测试原因,数据与源系统具有完全相同的物理结构很重要(例如,用于性能分析工作)。
我强烈不同意 Justin Caves 的评估。生产 DBA 可能会有非常不同的意见。
可传输表空间功能用于在数据库之间移动数据子集,而无需移动整个数据库。
只读表空间,因此您不必每周备份整个数据库,这可能需要很多小时,而且您无法忍受这段时间内的性能损失,即使您限制了速率。
由于庞大的规模,仅在固定日期备份某些表空间,尽管许多地方没有这么大的数据库。与上述相同的原因。
根据您的应用程序,假设有一些模块可以在应用程序端彼此独立运行。如果它们每个都有自己的一组表空间,您可以将一个应用程序表空间脱机以进行重组,而不会影响其他模块......它们可以正常运行。
至于数据和索引的分离:传统的原因是将两者放在不同的磁盘上,这样它们就不会在性能方面相互竞争。当今的存储能力问题不大,比如 SAN,它们实际上都是同一个存储区域,但仍然存在如果您将所有对象都放在同一个表空间中,您无法在本地将索引与表分开,那么即使使用本地管理的表空间,您也会在文件头级别发生争用!即使您在一个表空间中创建 20 个数据文件,您也无法决定表和索引的位置,然后有一天您会注意到由于针对索引所在的表的大量活动,您在文件头级别遇到了重大争用碰巧在同一个数据文件中!事实上废弃了。如果您只有一个 ts,那么您无疑会遇到文件头争用。
进行这种逻辑分离还有更多原因,不,这在很大程度上与性能无关,更多的是与生产环境中的管理有关。
S. Lott 已经给出了一个很好的列表,列出了人们可能希望将其拆分到多个表空间的一般原因。
更具体的你的情况...
我会问自己现在是否有具体的理由来改变事情。进行这样的结构性改变绝非易事。是否存在性能问题?您是否正在违反存储空间限制?您需要分配空间配额吗?您当前的备份和恢复计划是否满足您的需求?
如果您可以回到过去并从头开始重做某些事情,您肯定会计划明智地将数据库划分为不同的表空间。但现在值得吗?