Oracle 用户 对 表空间 配额(quota ) 说明

 

 

. 官网的说明

 

Oracle 官网对quota的定义如下:

            A limit on a resource, such as a limit on the amount of database storage used by a database user. A database administrator can set tablespace quotas for each Oracle Database username.

 

有关Oracle Quota 这块,只在Oracle 的安全管理这块搜到了一些内容。

            Managing Security for Oracle Database Users

            http://download.oracle.com/docs/cd/E11882_01/network.112/e16543/users.htm#DBSEG10220

 

 

1.1   Assigning a Tablespace Quota for the User

            You can assign each user a tablespace quota for any tablespace (except a temporary tablespace). Assigning a quota accomplishes the following:

1Users with privileges to create certain types of objects can create those objects in the specified tablespace.

2Oracle Database limits the amount of space that can be allocated for storage of a user's objects within the specified tablespace to the amount of the quota.

 

            By default, a user has no quota on any tablespace in the database. If the user has the privilege to create a schema object, then you must assign a quota to allow the user to create objects. At a minimum, assign users a quota for the default tablespace, and additional quotas for other tablespaces in which they can create objects.

 

            The following CREATE USER statement assigns the following quotas for the test_ts and data_ts tablespaces:

 

CREATE USER jward

 IDENTIFIED BY password

 DEFAULT TABLESPACE data_ts

 QUOTA 100M ON test_ts

 QUOTA 500K ON data_ts

 TEMPORARY TABLESPACE temp_ts

 PROFILE clerk;

 

-- 在创建用户的时候,就指定用户在特定表空间上的配额

 

            You can assign a user either individual quotas for a specific amount of disk space in each tablespace or an unlimited amount of disk space in all tablespaces. Specific quotas prevent a user's objects from using too much space in the database.

-- 配额的指定可以禁止用户的对象使用过多的表空间

 

            You can assign quotas to a user tablespace when you create the user, or add or change quotas later. (You can find existing user quotas by querying the USER_TS_QUOTAS view.)

            If a new quota is less than the old one, then the following conditions remain true:

            1If a user has already exceeded a new tablespace quota, then the objects of a user in the tablespace cannot be allocated more space until the combined space of these objects is less than the new quota.

            2If a user has not exceeded a new tablespace quota, or if the space used by the objects of the user in the tablespace falls under a new tablespace quota, then the user's objects can be allocated space up to the new quota.

 

1.2  Restricting the Quota Limits for User Objects in a Tablespace

            You can restrict the quota limits for user objects in a tablespace by using the ALTER USER SQL statement to change the current quota of the user to zero.

            After a quota of zero is assigned, the objects of the user in the tablespace remain, and the user can still create new objects, but the existing objects will not be allocated any new space.

            For example, you could not insert data into one of this user's exiting tables. The operation will fail with an ORA-1536 space quota exceeded for tables error.

 

1.3  Granting Users the UNLIMITED TABLESPACE System Privilege

            To permit a user to use an unlimited amount of any tablespace in the database, grant the user the UNLIMITED TABLESPACE system privilege. This overrides all explicit tablespace quotas for the user. If you later revoke the privilege, then you must explicitly grant quotas to individual tablespaces. You can grant this privilege only to users, not to roles.

            Before granting the UNLIMITED TABLESPACE system privilege, you must consider the consequences of doing so.

 

Advantage:

            You can grant a user unlimited access to all tablespaces of a database with one statement.

 

Disadvantages:

            1The privilege overrides all explicit tablespace quotas for the user.

            2You cannot selectively revoke tablespace access from a user with the UNLIMITED TABLESPACE privilege. You can grant selective or restricted access only after revoking the privilege.

 

 

1.4  Listing All Tablespace Quotas

            Use the DBA_TS_QUOTAS view to list all tablespace quotas specifically assigned to each user. For example:

 

SELECT * FROM DBA_TS_QUOTAS;
 
TABLESPACE    USERNAME    BYTES     MAX_BYTES    BLOCKS    MAX_BLOCKS
----------    ---------  --------   ----------   -------   ----------
USERS         JFEE              0       512000         0          250
USERS         DCRANNEY          0           -1         0           -1

 

            When specific quotas are assigned, the exact number is indicated in the MAX_BYTES column. This number is always a multiple of the database block size, so if you specify a tablespace quota that is not a multiple of the database block size, then it is rounded up accordingly. Unlimited quotas are indicated by -1.

 

 

.  Quota 说明

            配额大小指的是用户指定使用表空间的的大小。在1.1 节里提到,默认情况下,用户对所有表空间都是没有配额的,即不受空间的限制。 查看几个用户的创建脚本来验证一下:

 

 

CREATE USER SYSTEM

  IDENTIFIED BY <password>

  DEFAULT TABLESPACE SYSTEM

  TEMPORARY TABLESPACE TEMP

  PROFILE DEFAULT

  ACCOUNT UNLOCK;

  -- 2 Roles for SYSTEM

  GRANT AQ_ADMINISTRATOR_ROLE TO SYSTEM WITH ADMIN OPTION;

  GRANT DBA TO SYSTEM WITH ADMIN OPTION;

  ALTER USER SYSTEM DEFAULT ROLE ALL;

  -- 5 System Privileges for SYSTEM

  GRANT GLOBAL QUERY REWRITE TO SYSTEM;

  GRANT CREATE MATERIALIZED VIEW TO SYSTEM;

  GRANT CREATE TABLE TO SYSTEM;

  GRANT UNLIMITED TABLESPACE TO SYSTEM WITH ADMIN OPTION;

  GRANT SELECT ANY TABLE TO SYSTEM;

 

 

CREATE USER DAVE

  IDENTIFIED BY <password>

  DEFAULT TABLESPACE USERS

  TEMPORARY TABLESPACE TEMP

  PROFILE DEFAULT

  ACCOUNT UNLOCK;

  -- 2 Roles for DAVE

  GRANT CONNECT TO DAVE;

  GRANT RESOURCE TO DAVE;

  ALTER USER DAVE DEFAULT ROLE ALL;

  -- 1 System Privilege for DAVE

  GRANT UNLIMITED TABLESPACE TO DAVE;

 

            从这2个脚本来看,默认情况下,都会对用户赋 unlimited tablespace 的权限。这是是在创建的时候指定的,当我们的用户创建好之后,我们也可以修改用户的配额。

 

有关用户的配额的操作说明

1. 创建用户时,指定限额

 

SQL> conn / as sysdba;

Connected.

SQL> create user anqing identified by anqing default tablespace users temporary tablespace temp quota 10M on users;

User created.

 

查询用户配额的信息:

SQL> select tablespace_name,username,max_bytes from  DBA_TS_QUOTAS where username='ANQING';

 

TABLESPACE_NAME      USERNAME    MAX_BYTES

------------------------------ ---------- ----------

USERS                    ANQING       10485760

 

 

2.更改用户的表空间限额:

 

不对用户做表空间限额控制:

 

SQL> grant unlimited tablespace to anqing;

Grant succeeded.

 

这种方式是全局性的. 即修改用户多所有表空间的配额。

 

如果我们想改某个具体的,即针对用户的某个特定的表空间,可以使用如下SQL

 

SQL> alter user anqing quota unlimited on users;

User altered.

 

查看配额:

SQL> select tablespace_name,username,max_bytes from  DBA_TS_QUOTAS where username='ANQING';

 

TABLESPACE_NAME                USERNAME    MAX_BYTES

------------------------------ ---------- ----------

USERS                          ANQING             -1

 

这时候max_bytes -1,即不受限制。

 

 

3. 回收用户对表空间的配额:

同样两种方式,

 

全局:

SQL> revoke unlimited tablespace from anqing;

Revoke succeeded.

 

在查看配额,已经没有了相关信息:

SQL> select tablespace_name,username,max_bytes from  DBA_TS_QUOTAS where username='ANQING';

no rows selected

 

 

针对某个特定的表空间:

SQL> alter user anqing quota 0 on users;

User altered.

 

 

 

 

 

-------------------------------------------------------------------------------------------------------

QQ:492913789

Email:ahdba@qq.com

Blog: http://www.cndba.cn/dave


DBA1 群:62697716();   DBA2 群:62697977()   DBA3 群:62697850()  

DBA 超级群:63306533();  DBA4 群: 83829929  DBA5群: 142216823   

聊天 群:40132017   聊天2群:69087192

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

 

Oracle 最常用的命令 1.登陆系统用户sqlplus 然后输入系统用户名和密码   登陆别的用户 :   conn 用户名/密码; 2.创建表空间   create tablespace 空间名   datafile 'c:\空间名' size 15M --表空间的存放路径,初始值为15M   autoExtend on next 10M --空间的自动增长的值是10M   permanent online; --永久使用 3.创建用户   create user shi --创建用户名为shi   identified by scj --创建密码为scj   default tablespace 表空间名 --默认表空间名   temporary tablespace temp --临时表空间为temp   profile default --受profile文件的限制   quota unlimited on 表空间名; --在表空间下面建表不受限制 4.创建角色   create role 角色名 identified by 密码; 5.给角色授权   grant create session to 角色名;--给角色授予创建会话的权限   grant 角色名 to 用户名; --把角色授予用户 6.给用户授予权限   grant connect,resource to shi;--给shi用户授予所有权限   Grant dba to shi;-给shi 用户授予DBA权限   grant create table to shi; --给shi用户授予创建表的权限 7.select table_name from user_tables; 察看当前用户下的所有表 8.select tablespace_name from user_tablespaces; 察看当前用户下的 表空间 9.select username from dba_users;察看所有用户名称命令 必须用sys as sysdba登陆 10.创建表   create table 表名   (   id int not null,   name varchar2(20) not null   )tablespace 表空间名 --所属的表空间   storage   (   initial 64K --表的初始值   minextents 1 --最小扩展值   maxextents unlimited --最大扩展值   ); 11.--为usrs表添加主键和索引   alter table users   add constraint pk primary key (ID); 12.为已经创建users表添加外键   alter table users   add constraint fk_roleid foreign key (roleid)   references role(role_id) on delete cascad; --下边写主表的列   on delete cascad是创建级联 13.把两个列连接起来   select concat(name,id) from 表名; --把name和id连接起来 14.截取字符串   select column(name,'李') from 表名; --把name中的‘李’去掉 15.运行事务之前必须写   set serveroutput on; --打开输入输出(不写的话,打印不出信息)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值