Oracle更改表空间大小/用户空间限额

mxl@TEST1>create table t1 as select * from all_objects;create table t1 as select * from all_objects*第 1 行出现错误:ORA-01536: 超出表空间 'TEST_16K' 的空间限额
首先想到让它自动拓展

sys@TEST1>alter date datafile 'D:\oracle\product\10.2.0\oradata\test1\test_16kbf' autoextend on;alter date datafile 'D:\oracle\product\10.2.0\oradata\test1\test_16k.dbf' autotend on *第 1 行出现错误:ORA-00940: 无效的 ALTER 命令
ora-00940:上网查找,说是sql错误,囧,跟没说一样
原来是语法错误,继续

sys@TEST1>alter datebase datafile 'D:\oracle\product\10.2.0\oradata\test1\test6k.dbf' autoextend on;alter datebase datafile 'D:\oracle\product\10.2.0\oradata\test1\test_16k.dbf'toextend on *第 1 行出现错误:ORA-00940: 无效的 ALTER 命令
还错,我晕,算了,直接改大小吧,用什么自动扩展

sys@TEST1>alter datebase datafile 'D:\oracle\product\10.2.0\oradata\test1\test6k.dbf' resize 50m;alter datebase datafile 'D:\oracle\product\10.2.0\oradata\test1\test_16k.dbf'size 50m *第 1 行出现错误:ORA-00940: 无效的 ALTER 命令
又不对,超级郁闷,ora-00940如影随形,换个表空间继续

sys@TEST1>alter datebase datafile 'D:\oracle\product\10.2.0\oradata\test1\test6k.dbf' resize 50M;alter datebase datafile 'D:\oracle\product\10.2.0\oradata\test1\test_16k.dbf'size 50M *第 1 行出现错误:ORA-00940: 无效的 ALTER 命令

继续出错,要疯了,去了躺厕所,怀疑身上晦气太重,致使oracle出问题。继续

sys@TEST1>alter tablespace test_16k offline;表空间已更改。

sys@TEST1>alter datebase datafile 'd:\oracle\product\10.2.0\oradata\test1\test6k.dbf' autoextend on next 50m maxsize 200m;alter datebase datafile 'd:\oracle\product\10.2.0\oradata\test1\test_16k.dbf'toextend on next 50m maxsize 200m *第 1 行出现错误:ORA-00940: 无效的 ALTER 命令

啊?猛然间发现,此“datebase”长相不俗。靠!原来是“你”!遂把datebase该为database,可以正常修改数据文件大小。

sys@TEST1>alter database datafile 'd:\oracle\product\10.2.0\oradata\test1\test6k.dbf' autoextend on next 50m maxsize 200m;数据库已更改。sys@TEST1>alter database datafile 'd:\oracle\product\10.2.0\oradata\test1\test.dbf' resize 10m;数据库已更改。
继续建表
mxl@TEST1>create table t1 as select * from all_objects;create table t1 as select * from all_objects*第 1 行出现错误:ORA-01536: 超出表空间 'TEST_16K' 的空间限额
继续出错,奥,修改用户空间限额
sys@TEST1>alter user mxl quota 200m on test_16k;用户已更改。
建表成功!
总结:
1、修改表空间大小,乃修改的datafile非tablespace
2、不要出低级拼写错误。
3、错误提示很重要,不要想当然。
附:

三、磁盘配额管理的几个建议。  1、当在创建表空间对象的时候,出现“超出表空间的空间限量”错误提示的处理思路。这种情况一般是由很多种情况所造成的。笔者在遇到这种问题的时候,一般的处理思路是,先查看该用户的磁盘配额,看其是否满足空间上的需求。若该用户没有磁盘配额管理的话,或者磁盘配额大小符合既定需求的话,则建议查看表空间的大小,看是否是因为表空间不足所造成的。若前两步还是不能够解决问题的,则看看表空间的管理方式。若是数据字典管理模式的话,则把他改为本地管理模式,一般就可以解决问题了。  2、若数据库中存放着不同办事处或者不同分公司的数据时,笔者建议对Oracle数据库进行磁盘限额。这可以有效的防止因为硬盘空间的不足导致整个数据库的崩溃。而若对用户进行磁盘配额管理的话,那最多只是某个办事处(某个用户)数据库操作出现故障而已。这也是提高Oracle数据库可用性的一个有效手段。

oracle表空间问题
创建一个用户,分配了400M的表空间,结果在用到13.3M时报错:
ORA-01536: 超出表空间 '***' 的空间限额

经查,表空间跟表空间限额两个值是不一样的.
推测按默认的话oracle应该会给每个用户分配一个默认的表空间限额,具体比例待查,但这比例肯定远小于100%.
所以说分配了400M的表空间未必能存储400M的数据.

解决办法如下:

查看用户表空间的限额
select * from user_ts_quotas;

max_bytes字段就是了
-1是代表没有限制,其它值多少就是多少了.

不对用户做表空间限额控制:
GRANT UNLIMITED TABLESPACE TO ***(用户);
这种方式是全局性的.
或者
alter user ***(用户名) quota unlimited on ***(表空间);
这种方式是针对特定的表空间的.

可以分配自然也可以回收了:
revoke unlimited tablespace from ***(用户)
或者
alter user *** quota 0 on ***

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓