在我们为微软的NTFS分区格式中的用户磁盘配额鼓掌的时候,Oracle数据库中也已经实现了用户磁盘配额的技术。可以借助表空间,来对用户进行磁盘配额管理。利用表空间的用户磁盘配额,可以实现很多功能。) C" b- ]+ q8 _# B) N! A6 b5 D# v
如可以利用用户磁盘配额,来管理用户创建数据库对象的能力。我们都知道,若用户想要在某个表空间中创建方案对象的话,必须同时满足两个对象。一是用户具有数据库系统中CREATE TABLE等相关的权限;二是在这个方案对象使用的表空间中具有配额。因为这两个条件必须同时满足,用户才能够成功的建立对象。所以,若我们可以不给用户某个表空间的配额,如此的话,就可以限制用户的相关操作。( d" F" J% }. c# T9 e2 u, W
另外,我们也可以利用磁盘配额来对用户进行数据大小的限制。因为有时候我们可能在同一台数据器重会运行多个应用服务。如笔者以前在同一台服务器里同时运行邮箱与Oracle数据库系统。为了让减少这个两个系统对硬盘空间的过渡应用,所以,有必要对他们进行磁盘配额的限定。故,如用数据库管理员需要将资源限制作为自己数据库安全策略的一部分的话,就可以考虑为每个用户设置表空间配额。
+ l8 N5 Y0 L& H6 s4 \ 总之,表空间配额是一个很不错的辅助管理工具。3 @2 k) @5 k l
一、给用户分配表空间。
) _2 S0 @- c( D- K$ s( M 在Oracle数据库中,对于用户的磁盘配额是通过表空间来实现的。给某个用户分配了多少的表空间,这个用户就有多少的磁盘配额。所以,对于用户进行磁盘配额的管理,就是对用户进行表空间的限制。
; F; E5 u+ ~& B5 u' V: h 在创建用户的时候,若没有关联表空间,则其一般情况下,就属于默认的表空间。而其拥有表空间的大小,则是根据其所属角色的不同而有所区别。如其属于resource组的话,则其表空间是没有大小限制的。5 u# N N% J& z7 k3 O& e5 D; Q7 f
一般情况下,若数据库管理员需要对表空间进行磁盘配额管理的话,则笔者建议,在用户建立的时候,为用户指定表空间,并设置表空间的大小。如我们可以利用如下这条命令配置用户的磁盘空间配额:ALTER USER user_name QUOTA ** ON tablespace。其中参数User_name表示用户名,而参数Tablespace表示用户所属的表空间。若我们参数设置为UNLIMITED的话,表示这个用户的表空间没有限制,直到所有的空间用完为止。2 P7 ?1 U: P' ~ |, _$ d
所以,在一般情况下,两种情形下的用户具有无限制的磁盘配额。一是这个用户属于resource这个角色,因为这个角色默认情况下,其是没有磁盘限额限制的。二是在用户建立的时候,手工利用UNLIMITED指定该用户不具有磁盘限额。不过,为了提高Oracle数据库的安全性与灵活性,笔者是大力建议要对用户进行磁盘配额管理。6 E! G% ^+ U! _$ D% p a
创建错误:
. F) ~5 {) ^1 ] 若在对用户进行磁盘限额后,数据库管理员最容易犯的错误,就是忘记给用户分配磁盘限额,导致对象创建失败。Oracle数据库的时候,犯过这方面的错误。新建了一个用户,并且赋予了其相关的权限。可是,在建表的时候,系统提示错误信息,说“表空间权限不足”。查了好久,最后查询表空间用户确认配额的时候,发现该用户的缺省配额没有分配。利用命令更改了默认配额之后,就可以创建表了。& h% `! a. Q- b( J: y& t0 k! x
二、如何拓展用户的表空间?0 N4 }6 F/ j5 {; _
若对用户进行磁盘限额之后,有时候数据库管理员会发现用户的磁盘空间不足了,需要进行拓展。此时该如何处理呢?
0 [. j# l- o6 L( ^3 ^7 K 若采用自动分配表空间大小的话,则Oracle数据库会自动调整表空间的大小,以满足用户的需要。但是,现在由于采用了磁盘配额管理,所以数据库管理员不得不进行手工的调整。不过在谈这个话题之前,数据库管理员有必要了解一下表空间区的分配方式。" f& y: O: h7 y! ~3 C0 R
若数据库管理员能够预测到表空间中存放的大部分对象都需要使用相同大小的区的话,那么就可以采用Uinform区的分配方式。采取这种方式的话,Oracle数据库将为这个表空间中的所有数据库对象分配数据库管理员指定大小的区。这种方式的优点是不会产生磁盘碎片,可以提高磁盘空间的利用率与数据库的性能。
' h0 R/ w0 k! C% H) Y, K2 G 若数据库管理员能够预测到表空间中存放的大部分对象需要使用的区的大小是不同的话(往往都是不同的),则需要采用AUTOALLOCAT的区分配方式。:这种分配方式下,将由Oracle数据库自动为表空间的对象分配一定大小的区,而不是有用户指定。这种方式的优点就是可以节省数据库管理员的工作量。缺点是会产生比较多的磁盘碎片。不过总的来说,比起数据库管理员的工作量来说,这点磁盘碎片还是容易接受的。笔者在创建表空间的时候,基本上都是采用这个方式的。
- a; ?6 q |, F! W# r 故在拓展表空间的时候,其采用的是原先表空间的分配方式。也就是说,原先表空间采用的是什么区分配方式,则拓展空间也采用原先的分配方式。则是拓展表空间时必须要注意的问题。( I& B3 v: M3 h/ ?
当表空间不足,需要进行拓展的时候,笔者常用的方法是通过增加数据文件的方式来实现的。因为表空间是其相关数据文件大小的总和。所以,为表空间增加新的数据文件,是最常用的增加表空间的方式。2 w8 f9 r! `% E+ u! q4 ]
如当数据库管理员发现TEST1 表空间大小不足的时候,我们可以利用命令ALTER TABLESPACE TEST1 ADD DATEFILE ‘数据文件存放路径’ SIZE 500M。我们可以利用这个命令增加表空间的大小,然后再增加用户的磁盘配额。如此,就可以对用户的表空间进行拓展。
2 g0 M: R( E4 @( J 笔者建议:
' x4 P3 E) v5 E: o4 o$ B; {5 A# b 虽然数据库管理员可以通过图形界面的方式对Oracle数据库进行类似的管理。但是,若在数据库管理专家面前,采用图形化的管理界面的话,则这个数据库管理员可能会被他们认为是菜鸟。这主要是因为图形管理化的界面效率并不是很高。一方面要从众多的菜单栏中找到相关的功能,会浪费数据库管理员一定的时间;而且,其语句执行的效率,也比命令行要低。故,笔者建议,Oralce数据库管理员还是需要学会命令行的管理方式。 |