Oracle Database 12c HR账户的解锁/配置

来源:互联网 发布:何炅 知乎 编辑:程序博客网 时间:2024/06/11 00:04

Oracle Database 12c HR账户的解锁


P话少说,不需要解释,只要给我代码–请直接翻到文章末尾,代码会进行汇总。

由于Oracle 12c采用了多租用户环境(Multitenant Environment),所以解锁hr用户并不像之前版本那么容易。新版的Oracle分为容器数据库(CDB)可插拔数据库(PDB)两种模式。
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$SEEDORCLPDB
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 sysdbaSELECT name, con_id FROM v$pdbs;           ::此处获取到可插拔数据库的名称与idSELECT 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;