没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
表空间
Oracle 数据库是由若干个表空间构成的。任何数据库对象在存储时都必
须存储在某个表空间中。表空间对应于若干个数据文件,即表空间是由一个或多个数据文件构成的。
每个数据库至少有一个表空间,表空间的大小等于所有从属于它的数据文件大小的总和。
一、常用表空间
(1)系统表空间
系统表空间(system tablespace)是每个Oracle 数据库都必须具备的。其功能是在系统表空
间中存放诸如表空间名称、表空间所含数据文件等数据库管理所需的信息。系统表空间的名称是不
可更改的。系统表空间必须在任何时候都可以用,也是数据库运行的必要条件。因此,系统表空间
是不能脱机的。
系统表空间包括数据字典、存储过程等信息。为避免系统表空间产生存储碎片以及争用系统资
源的问题,应创建一个独立的表空间用来单独存储用户数据。
SYSTEM表空间建议不存放用户数据,应当为系统设定缺省的默认表空间来避免用户创建时使用
系统表空间
sql>alter database default tablespace users;
SQL> col property_value format a30
SQL> select property_name,property_value from database_properties where
property_name like 'DEFAULT%';
测试SYSTEM表空间不能脱机、不能置为只读、不能重命名、不能删除
SQL> alter tablespace system offline;
SQL> alter tablespace system read only;
SQL> alter tablespace system rename to system2;
SQL> drop tablespace system;
SQL> drop tablespace system including contents and datafiles;
保证空间可用,一般存放单个数据文件。设置为自动扩展
如果SYSTEM 表空间数据文件很大,可以考虑使用bigfile
(2)SYSAUX 表空间
SYSAUX 表空间是随着数据库的创建而创建的,它充当SYSTEM 的辅助表空间,主要存储除数据
3
字典以外的其他对象。SYSAUX 是数据库的默认表空间,使用SYSAUX 表空间,降低了SYSTEM 表空
间的负荷。
如果SYSAUX 表空间不可用,数据库核心功能将保持有效;使用SYSAUX 表空间的特点将会失败
或功能受限.
• 不能删除
•
不能重命名
•
不能置为read only
(3)临时表空间
临时表空间(temp tablespace)主要用于存储Oracle 数据库运行期间所产生的临时数据。主要用
来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。
当数据库关闭后,临时表空间中所有数据将全部被清除。即重启数据库可以释放临时表空间,如果
不能重启实例,而一直保持问题sql 语句的执行,temp 表空间会一直增长,直到耗尽硬盘空间。
当前临时表空间文件的大小是历史上使用临时表空间最大的大小。
除临时表空间外,其他表空间都属于永久性表空间。
临时表空间的主要作用:
索引create 或rebuild
Order by 或group by
Distinct 操作
Union 或intersect 或minus
Sort-merge joins
analyze
(4)撤销表空间(undo tablespace)
撤销表空间用于保存Oracle 数据库撤销信息,即保存用户回滚段的表空间称之为回滚表空间
(或简称为撤销表空间)。UNDO 表空间用于存入数据修改后的旧值。
UNDO用途
1)事务处理回退
当某事务处理修改表中某行时,被修改的列的旧值(要还原的数据)将存储在UNDO段中,新数
据被存入到数据段中。如果将该事务处理回退,即执行ROLLBACK 命令,则Oracle 服务器通过将还
原段中的值写回到该行来恢复原始值。
例如
用户A 在执行了语句
“UPDATE emp SET sal=1000 WHERE empno=7733”
之后发现应该修改7868 号雇员的工资而不是7733 号雇员的工资,那么通过执行“ROLLBACK”语
句可以取消事务,此时系统将回滚段中的UNDO 数据800 从UNDO 段中又写回数据段中。
2)事务处理恢复
事务恢复是由ORACLE SERVER 自动完成的。如果实例在事务处理正在进行时失败,那么Oracle
服务器需要在数据库再次打开时回退所有未提交的事务。这种回退操作是事务处理恢复的一部分。
之所以有可能恢复事务处理,原因在于对还原段所做的更改同样受重做日志文件的保护。
3)读一致性
当用户检索数据库数据时,Oracle 总是使其它用户只能看到被提交过的数据(读取提交)或
者特定时间点的数据(SELECT 语句时间点),这样可以确保数据的一致性。
读一致性是由ORALCE 提供的,并且该特征是通过UNDO 记录来实现有。还原段中的旧值(要回
退的数据)用于保证数据的读一致性。Oracle 服务器保证一条语句所看到的数据来自一致的时间,
即使其它事务处理修改了该数据。
例如
当Oracle 服务器开始执行SELECT 语句时,首先确定当前系统更改号(SCN),并确保这个SCN 之
前未提交的任何修改不会被这条语句处理。如果在这次查询开始时某行有未提交的数据更改,
Oracle 服务器会从还原段检索这些更改的旧值,并显示该旧值。
在9i 之前,回滚段的管理和监控是需要dba 手工介入的,创建合适的回滚段是件非常耗费dba
精力的事情,你可能需要不断关注oracle运行状况很长一阵子时间后,通过不断的调整才能基本确
认一段时期内回滚段的大小,一旦回滚段创建的不合适,就极有可能引起性能问题甚至错误。
9i 之后呢,oracle为了清晰它的整个概念,取消了回滚段这个说法(实际上并未取消回滚段),
而完全以undo来代替,这也正好与redo相对应,一个撤销,一个重做。回滚段可以不再由dba手工
介入,完全由它自己在运行时自动分配,即自动撤销管理表空间(Automatic Undo Management),
这在一定程度上即解放了dba,也确实起到了提高性能的作用,比如采用自动管理表空间就可以最
大程序的降低ora-1555 发生的机率(注意是降低,不是避免)
自动管理的撤销表空间由二个初始化参数决定:
UNDO_MANAGEMENT:值为AUTO 表示使用了自动撤销管理表空间,MANUAL 则表示手动管理
UNDO_TABLESPACE:当UNDO_MANAGEMENT 值为AUTO 时,该参数用来指定当前的undo表空间名称。
6
undo 表空间的大小,直接影响到flashback query 的查询能力,因为多版本查询所依赖的undo
数据都存储在undo表空间中,该表空间越大,所能够存储的undo数据自然也越多,如果该表空间可
用空间非常小,别说flashback了,恐怕正常查询都有可能出错。
初始化参数UNDO_RETENTION,该参数用来指定undo记录保存的最长时间,以秒为单位,是个动
态参数,完全可以在实例运行时随时修改,通常默认是900秒,也就是15分钟。
一定要注意,undo_retention只是指定undo数据的过期时间,并不是说undo中的数据一定会在
undo表空间中保存15分钟,比如说刚一个新事务开始的时候,如果undo表空间已经被写满,则新事
务的数据会自动覆盖已提交事务的数据,而不管这些数据是否已过期,因此,当你创建一个自动管
理的undo表空间时,还要注意其空间大小,要尽可能保证undo表空间有足够的存储空间。
同时还要注意,并不是说,undo_retention中指定的时间一过,已经提交事务中的数据就立刻
无法访问,它只是失效,只要不被别的事务覆盖,它仍然会存在,并可随时被flashback特性引用。
如果你的undo表空间足够大,而数据库又不是那么繁忙,那么其实undo_retention参数的值并不会
影响到你,哪怕你设置成1,只要没有事务去覆盖undo数据,它就会持续有效。因此,这里还是那
句话,要注意undo表空间的大小,保证其有足够的存储空间。
只有在一种情况下,undo表空间能够确保undo中的数据在undo_retention 指定时间过期前一
定有效,就是为undo表空间指定retention guarantee,指定之后,oracle对于undo表空间中未过
期的undo数据不会覆盖。
SQL> Alter tablespace undotbs1 retention guarantee;
如果想禁止undo 表空间retention guarantee,
SQL> Alter tablespace undotbs1 retention noguarantee;
一个事务执行必须获得足够的undo空间来存储事务产生的undo信息,如果事务不提交,则undo
信息被保留,如果事务提交了,则undo信息不一定会保留,因为undo循环使用。
例:一定能闪回查询1天之内发生的变化,即要求undo保留1天。需启动guaranteeing undo
retention强制保留属性。
SQL> show parameter undo_retention
900秒=15分钟
SQL> alter system set undo_retention=86400;
强制保留undo类型表空间
SQL> desc dba_TABLESPACEs
SQL> select tablespace_name,retention from dba_tablespaces where contents='UNDO';
设置强制保留,undo信息在undo表空间至少存储1天,不到1天,是不能被覆盖的,所以一定可以完
成1天闪回查询
剩余51页未读,继续阅读
资源评论
CodeGolang
- 粉丝: 55
- 资源: 1088
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功