[分享]逻辑结构之表空间_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
3
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2133 | 回复: 2   主题: [分享]逻辑结构之表空间        下一篇 
arlen1990
注册用户
等级:上士
经验:276
发帖:7
精华:0
注册:2015-1-27
状态:离线
发送短消息息给arlen1990 加好友    发送短消息息给arlen1990 发消息
发表于: IP:您无权察看 2015-1-29 14:45:27 | [全部帖] [楼主帖] 楼主

逻辑结构之表空间

  表空间呢,肯定是相当重要,我不仅要会建表空间,理解里面的参数,而且还要能够管理监控表空间,使得表空间正常运转。

  1.创建表空间

[sql] view plaincopy
create tablespace tbs_test20140819
blocksize 16k
datafile 'e:/oracle/oradata/plmdemo/tbs_test0819.dbf' size 20m
autoextend on
[sql] view plaincopy
next 5m  maxsize 100m
extent management local
uniform seize 5m
segment space management auto;


  这样呢,一个测试表空间建好了,那么如何监控表空间呢,下面来介绍。

  2.表空间监控

[sql] view plaincopy
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) b
where 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,具体代码如下:

[sql] view plaincopy
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) BLOCKS
FROM DBA_TEMP_FILES
GROUP 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_SPACE
FROM V$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME,file_id) F
WHERE  D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) and d.file_id=f.file_id(+);


  3.表空间设置

  那么针对表空间不足的情况呢,就会出现讨厌的ora-01654错误,这时候就可以修改表空间属性自动扩展表空间或者增加数据文件。

  设置成自动表空间:

[sql] view plaincopy
alter database  DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\SYSTEM01.DBF' autoextend on next 50m maxsize unlimited;  ---普通表空间      
[sql] view plaincopy
alter database  tempfile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\TEMP01.DBF' autoextend on next 50m maxsize unlimited; --临时表空间  


  重新扩展,或者增加文件

[sql] view plaincopy


扩展:  alter DATABASE  DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\SYSTEM01.DBF' RESIZE 9000m; --普通表空间  

[sql] view plaincopy
alter DATABASE  tempFILE 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\TEMP01.DBF' RESIZE 200m; --临时表空间  
[sql] view plaincopy


增加文件: alter tablespace  SYSTEM  add datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\SYSTEM01.DBF' size 1g;------普通表空间       

[sql] view plaincopy
alter tablespace  TEMP  add tempfile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\PLMDEMO\TEMP02.DBF' size 10m;-------临时表空间  


    当然对于一些特定的表空间,一些有资深dba对我们有一些建议,表空间尽量避免自动扩展,尽可能大。对于回滚表空间尽量规划大,自动管理;对于临时表空间,最好使用临时表空间组;而业务表空间要根据业务分类进行配置,即时监控表空间使用情况。

  4.删除表空间

[sql] view plaincopy
drop tablespace tablespacename including contents and datafiles;


  如果是linux类系统,那么使用这句代码直接就删除数据文件,但是win下面得手动删除。

  5.切换回滚表空间

  当新建回滚表空间后,需要切换,那么可以通过指令:

[sql] view plaincopy
alter system set undo_tablespace=undo scope=both/memory/spfile;


  6.切换临时表空间

[sql] view plaincopy
alter user test temporary tablesapce temp1;
[sql] view plaincopy
--改变数据库的临时表空间 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)    操作        顶端 
efan
注册用户
等级:上士
经验:317
发帖:8
精华:0
注册:2015-1-30
状态:离线
发送短消息息给efan 加好友    发送短消息息给efan 发消息
发表于: IP:您无权察看 2015-1-30 17:39:44 | [全部帖] [楼主帖] 2  楼

北京联动北方科技有限公司顶一个



赞(0)    操作        顶端 
panpan.nie
注册用户
等级:大校
经验:4754
发帖:217
精华:2
注册:1970-1-1
状态:离线
发送短消息息给panpan.nie 加好友    发送短消息息给panpan.nie 发消息
发表于: IP:您无权察看 2015-2-15 15:02:59 | [全部帖] [楼主帖] 3  楼

北京联动北方科技有限公司顶一下~    这是属于 Oracle 的 



赞(0)    操作        顶端 
总帖数
3
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论