Oracle数据库表空间增长机制及相关信息

准备写入数据-》寻找可用空间-》找到可用的分区-》找到可用的块-》写满或未发现有可用的块-》需要新的分区并申请-》表空间的数据文件的可用空间已不足以分配一个分区-》申请扩展数据文件空间-》若数据文件已达到最大值或磁盘上无可用空间,则报错。

一、 查看Oracle数据库表空间使用情况

select upper(f.tablespace_name) "表空间名",
       d.tot_grootte_mb "表空间大小(m)",
       d.tot_grootte_mb – f.total_bytes "已使用空间(m)",
       to_char(round((d.tot_grootte_mb – f.total_bytes) / d.tot_grootte_mb * 100,
                     2),
               '990.99') || '%' "使用比",
       f.total_bytes "空闲空间(m)",
       f.max_bytes "最大块(m)"
  from (select tablespace_name,
               round(sum(bytes) / (1024 * 1024), 2) total_bytes,
               round(max(bytes) / (1024 * 1024), 2) max_bytes
          from sys.dba_free_space
         group by tablespace_name) f,
       (select dd.tablespace_name,
               round(sum(dd.bytes) / (1024 * 1024), 2) tot_grootte_mb
          from sys.dba_data_files dd
         group by dd.tablespace_name) d
 where d.tablespace_name = f.tablespace_name
 order by 1;

二、扩大表空间的四种方法

–给表空间增加数据文件

ALTER  TABLESPACE  app_data  ADD  DATAFILE  'D:\dbfile\app_01.dbf'  SIZE  1G;

–新增数据文件,并且允许数据文件自动增长

ALTER  TABLESPACE  app_data  ADD  DATAFILE  'D:\dbfile\app_02.dbf'  SIZE  500M

AUTOEXTEND  ON  NEXT  50M  MAXSIZE  5G;

–允许已存在的数据文件自动增长

ALTER  DATABASE  DATAFILE  'D:\dbfile\app_01.dbf'

AUTOEXTEND  ON  NEXT  50M  MAXSIZE  UNLIMITED;

–手工改变已存在数据文件的大小

ALTER  DATABASE  DATAFILE  'D:\dbfile\app_01.dbf' RESIZE 500M;

三、系统表空间过大的情况

1)system表空间过大(使用率95%以上)

    a)检查aud$表大小

–查看数据库表大小SQL

select bytes,owner,segment_name

from dba_segments

where segment_type='TABLE' order by bytes desc;

–查看aud$表大小SQL

select bytes,owner,segment_name

from dba_segments

where segment_type='TABLE' and segment_name = 'AUD$';

    b) 如果aud$过大,清理.导出aud$表后,用truncate清理.

    c) 如果出现aud$表为空,system表空间使用率照样达到99%,建议增加数据文件,如下:

alter tablespace system add datafile 'D:\dbfile\SYSTEM_02.DBF' size 50M autoextend on;

select * from dba_data_files;

2)sysaux表空间(使用率95%以上)

a) 修改统计信息保存时间

select dbms_stats.get_stats_history_retention from dual;  –检查统计信息保存时间(默认应该是31天);

exec dbms_stats.alter_stats_history_retention(7);  –如果31天将其改为7天;

select dbms_stats.get_stats_history_retention from dual;  –验证是否修改成功;

b) 删除AWR报告快照

    批注:Oracle 10g中快照会保留7天,11g的快照保留8天,超出会自动删除。AWR快照可以从其他数据库导入,而这部分数据会保存时间极长。有时候也会遇到自动快照不能自动收集,而手工创建的快照又可以成功,对于这种情况就需要把以前的快照清理掉。

    删除AWR有两种方式进行删除:dbms_workload_repository,dbms_swrf_internal。dbms_workload_repository可以删除本地和其他数据库的快照,可以选择不同的快照来进行删除;dbms_swrf_internal只能对其他数据库的快照来进行操作,会把所有的快照直接干掉。

使用dbms_workload_repository包删除:

 select dbid, retention from dba_hist_wr_control;
 select min(snap_id), max(snap_id)from dba_hist_snapshot where dbid = '得到的dbid值';
 exec dbms_workload_repository.drop_snapshot_range('得到的min(snap_id)值','得到的max(snap_id)值','得到的dbid值');
 select * from dba_hist_snapshot where dbid = '得到的dbid值';

使用dbms_swrf_internal包删除:

 select dbid, retention from dba_hist_wr_control;
 select min(snap_id), max(snap_id)from dba_hist_snapshot where dbid = '得到的dbid值';
 exec dbms_swrf_internal.unregister_database('得到的dbid值');
 select * from dba_hist_snapshot where dbid = '得到的dbid值';

——————————sysaux表空间解读————————————–


SYSAUX表空间在Oracle Database 10g中引入,作为SYSTEM表空间的辅助表空间。

以前一些使用独立表空间或系统表空间的数据库组件现在在SYSAUX表空间中创建。

SYSAUX 表空间存放一些其他的 metadata 组件,如 OEM,Streams 等会默认存放在 SYSAUX 表空间里。

通过分离这些组件和功能,SYSTEM表空间的负荷得以减轻.反复创建一些相关对象及组件引起SYSTEM表空间的碎片问题得以避免。

因此SYSAUX 表空间也是在在 DB 创建或者升级时自动创建的。 如果在手工使用SQL 创建 DB 时没有指定 SYSAUX tablespace,那么创建语句会报错。 无法执行。

在正常操作下, 不能 drop 和 rename SYSAUX 表空间。

如果SYSAUX表空间不可用,数据库核心功能将保持有效;使用SYSAUX表空间的特点将会失败或功能受限.。

我们不能使用 alter tablespace 来修改这 4 个属性,同样也不能 drop 和 rename SYSAUX 表空间。

查看SYSAUX表空间信息:

select OCCUPANT_NAME, SCHEMA_NAME,MOVE_PROCEDURE ,SPACE_USAGE_KBYTES from V$SYSAUX_OCCUPANTS;

这些组件占据这 SYSAUX 表空间,所以这些组件的大小也就决定 SYSAUX表空间的大小。

•schema_name 对应的是用户名。

•在v$sysaux_occupants 视图里中的move_procudure字段,是用于迁移组件信息的。就是对于已经安装好的组件,如果想把这些组件放到其他的空间,可以使用这个存储过程。如果没有对应的过程,说明不可移动。

比如我们的AWR。 AWR 是SYSAUX 中占用空间最多的组件。 对于一个有10个并发session 的系统,就需要200M 的空间。当然,也可以修改AWR的保存策略来控制AWR所占用空间的大小。


发表回复

您的电子邮箱地址不会被公开。