相信可能有很多用oracle数据库做项目数据库的同学们都多多少少有遇到这个错误。上网搜索的时候,大部分的答案都是需要在建库时加前缀“C##”,或者是修改可插拔数据库PDB的状态等。这些答案可能解决了大多数人的问题,但像我们本身使用多种类型数据库的人来说,习惯就容易让我们与正确答案迷失方向。
首先我遇到这个问题的起始需求是:建一个数据库。
使用的语句是:Create database KG;
获得的结果:
ORA-01501: CREATE DATABASE 失败
ORA-01100: 数据库已装载
后来我分析了一下为什么会产生这个错误,按理来说,这个建库语句是没有语法问题的,后来我便从错误代码ORA-01501开始分析,发现很多人出现了这个问题。比较大众的说法是oracle自12C版本开始后 ,有了PDB和CDB的概念,也就是多租户模式概念,从oracle的官网也可以得知这个概念。简洁的来说,CDB和PDB之间的关系可以类比于操作系统中的容器和应用程序的关系。CDB就像一个操作系统,可以容纳多个PDB,每个PDB就像一个独立的应用程序,可以在CDB中运行、管理和维护。oracle12C后的版本为了支持多租户的架构,引入了“C##”前缀创建用户,用以区别普通用户与容器数据库的区别~为什么是“c##”的格式,还因为在Oracle 12C之前,用户的名称必须以字母开头,并且不能以"#"字符开头。所以也有这个原因。
解决方案:可以直接用创建用户的方式创建数据库。
For example:create user c##GZTEST02;
试试能不能正常建表:
可以啦~问题正常解决。在这里,建立了一个公共用户相当于建立了一个数据库~我觉得这样好理解。至于PDB和PDB的区别和一些查询权限等的区别,有兴趣的同学可以留言~我出一期比较精细的,或者后期放在后台自取PDF。
当然,个人系统差异原因,不是所有的都是这个原因,只能作为参考。
我觉得解决问题比较主要的还是对概念的理解:
- oracle12C和之前版本的区别 (PDB 和 CDB 的区别)c##
- 建表语句的习惯 create database xxx 变更为 create user ***
我的公众号是 : 会用数据库 会经常发表一些关于数据库bug解决 及 理论实践的文章 如果这篇文章能帮到你 欢迎关注我的公众号噢!!谢谢
标签:01501,CDB,01100,数据库,区别,PDB,ORA From: https://blog.51cto.com/u_16248023/7372006