Oracle Database 12c HR账户的解锁
P话少说,不需要解释,只要给我代码–请直接翻到文章末尾,代码会进行汇总。
由于Oracle 12c采用了多租用户环境(Multitenant Environment),所以解锁hr用户并不像之前版本那么容易。新版的Oracle分为容器数据库(CDB)和可插拔数据库(PDB)两种模式。
可以点击此处查看CDB与PDB具体是怎么个情况。
正是由于这种新特性,使得创建用户与解锁内置用户与前版本有了很大的区别。
要解锁HR用户分为三步
1.获取到可插拔数据库的名字
与可插拔数据库相关的服务名称以及数据库并负责与客户端通信
- 要获得这些信息,我们需要登陆到sys用户数据库
sqlplus / as sysdba
- 可以通过检查根CDB容器或从conn_name的值中查询任何PDB数据库名称
使用SHOW con_name;
可以查看当前所连接的数据库。
可以看到我们默认登陆的数据库是CDB的ROOT数据库。
接下来进行查询PDB数据库的名称与连接ID,它存在于V$PDBS
数据表中。
SELECT name, con_id FROM v$pdbs;
可以看到默认有两个PDB数据库,PDB$SEED
与ORCLPDB
。
PDB$SEED是在创建时一个默认的可插拔数据库,ID是2
而ORCLPDB是安装过程中用户自行定义的,可能会有不同的名字,CON_ID为3,我们之后将会使用CON_ID进行服务名称的查询。
我们可以在v$active_services
表中找到ORCLPDB服务的名称,通常它们是一样的。
SELECT name FROM v$active_services WHERE con_id=3;
可以看到这里我的服务名为orclpdb。
2.修改tnsnames.ora文件
- 此步骤是为了更好的连接hr数据库并避免TNS-ORA错误
打开Oracle目录下的tnsnames.ora文件,我的在F:\app\product\12.2.0\dbhome_1\network\admin
路径下。
文件如这个样子,将最后的复制并修改,然后保存退出。
因为我们刚刚修改了服务,所以我们必须重启Listerner服务,以管理员权限运行CMD并重启
。
lsnrctl reload
3.再次连接到sysdba进行hr的解锁
sqlplus / as sysdba
可以看到我们仍在CDB的ROOT下,所以我们需要连接到PDBORCL下进行hr用户的解锁工作。此处我们使用ALTER SESSION
命令。
ALTER SESSION SET CONTAINER = orclpdb;
可以看到此时已经切换到可插拔数据库。
大多数的数据库执行DDL命令需要处于OPEN状态,而可插拔数据库默认处于MOUNT状态。你可以通过查看v$pdbs
表来查询它们的状态。
SELECT name, open_mode FROM v$pdbs;
可以看到,当前的ORCLPDB是处于MOUNT状态的。
所以我们首先得使其处于打开状态,使用ALTER PLUGGABLE DATABASE
命令进行打开。
ALTER PLUGGABLE DATABASE orclpdb open;
可以看到此操作以后可插拔数据库已经打开并准备好了读写。
最后,进行hr账户的解锁
ALTER USER hr IDENTIFIED BY hr ACCOUNT UNLOCK;
此命令将hr账户密码修改为hr并解锁
OK 成功解锁
尝试连接
相比于早期版本的Oracle数据库,Oracle 12c 需要你一起提供服务名称与日志中HR用户的凭据。由于我们修改了tnsnames.ora文件,所以我们可以使用conn 用户名/密码@服务名
的方式进行连接。
conn hr/hr@ORCLPDB;
成功连接!
喜欢的话就顶一下吧~
注意的点
可插拔数据库的名称勿写错。
参考资料
Oracle Database 12c Tutorial 2: How To Unlock HR schema in Oracle Database 12c:https://www.youtube.com/watch?v=F81gfUnznZY&t=62s
潇湘隐者 ORACLE 12C新特性——CDB与PDB:http://www.cnblogs.com/kerrycode/p/3386917.html
代码
此处代码均为在cmd下操作,方括号中的内容进行替换。
sqlplus / as sysdba
SELECT name, con_id FROM v$pdbs; ::此处获取到可插拔数据库的名称与id
SELECT name FROM v$active_services WHERE con_id=[查询到的ID]; ::此处查询到服务名
[此处需要修改tnsnames.ora文件,参见上面第二步]
ALTER SESSION SET CONTAINER = [查询到的服务名];
ALTER PLUGGABLE DATABASE [可插拔数据库名称] open;
ALTER USER hr IDENTIFIED BY hr ACCOUNT UNLOCK;