由 ORA-01536: space quota exceeded for tablespace 引出的研究

部署运行你感兴趣的模型镜像

 

研发的同事说建表时数据库报错:ORA-1536

 

[oracle@localhost ~]$ oerr ora 1536

01536, 00000, "space quota exceededfor tablespace '%s'"

// *Cause: The space quota for the segment owner in the tablespace has

//         been exhausted and the operation attempted the creation of a

//         new segment extent in the tablespace.

// *Action: Either drop unnecessary objectsin the tablespace to reclaim

//         space or have a privileged user increase the quota on this

//         tablespace for the segment owner.

 

 

用户表空间配额不足。有点奇怪,不过还是先解决问题,解决问题有三种方法:

 

方法一:SQL> alteruser user_name quota unlimited on tablespace_name;

方法二:SQL> alteruser user_name quota 100M on tablespace_name;

方法三:SQL> grantunlimited tablespace to user_name;

 

关于quota,之前有整理blog,参考:

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

http://www.cndba.cn/Dave/article/1143

 

 

我给用户grant unlimited tablespace 之后,问题解决。现在我们要研究一下这个问题。之前我给这个用户赋了connect,resource,dba 三个角色。有关用户角色的详细内容参考:

Oracle 用户及角色 介绍

http://www.cndba.cn/Dave/article/1246

           

         然后回收了dba的角色,用户在建表就报了ORA-1536的错误。

 

在我们创建用户时,默认是会授予unlimited tablespace 的权限的,但是如果我们赋予了用户DBA的角色,然后revokedba 角色之后,那么unlimitedtablespace的权限也会被revoke。 因为unlimited tablespace的权限是在DBA 角色下面的。这个就是遇到ORA-1536的一个原因。

 

在我们赋给了unlimitedtablespace 权限之后,查看dba_ts_quotas表:

 SQL> grant unlimited tablespace to dave;

Grant succeeded.

SQL> select * from dba_sys_privs where grantee='DAVE';

GRANTEE                       PRIVILEGE                     ADM

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

DAVE                UNLIMITED TABLESPACE           NO

 

SQL> select username, tablespace_name,bytes, max_bytes from dba_ts_quotas where username = 'DAVE';

no rows selected

 

返回为空。 在查看user_ts_quotas:

SQL> conn dave/dave;

Connected.

SQL> select tablespace_name, bytes,max_bytes from USER_TS_QUOTAS;

no rows selected

 

还是为空。我们测试使用alter user 命令修改quota 的配置:

SQL> alter user dave quota unlimited on system;

User altered.

 

在查看dba_ts_quots:

SQL> select username, tablespace_name,bytes, max_bytes from dba_ts_quotas where username = 'DAVE';

 

USERNAME                       TABLESPACE_NAME                     BYTES  MAX_BYTES

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

DAVE                           SYSTEM                                  0         -1

 

这时就可以查看到相关的记录了,这里的-1 表示unlimited。

 

在修改配额:

SQL> alter user dave quota 50M on system;

User altered.

 

SQL> select * from user_ts_quotas;

 

TABLESPACE_NAME               BYTES  MAX_BYTES    BLOCKS MAX_BLOCKS DRO

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

SYSTEM                                  0   52428800          0       6400 NO

 

测试我们的配额就变成了50M.

 

 

小结:

1.     创建用户默认会授予unlimited tablespace 的权限,但如果分配了DBA的角色,在收回DBA 角色时,unlimited tablespace 的角色也会同时收回。

2.     如果只对用户赋予了unlimited tablespace的权限,那么在user_ts_quotas和 dba_ts_quotas 表里都没有相关的记录,只有修改quota 之后,这2个字典里才会有相关的quota 信息。

 

 

 

 

 

 

 

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

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任

QQ:492913789

Email:ahdba@qq.com

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

Weibo:    http://weibo.com/tianlesoftware

Twitter:  http://twitter.com/tianlesoftware

Facebook: http://www.facebook.com/tianlesoftware

Linkedin: http://cn.linkedin.com/in/tianlesoftware


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

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

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

DBA6 群:158654907    DBA7 群:172855474  DBA8群:102954821    

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

Oracle数据泵导入(`impdp`)操作中,如果遇到与表空间相关的错误,例如 `ORA-39083`、`ORA-01119` 和 `ORA-27040`,这通常意味着目标数据库中缺少必要的表空间或文件路径配置不正确。以下是详细的解决方法和注意事项。 ### 问题分析 #### 错误描述 - **ORA-39083**: 表示数据泵在尝试创建某个对象时失败。 - **ORA-01119**: 表示无法创建数据库文件(如数据文件)。 - **ORA-27040**: 表示文件创建失败,通常是由于指定的文件路径不存在或权限不足。 这些问题的根本原因可能是: 1. 导出的数据包含特定的表空间定义。 2. 目标系统上未预先创建对应的表空间。 3. 数据文件路径在目标系统上不可用或没有写入权限。 ### 解决方案 #### 方法一:手动创建表空间 在执行 `impdp` 命令之前,确保所有需要的表空间已经在目标数据库中存在。可以通过以下步骤手动创建表空间: ```sql CREATE TABLESPACE example_tbs DATAFILE '/u01/oradata/example_tbs.dbf' SIZE 100M AUTOEXTEND ON; ``` 其中 `/u01/oradata/` 是一个有效的目录路径,且 Oracle 用户对该目录具有读写权限。 #### 方法二:使用 `REMAP_TABLESPACE` 参数映射表空间 如果目标数据库中不想使用源数据库中的表空间名称,可以使用 `REMAP_TABLESPACE` 参数将源表空间映射到目标表空间。例如: ```bash impdp username/password@db_name directory=dump_dir dumpfile=example.dmp remap_tablespace=source_tbs:target_tbs ``` 此命令会将源导出文件中涉及 `source_tbs` 的内容映射到目标数据库的 `target_tbs` 中。 #### 方法三:检查并修复文件路径 确保目标系统的文件路径存在,并且 Oracle 用户有权限访问该路径。可以通过以下命令检查路径是否存在: ```bash ls -ld /u01/oradata/ ``` 如果没有权限,请修改目录权限: ```bash chown oracle:oinstall /u01/oradata/ chmod 750 /u01/oradata/ ``` #### 方法四:调整初始化参数 在某些情况下,可能需要调整数据库的初始化参数,例如 `DB_CREATE_FILE_DEST`,以确保数据文件能够自动创建在正确的路径下: ```sql ALTER SYSTEM SET DB_CREATE_FILE_DEST='/u01/oradata/'; ``` ### 验证与测试 完成上述配置后,重新运行 `impdp` 命令以验证是否解决了问题: ```bash impdp username/password@db_name directory=dump_dir dumpfile=example.dmp ``` 观察日志输出,确认是否仍然出现错误。如果有新的错误信息,可以根据提示进一步排查。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值