创建Oracle表空间的步骤

  在工作中有时不能随时使用UI界面来管理或查看oracle的表空间,可通下面的sql脚本很容易了解表空间使用情况,不用做任何修改即可使用。

 

select f.tablespace_name,a.total,u.used,f.free,round((u.used/a.total)*100) "% used", round((f.free/a.total)*100) "% Free" 
  from
      (select tablespace_name, sum(bytes/(1024*1024)) total 
           from dba_data_files group by tablespace_name) a,
                (select tablespace_name, round(sum(bytes/(1024*1024))) used 
                      from dba_extents group by tablespace_name) u,
                           (select tablespace_name, round(sum(bytes/(1024*1024))) free 
                                  from dba_free_space group by tablespace_name) f
      WHERE a.tablespace_name = f.tablespace_name and a.tablespace_name = u.tablespace_name; 


查看 Oracle 表空间使用率

用到了 SYS.DBA_FREE_SPACE、SYS.DBA_DATA_FILES 两个视图,需要被赋予在这两个视图对象上的查询权限。

-- connect as sysdba

GRANT SELECT ON  SYS.DBA_FREE_SPACE TO FORREST;

GRANT SELECT ON  SYS.DBA_DATA_FILES TO FORREST;

 

查看 Oracle 表空间使用率

-- connect as forrest

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 F.TABLESPACE_NAME;





经过长时间学习创建Oracle表空间,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西。

1、先查询空闲空间

 
 
  1. select tablespace_name,file_id,block_id,bytes,blocks from dba_free_space; 

2、增加Oracle表空间

先查询数据文件名称、大小和路径的信息,语句如下:

 
 
  1. select tablespace_name,file_id,bytes,file_name from dba_data_files; 

3、修改文件大小语句如下

 
 
  1. alter database datafile   
  2. '需要增加的数据文件路径,即上面查询出来的路径  
  3. 'resize 800M; 

4、创建Oracle表空间

 
 
  1. create tablespace test  
  2. datafile '/home/app/oracle/oradata/oracle8i/test01.dbf' size 8M  
  3. autoextend on  
  4. next 5M  
  5. maxsize 10M;  
  6.  
  7. create tablespace sales  
  8. datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M  
  9. autoextend on  
  10. next 50M  
  11. maxsize unlimited  
  12. maxsize unlimited 是大小不受限制  
  13.  
  14. create tablespace sales  
  15. datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M  
  16. autoextend on  
  17. next 50M  
  18. maxsize 1000M  
  19. extent management local uniform;  
  20. unform表示区的大小相同,默认为1M  
  21.  
  22. create tablespace sales  
  23. datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M  
  24. autoextend on  
  25. next 50M  
  26. maxsize 1000M  
  27. extent management local uniform size 500K;  
  28. unform size 500K表示区的大小相同,为500K  
  29.  
  30. create tablespace sales  
  31. datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M  
  32. autoextend on  
  33. next 50M  
  34. maxsize 1000M  
  35. extent management local autoallocate;  
  36. autoallocate表示区的大小由随表的大小自动动态改变,大表使用大区小表使用小区  
  37.  
  38. create tablespace sales  
  39. datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M  
  40. autoextend on  
  41. next 50M  
  42. maxsize 1000M  
  43. temporary;  
  44. temporary创建字典管理临时表空间  
  45.  
  46. create temporary tablespace sales  
  47. tempfile '/home/app/oracle/oradata/oracle8i/sales01.dbf' size 800M  
  48. autoextend on  
  49. next 50M  
  50. maxsize 1000M  
  51. 创建本地管理临时表空间,如果是临时表空间,所有语句中的datafile都换为tempfile  
  52.  
  53. 8i系统默认创建字典管理临时表空间,要创建本地管理临时表空间要加temporary tablespace关键字  
  54. 创建本地管理临时表空间时,不得使用atuoallocate参数,系统默认创建uniform管理方式  
  55.  
  56. 为表空间增加数据文件:  
  57. alter tablespace sales add  
  58. datafile '/home/app/oracle/oradata/oracle8i/sales02.dbf' size 800M  
  59. autoextend on next 50M  
  60. maxsize 1000M; 

创建本地管理临时Oracle表空间,如果是临时表空间,所有语句中的datafile都换为tempfile8i系统默认创建字典管理临时表空间,要创建本地管理临时表空间要加temporary tablespace关键字创建本地管理临时表空间时,不得使用atuoallocate参数,系统默认创建uniform管理方式

为表空间增加数据文件:

 
 
  1. alter tablespace sales add  
  2. datafile '/home/app/oracle/oradata/oracle8i/sales02.dbf' size 800M  
  3. autoextend on next 50M  
  4. maxsize 1000M; 

5、更改自动扩展属性:

 
 
  1. alter database datafile  
  2. '/home/app/oracle/oradata/oracle8i/sales01.dbf',  
  3. '/home/app/oracle/oradata/oracle8i/sales02.dbf'  
  4. '/home/app/oracle/oradata/oracle8i/sales01.dbf  
  5. autoextend off; 

以上介绍创建Oracle表空间,在这里拿出来和大家分享一下,希望对大家有用。


Oracle表空间

目录

概述
控制Oracle用户表空间配额
Oracle数据库中表空间的处理方式
ORACLE表空间恢复方案
展开

编辑本段概述

   Oracle数据库经过长时间的发展,很多用户都很了解Oracle用户表空间了。SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计。Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献。可以这么说,Oracle中很多优化都是基于表空间的设计理念而实现的。
   Oracle表空间之基本概念
   ORACLE数据库被划分成称作为表空间的逻辑区域——形成ORACLE数据库的逻辑结构。一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的 数据库文件。表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等。
  每个ORACLE数据库均有SYSTEM表空间,这是数据库创建时自动创建的。SYSTEM表空间必须总要保持联机,因为其包含着数据库运行所要求的基本信息(关于整个数据库的数据字典、联机求助机制、所有回退段、临时段和自举段、所有的用户数据库实体、其它ORACLE软件产品要求的表)。
  一个小型应用的ORACLE数据库通常仅包括SYSTEM表空间,然而一个稍大型应用的ORACLE数据库采用多个表空间会对数据库的使用带来更大的方便。
   Oracle表空间之作用
  表空间的作用能帮助DBA用户完成以下工作:
  1.决定数据库实体的空间分配;
  2.设置数据库用户的空间份额;
  3.控制数据库部分数据的可用性;
  4.分布数据于不同的设备之间以改善性能;
  5.备份和恢复数据。
  用户创建其数据库实体时其必须于给定的表空间中具有相应的权力,所以对一个用户来
  说,其要操纵一个ORACLE数据库中的数据,应该:
  1.被授予关于一个或多个表空间中的RESOURCE特权;
  2.被指定缺省表空间;
  3.被分配指定表空间的存储空间使用份额;
  4.被指定缺省临时段表空间。

编辑本段控制Oracle用户表空间配额

  在一些大型的数据库应用中,我们需要控制某个用户或者某一组用户其所占用的磁盘空间。这就好像在文件服务器中,需要为每个用户设置磁盘配额一样,以防止硬盘空间耗竭。所以,在数据库中,我们也需要限制用户所可以使用的磁盘空间大小。为了达到这个目的,我们就可以通过表空间来实现。
  我们可以在Oracle数据库中,建立不同的表空间,为其设置最大的存储容量,然后把用户归属于这个表空间。如此的话,这个用户的存储容量,就受到这个表空间大小的限制。当然,表空间的优势还不仅仅这些,企业对于数据库的性能要求越高,或者数据库容量越大,则表空间的优势就会越大。
  下面,我们就具体来看看Oracle数据库中表空间的处理方式,看其在性能与安全性方面是否有足够的优势与SQL Server数据库抗衡。

编辑本段Oracle数据库中表空间的处理方式

  在数据库设计的时候,我们建议 数据库管理员按如下顺序设置表空间。
  第一步:建立Oracle用户表空间。
  在设计数据库的时候,首先需要设计表空间。我们需要考虑,是只建立一个表空间呢,还是需要建立多个表空间,以及各个表空间的存放位置、磁盘限额等等。
  到底设计多少个表空间合理,没有统一的说法,这主要根据企业的实际需求去判断。如企业需要对用户进行磁盘限额控制的,则就需要根据用户的数量来设置表空间。当企业的数据容量比较大,而其又对数据库的性能有比较高的要求时,就需要根据不同类型的数据,设置不同的表空间,以提高其输入输出性能。
  第二步:建立Oracle用户表空间,并制定用户的默认表空间。
  在建立用户的时候,我们建议数据库管理员要指定用户的默认表空间。因为我们在利用CREATE语句创建数据库对象,如数据库表的时候,其默认是存储在数据库的当前默认空间。若不指定用户默认表空间的话,则用户每次创建数据库对象的时候,都要指定表空间,显然,这并不是很合理。
  另外要注意,不同的表空间有不同的权限控制。用户对于表空间A具有完全控制权限,可能对于表空间B就只有查询权限,甚至连连接的权限的都没有。所以,合理为用户配置表空间的访问权限,也是提高数据库安全性的一个方法。

编辑本段ORACLE表空间恢复方案

(一)、用户表空间

  ORACLE表空间 [1] 错误现象:
  在启动数据库时出现ORA-01157,ORA-01110或操作系统级错
  误例如ORA-07360,在关闭数据库(使用shutdown normal或shutdown immediate) 时将导致错误ORA-01116,ORA-01110以及操作系统级错误ORA-07368
  解决:
  以下有两种解决方案:
  方案一、用户的表空间可以被轻易地重建
  即最近导出的对象是可用的或表空间中的对象可以被轻易地重建等。在这种情况下,最简单的方法是offline并删除该数据文件,删除表空间并重建表空间以及所有的对象。
  svrmgrl> startup mount
  svrmgrl> alter database datafile filename offline drop;
  svrmgrl> alter database open;
  svrmgrl> drop tablespace tablespace_name including contents;
  重建表空间及所有对象。
  方案二、用户的表空间不能够被轻易地重建
  在大多数情况下,重建表空间是不可能及太辛苦的工作.方法是倒备份及做介质恢复.如果您的系统运行在NOARCHIVELOG模式下,则只有丢失的数据,在online redo log中方可被恢复。
  步骤如下:
  1)Restore the lost datafile from a backup
  2)svrmgrl> startup mount
  3)svrmgrl> select v1.group#,member,sequence#,first_change# from v$log v1,v$logfile v2 where v1.group#=v2.group#;
  4)如果数据库运行在NOARCHIVELOG模式下则:svrmgrl> select file#,change# from v$recover_file;
  如果 CHANGE# 大于最小的FIRST_CHANGE#则数据文件可以被恢复。
  如果 CHANGE# 小于最小的FIRST_CHANGE#则数据文件不可恢复。恢复最近一次的全备份或采用方案一。
  5)svrmgrl> recover datafile filename;
  6)确认恢复成功
  7)svrmgrl> alter database open resetlogs;
  只读表空间无需做介质恢复,只要将备份恢复即可。唯一的例外是:
  表空间在最后一次备份后被改为read-write 模式
  表空间在最后一次备份后被改为read-only 模式
  在这种情况下,均需进行介质恢复。

(二)、临时表空间

  临时表空间并不包含真正的数据,恢复的方法是删除临时表空间并重建即可。

(三)、系统表空间

  如果备份不可用,则只能采用重建数据库的方法

(四)、回滚表空间

  有三种种情况:
  1、数据库已经完全关闭(使用shutdown immediate或shutdown命令)
  1) 确认数据库完全关闭
  2) 修改init.ora文件,注释"rollback-segment"
  3) svrmgrl> startup restrict mount
  4) svrmgrl> alter database datafile filename offline drop;
  5) svrmgrl> alter database open;
  基于出现的结果:"statement PRocessed" 转(7);"ORA-00604,ORA-00376,ORA-01110"转(6)
  6) svrmgrl> shutdown immediate
  修改init.ora文件,增加如下一行:_corrupted_rollback_segments = (<roll1>,...<rolln>)
  svrmgrl> startup restrict
  7) svrmgrl> drop tablespace tablespace_name including contents;
  8) 重建表空间及回滚段
  9) svrmgrl> alter system disable restricted session;
  10) 修改init.ora文件
  2、数据库未完全关闭(数据库崩溃或使用shutdown abort命令关闭数据库)
  1) 恢复备份
  2) svrmgrl> startup mount
  3) svrmgrl> select file#,name,status from v$datafile;
  svrmgrl> alter database datafile filename online;
  4) svrmgrl> select v1.group#,member,sequence#,first_change# from v$log v1,v$logfile v2 where v1.group#=v2.group#;
  5) svrmgrl> select file#,change# from v$recover_file; #参见方案2-4
  6) svrmgrl> recover datafile filename;
  7) svrmgrl> alter database open;
  3、数据库处于打开状态
  1) 删除回滚段和表空间
  2) 重建表空间和回滚段
参考资料


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

福海鑫森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值