oracle学习之逻辑结构2

来源:互联网 发布:win7系统优化技巧 编辑:程序博客网 时间:2024/05/21 17:45

逻辑结构之表空间

  表空间呢,肯定是相当重要,我不仅要会建表空间,理解里面的参数,而且还要能够管理监控表空间,使得表空间正常运转。
  1.创建表空间
  
create tablespace tbs_test20140819blocksize 16kdatafile 'e:/oracle/oradata/plmdemo/tbs_test0819.dbf' size 20mautoextend on
next 5m  maxsize 100mextent management localuniform seize 5msegment space management auto;
  这样呢,一个测试表空间建好了,那么如何监控表空间呢,下面来介绍。
  2.表空间监控
  
select a.tablespace_name "tablespace",trunc(a.total) "allocated(M)",ceil((1-b.free/a.total)*100) "Usage %",         trunc(b.free) " free space(M)" from         (select tablespace_name, sum(nvl(bytes,0))/1024/1024 total from dba_data_files group by tablespace_name) a,        (select tablespace_name, sum(nvl(bytes,0))/1024/1024 free from dba_free_space group by tablespace_name) bwhere a.tablespace_name=b.tablespace_name order by 3 desc;
  这段代码咋一看很复杂,其实就是两个表dba_data_files和dba_free_space,一个是存储表空间总大小,一个是存储free空间,具体表的参数可以desc查看。
  那么对于临时表空间,是在另外的表中查看:dba_temp_files和v$temp_space_header,具体代码如下:
SELECT D.TABLESPACE_NAME,d.file_name,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS, USED_SPACE "USED_SPACE(M)",ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USED_RATE(%)",NVL(FREE_SPACE,0) "FREE_SPACE(M)"FROM (SELECT TABLESPACE_NAME,file_name,file_id,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKSFROM DBA_TEMP_FILESGROUP BY TABLESPACE_NAME,file_name,file_id) D,(SELECT TABLESPACE_NAME,file_id,ROUND(SUM(BYTES_USED)/(1024*1024),2) USED_SPACE,ROUND(SUM(BYTES_FREE)/(1024*1024),2) FREE_SPACEFROM V$TEMP_SPACE_HEADERGROUP BY TABLESPACE_NAME,file_id) FWHERE  D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) and d.file_id=f.file_id(+);
  
  3.表空间设置
  那么针对表空间不足的情况呢,就会出现讨厌的ora-01654错误,这时候就可以修改表空间属性自动扩展表空间或者增加数据文件。
  设置成自动表空间:
  
alter database  DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\SYSTEM01.DBF' autoextend on next 50m maxsize unlimited;  ---普通表空间    
alter database  tempfile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\TEMP01.DBF' autoextend on next 50m maxsize unlimited; --临时表空间


  重新扩展,或者增加文件
      
扩展:  alter DATABASE  DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\SYSTEM01.DBF' RESIZE 9000m; --普通表空间
        alter DATABASE  tempFILE 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\TEMP01.DBF' RESIZE 200m; --临时表空间
增加文件: alter tablespace  SYSTEM  add datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\SYSTEM01.DBF' size 1g;------普通表空间     
           alter tablespace  TEMP  add tempfile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\TEMP02.DBF' size 10m;-------临时表空间

    当然对于一些特定的表空间,一些有资深dba对我们有一些建议,表空间尽量避免自动扩展,尽可能大。对于回滚表空间尽量规划大,自动管理;对于临时表空间,最好使用临时表空间组;而业务表空间要根据业务分类进行配置,即时监控表空间使用情况。
  4.删除表空间
  
drop tablespace tablespacename including contents and datafiles;
  如果是linux类系统,那么使用这句代码直接就删除数据文件,但是win下面得手动删除。
  5.切换回滚表空间
  当新建回滚表空间后,需要切换,那么可以通过指令:
  
alter system set undo_tablespace=undo scope=both/memory/spfile;
  6.切换临时表空间
  
alter user test temporary tablesapce temp1;
--改变数据库的临时表空间 alter database default temporary tablespace temp1;

  7.临时表空间组
  随着oracle的发展,临时表空间组已经投入运用,可以做到为同一用户不同session设置不同的临时表空间。
  7.1创建临时表空间组(粘贴代码太麻烦了,下面直接打吧)
  其实很简单,就是在创建临时表空间后面添加一个tablesapce goup。
  create temporary tablesapce temp01 tempfile 'xx/xx1.dbf' size 10m tablespace group temp_group1;
  create temporary tablesapce temp02 tempfile 'xx/xx2.dbf' size 10m tablespace group temp_group1;
  create temporary tablesapce temp03 tempfile 'xx/xx3.dbf' size 10m tablespace group temp_group1;
  这样,临时表空间组(可以创建多个)就建好了,可以自行通过数据字典查看(dba_tablespace_groups),那么如何把已有临时表空间添加到临时表空间组呢?
  这样就可以了,alter tablespace temp1  tablesapce group  tmp_group1;
  但是光是创建好了可不行,得让系统或者用户使用。
  alter user test temporary tablespace temp_group1;(此后可以通过v$sort_usage查看临时表空间的使用情况)
  好了,逻辑结构简单结束!
  

0 0
原创粉丝点击