暂无图片
Oracle 创建表报错
我来答
分享
暂无图片 匿名用户
Oracle 创建表报错

新创建一个用户test,只授权了登录权限和创建表的权限

create user test identified by 123;

grant connect to test;

grant create table to test;


我使用下面两种方式创建表,一个会报错,一个不会报错能创建表

1.create table t1 as select * from user_users;


2.create table t1(id number(10),name varchar2(30),status varchar2(2)) tablespace data;


请问各位大佬,这是什么原因???

我来答
添加附件
收藏
分享
问题补充
6条回答
默认
最新
文成

grant resource to test;

暂无图片 评论
暂无图片 有用 1
打赏 0
Gnos
2023-02-17
有授权建表权限的,第二个可以创建没报错,应该跟这个权限没关系
张sir

grant unlimited tablespace to test;

暂无图片 评论
暂无图片 有用 0
打赏 0
Gnos
2023-02-17
同样没有授权unlimited tablespace权限,为什么第二个语句就可以呢

你创建用户使用的默认users表空间,且未grant有效使用users表空间的权限;而你第二个建表语句是在data表空间中创建的

暂无图片 评论
暂无图片 有用 0
打赏 0
Gnos
2023-02-17
第二个语句不指定表空间,使用默认表空间在不授权unlimited tablespace权限的情况下也可以创建成功,这是为什么呢
Thomas

创建用户时没有明确DEFAULT TABLESPACE,那么建表时默认表空间是USERS。

第一条,新表里有一条记录。这条语句完成两个动作:建新表(定义数据字典),往表里查记录。

第二条,仅仅是建表(定义数据字典),不插入记录。

看一下这个参数:

SQL> show parameter deferred_segment_creation;

NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
deferred_segment_creation boolean TRUE

如果是TRUE,说明建表后不会在TABLESPACE里立即给该表划一定量的SEGMENT。我估计你这个参数为TRUE。那么第二条仅仅是建立数据字典,并未实质地在USERS表空间划SEGMENT,所以不报错。而第一条,因为向USERS表空间申请空间了(插入记录),但又没有对该用户授与相应表空间配额,比如grant unlimited tablespace to,或alter user xxx quota 100M on users; 所以报错。 

暂无图片 评论
暂无图片 有用 1
打赏 1
Gnos
2023-02-17
确实是,我的deferred_segment_creation参数的值是TRUE,我第一个创建语句select的表改成一个空表就能创建了,第二个语句表创建成功以后执行inert语句也是报错ORA-01950。谢谢!
Thomas

补充下,尽管没有针对任何表空间存数据的权限,但还是可以建表的。if deferred_segment_creation=true

暂无图片 评论
暂无图片 有用 1
打赏 0
Gnos

问题已关闭: 问题已经得到解决

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
19C手工建库报日志组已存在
回答 2
/u01/app/oracle/oradata/PROD5/ 删光,提示我GROUP1已存在
19C AUTOUPGRADE问题
回答 3
配得上,但是我看了ANALYZE的日志,说是12C下的旧INSTANCEnotavailable,折腾了多次都报这个错(明明在12C环境下SQLPLUS旧INSTANCE正常啊)。现在已经放弃AUTO
oracle同义词
回答 2
短期使用,直接给dba权限也行,写拼接语句批量取别名也是可以的
第三方要抽取数据库的数据,账号怎么创建
回答 2
你要求每个的话,就要求在CDB建立用户。比如ogg连接oracle就是要c的用户。
ORA-00856 修改pga报错不能超过pga_aggregate_limit50%
回答 3
已采纳
12c新特性,使用PGAAGGREGATELIMIT参数来限制Oracle实例PGA使用内存的上限。后台进程ckpt每三秒检查一次PGA使用的内存总量,如果超过限制就采取终止会话的方式来降低PGA内存
oracle 19c 如何把cdb模式中某一个pdb恢复成单实例
回答 1
在源数据库中,使用expdp导出需要恢复的PDB。在目标数据库中,使用impdp导入PDB。在目标数据库中,使用dbmspdb.duplicatefrombackup()函数创建一个新的PDB。
rac+adg恢复时的问题
回答 3
就是两套主备的意思?初始化是怎么迁移的数据?增量数据什么方式同步的?rac作为主库是被open过没?
Centos7.9 安装 Oracle 19c RAC 报错
回答 5
已采纳
问题已解决,是CPU核数的问题。。。减少CPU核数后安装成功。
oracle 19c rac vip和csan问题
回答 1
查安装文档,有问题
ADG 备库产生gap ,如何修复
回答 4
19C确实比11G、12C进步了很多,你的方法是正解。