Ora-01536:超出了表空间users的空间限量(转)

Ora-01536:超出了表空间users的空间限量(转)

正在开会,同事跑过来说数据库有问题,通讯程序不能入库,赶快获取一条insert into a values()语句后在toad工具中手动插入,发现报错:Ora-01536:超出了表空间users的空间限量。

该表a的是用户A下的一个大表,表空是users,而非A用户的默认表空间。users表空间有大约70%的空闲空间,为什么a表就不能使用了呢?从网上搜索后终于明白:

ora-1536 是指的你建表的那个user 所能使用的空间没有了,不是那个表所在的tablespace 没有free space 了。你需要做的是给那个user 对那个tablespace 有更多的space 可以使用。

解决办法增大能够使用的表空间数或授予无限制的使用权限

ALTER USER A QUOTA 50M ON users;

ALTER USER  A  QUOTA UNLIMITED ON users;

但为什么会出现这样的问题呢,原来设计的时候用户A,赋予DBA和resource权限,并没有设置表空间限额。但现在怎么会出现这么多的空间限额呢?

会不会是上次更改用户A的默认表空间造成的呀?

上次为了数据库便于维护,将用户A的表从别的表空间移到了表空间中,然后更改表空间TS_A 为用户A的默认表空间

select ‘alter table ‘||table_name||‘ move tablespace TS_A ;‘

from user_tables

where tablespace_name=‘LEE_TEST‘ ;

alter user A DEFAULT TABLESPACE TS_A;

把用户A下的表全部移到表空间TS_A下,但因为a是一个比较大的表,所以没有移动成功,a的表空间仍然是users;

估计跟这次操作有关系 ,改天进行测试。那天进行移动表的存储空间时还造成索引无效的错误,看来这次操作带来负面影响还是真不少。

创建一个用户,分配了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 ***

表空间的大小与用户的配额大小是两种不同的概念。表空间的大小是指实际的用户表空间的大小,而配额大小指的是用户指定使用表空间的的大小

把表空间文件增大,还是出现这个问题,用户在使用表空间的同时使用空间的限额,如果超出限制,就算有空的地方,也不会让用户使用。

遇到ORA-01536错误,首先要查看用户的表空间的限额

select * from dba_ts_quotas;

select * from user_ts_quotas;

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

dba_ts_quotas :描述所有用户表空间的限额

user_ts_quotas :描述当前用户表空间的限额。

如果查询结果中max_bytes字段不为-1,修改为无限制或者指定的大小。

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

GRANT UNLIMITED TABLESPACE TOuser;

这种方式是全局性的。  或者

alter user  user  quota unlimited on  user_tablespace;

这种方式是针对特定的表空间的.

回收表空间限额控制:

revoke unlimited tablespace from  user;

或者

alter user  user  quota 0 on  user_tablespace;

时间: 2024-10-27 09:40:33

Ora-01536:超出了表空间users的空间限量(转)的相关文章

[原创] ORA-01536 超出表空间 'xxxx' 的空间限额

1.故障情况 星期一上班一早,客户打电话来,说数据库空间满了.检查表空间情况,还有剩余,检查alert_XXX.log也未有报错. 软件方手工测试,执行插入数据时报错,如下: ORA-01536: 超出表空间 'xxxx' 的空间限额 2.故障解决 使用业务用户'AA'登陆数据库,查询业务用户'AA'对表空间'XXXX'的限额 select * from user_ts_quotes; max_bytes字段为“0”,说明限额用完了,需要调整 增大用户对表空间的读写限额,由原来的2.5G加大到5

Ora-01536:超出了表空间users的空间限量

往数据里插值,结果报这个错,经过百度查证和自己试验,如下: 查看用户表空间的限额 select * from user_ts_quotas; alter user ***(用户名) quota unlimited on ***(表空间); 这种方式是针对特定的表空间的. 可以分配自然也可以回收了: alter user *** quota 0 on *** Ora-01536:超出了表空间users的空间限量,码迷,mamicode.com

ORA-01536: 超出表空间 'tablespace_name' 的空间限额

表空间限额问题知识总结:    表空间的大小与用户的配额大小是两种不同的概念    表空间的大小是指实际的用户表空间的大小,而配额大小指的是用户指定使用表空间的的大小    把表空间文件增大,还是出现这个问题,用户在使用表空间的同时使用空间的限额,如果超出    限制,    就算有空的地方,也不会让用户使用视图:    dba_ts_quotas  : DBA_TS_QUOTAS describes tablespace quotas for all users.    user_ts_quo

oracle创建用户、表空间、临时表空间、分配权限步骤详解

首先登陆管理员账号,或者有DBA权限的用户,接下来依次: --查询所有用户select * from dba_users;--创建新用户create user gpmgt identified by GPMGT; --查看所有用户所在表空间select username,default_tablespace from dba_users; --查询所有表空间路径select * from dba_data_files ;--创建一个表空间create tablespace GPMGT_DATA

Operating System-Thread(3)用户空间和内核空间实现线程

本文主要内容: 操作系统用户空间和内核空间简介 在用户空间实现线程 在内核空间实现线程 用户空间和内核空间线程混合使用 一.用户空间和内核空间简介 用户空间:User space,内核空间:Kernel Space.这两个是操作系统的重要概念之一,今天为了线程做一下简单的介绍: 内核空间用于运行操作系统核心组件,比如内存管理组件,IO交互组件,文件管理.中断管理组件等,同时驱动程序(Driver)也运行在内核空间. 用户空间,用于运行普通应用程序. 示意图: 二,在用户空间实现线程 用户空间的线

[转] 栈空间和堆空间

kevinGao, 原文地址 一个由C/C++编译的程序占用的内存分为以下几个部分: 1.栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈. 2.堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表. 3.全局区(static):也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量和静态变量

操作系统--用户空间和内核空间,用户态和内核态

内核空间和用户空间,内核态和用户态(转载) 内核空间和用户空间Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0-4G.Linux内核将这4G字节的空间分为两部分.将最高的1G字节(从虚拟地址 0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”.而将较低的 3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间).因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有

用户空间和内核空间通讯之【proc文件系统】

今天我们介绍另一种用户内核空间通信的方法:proc文件系统. proc文件系统作为linux提供的一种虚拟文件系统并不占用实际外围存储空间,它仅存在于内存中,系统断电即消失.proc文件系统最开始的设计主要是为满足内核向用户态进程报告其状态而设计,并没有为输入做规定和说明.随着发展,现在的proc文件系统已经演变成一个"用户-内核"空间半双工的通信方式了(虽然目前已经开始有点混乱了,但某些早期开发的软件代码中还在继续使用这个文件系统).用户不但可以从proc文件系统中读取内核的相关状态

linux的io空间和内存空间

1 IO空间和内存空间 并不是所有的体系结构都有IO空间这个定义的,我所了解的只有X86体系上有,而ARM 体系结构就没有这种区别,ARM统一编址, 在X86上,IO空间和内存是独立的,他们各自有各自的总线,并且IO空间一般是64K, 即16位,采用IN和OUT指令访问.内存空间为4G. 可见他们的差别是很大. 2 静态映射: I/O静态映射方式通常是用在寄存器资源的映射上,这样在编写内核代码或驱动时就不 需要再进行ioremap,直接使用映射后的内核虚拟地址访问. map_io成员即内核提供给