千家信息网

【Oracle12C】部署服务建立用户及建库建表中遇到的问题以及12C的一些新特性

发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,这是一篇oracle小白由于领导压迫,不堪折磨,苦苦挣扎研究所作。详细安装文档在上篇博客,安装中可能遇到的错误以及亲测可用的解决方式已给出。Oracle12C与11g版本的差异在创建用户时遇到一个问题
千家信息网最后更新 2024年11月27日【Oracle12C】部署服务建立用户及建库建表中遇到的问题以及12C的一些新特性

这是一篇oracle小白由于领导压迫,不堪折磨,苦苦挣扎研究所作。
详细安装文档在上篇博客,安装中可能遇到的错误以及亲测可用的解决方式已给出。

Oracle12C与11g版本的差异

在创建用户时遇到一个问题(我的发现都是根据遇到的问题来研究的):
问题描述:
在创建服务所需用户时提示ORA-65096:公用用户名或角色无效。
问题原因:
根据Oracle官方文档得知,12C版本创建公有用户名(CDB用户)必须以c##或C##开头,测试后发现登陆时也必须加C##用户名登陆。

CDB与PDB解释:
Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。
CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。
在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。
下面是官方文档给出的概念图:

我的理解:这个结构有点类似于docker的关系。一个管理库(CDB)来管理所有的可插拔数据库(PDB),如果你想在PDB库中创建用户是不用加c##的,但是同样这个用户也只能在这一个PDB库中使用,无法应用到其他库中。
创建公有用户的示例sql:
CREATE USER c##test IDENTIFIED BY test DEFAULT TABLESPACE test ACCOUNT UNLOCK ;
同样在做授权或登陆等操作时也必须加c##:
GRANT RESOURCE TO c##test;

附带PDB与CDB有关的一些常用SQL语句:
创建PDB空间的示例语句(需要先创建表空间文件):
create tablespace TSCREDITLOG datafile '/home/oracle/app/oracle/creditdb/CREDITLOG/TSCREDITLOG01.dbf' size 20M;

查询所有的PDB及CDB的Name:
SELECT name, pdb FROM v$services ORDER BY name;

只查看PDB库:show pdbs;
(PDB我看到的有两种状态 读写和只读 )

打开所有PDB库: alter pluggable database all open;
切换到某个PDB(容器切换):ALTER SESSION SET container=NAMEPDB;
切换到CDB:alter session set container=cdb$root;
察看现在的容器的名称:show conname;


操作中遇到的一些问题以及解决方式:

只是报错为问号或乱码:字符集不一致导致 :
运行:alter session set nls_language=american;
如果数据库提示符都为问号乱码:
需要在oracle用户下.bash_profile中添加环境变量NLS_LANG
创建表空间失败问题:
1.表空间文件夹授权有问题;
2.表空间文件夹不存在
创建表时提示创建失败(提示权限不足,没有用户等等):
检查了创建用户的脚本,在第一遍执行的时候返回的都是授权成功或者创建成功但是没有权限,所以重新执行了一遍,问题解决(问题规律-大招:很多问题都可以通过重启实例或者重新执行来解决)。
创建表空间错误ORA-65048:
在可插入数据库PDBORCL中处理当前DDL语句时出错 ORA-00959:表空间'TEST'不存在
只需要重启数据库即可解决!
Oracle数据库的启动与关闭方法
sql>shutdown abort; --一一异常关闭,但是最快的关机方式,因新装的数据库,就没有那么多顾忌。
sql>startup
可以开心的正常创建用户了~~

Navicat无法连接oracle12c问题,提示没有匹配的验证协议:
问题原因:Navicat有一个OCI.dll文件版本过低。再深入的没研究,下面直接放找到的解决方法。
需要Oracle 的二个文件:
百度云链接:http://pan.baidu.com/s/1jIfQ95G 密码:wm9l
如果没有Navicat就去百度下一个(Nacicat for oracle)
这里直接把 instantclient-basic-nt-12.1.0.2.0.zip 解压到 Navicat for Oracle 的解压目录的instantclient_10_2目录下
然后这个目录下多了instantclient_12_1 这个目录 ,然后再把instantclient-sqlplus-nt-12.1.0.2.0.zip 解压到 instantclient_12_1下
完成
最后打开Navicat for Oracle 单击 工具->选项-> OCI
这里有二个选项 参考我的路径就知道了
OCI 你的路径\instantclient_12_1.oci.dll
SQL 你的路径\instantclient_12_1.sqlplus.exe

然后新建连接,连接数据库:

搞定。

0