zoukankan      html  css  js  c++  java
  • 转 Oracle 12c 使用scott等普通用户的方法

    一、前言

      最近电脑上安装了oracle 12c数据库,想体验下新特性。安装完后,便像11g一样在dos窗口进行下面的操作:

    复制代码
    SQL*Plus: Release 12.1.0.2.0 Production on 星期日 8月 9 13:06:33 2015
    
    Copyright (c) 1982, 2014, Oracle.  All rights reserved.
    
    
    连接到:
    Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
    With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt
    ions
    
    SQL> alter user scott account unlock identified by tiger;
    alter user scott account unlock identified by tiger
               *1 行出现错误:
    ORA-01918: 用户 'SCOTT' 不存在
    复制代码

      神马情况!难道没有SCOTT用户?用sql查了下,确实没查到(不是没有):

    1
    2
    3
    SQL> select username from dba_users where username like 'SCOTT';
     
    未选定行

     哦,那我就自己建个吧(当时想多了o.o):

    1
    2
    3
    4
    5
    SQL> create user scott identified by tiger;
    create user scott identified by tiger
                *
    第 1 行出现错误:
    ORA-65096: 公用用户名或角色名无效

     。。。。。

    呵呵,刚刚接触12c的新手估计都会犯这样的错误吧。其实oracle 12c在结构上做出了调整,引入了CDB和PDB的概念。具体可以看下潇湘隐者的文章:

    http://www.cnblogs.com/kerrycode/p/3386917.html

    其实,我刚才的操作是在CDB中的操作,用sys默认登录的是CDB,但是如果想在CDB中创建用户(可以理解为公共用户)的话,那么必须在用户名前面加上“c##”:

    1
    2
    3
    SQL> create user c##joker identified by joker;
     
    用户已创建。

     oracle 这么做的目的是为了区分CDB的用户(前面带“c##”的用户)和PDB用户。那么问题来了,如何使用普通用户呢?网上查阅了很多资料,但都是说不清楚,今天总结下吧。

    二、使用普通用户

     其实,oracle 12c的普通用户必须在PDB下使用,PDB可以自己创建,也可以使用12c自带的。首先,查看下12c自带的PDB吧:

    复制代码
    SQL>  select con_id, dbid, guid, name , open_mode from v$pdbs;
    
        CON_ID       DBID GUID                             NAME                           OPEN_MODE
    
    ---------- ---------- -------------------------------- ------------------------------ ----------
    4071321146 E89E8DA2866E3157E043DE07A8C09238 PDB$SEED                       READ ONLY
    1930201447 E89E9418B882350CE043DE07A8C092B6 PDBORCL                        MOUNTED
    
    SQL>
    复制代码

    要想链接到PDBORCL,必须要在tns文件下加入如下内容:

    PDBORCL =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = PDBORCL)     )   )

    这样,我们就可以链接PDBORCL了。

    首先,要启动PDBORCL,先用sys登录到CDB,进行如下操作:

    SQL> alter session set container = PDBORCL;
    
    会话已更改。
    
    SQL> STARTUP

    这样我们就可以用sys登录到PDBORCL了:

    SQL> conn sys@pdborcl/admin  as sysdba
    已连接。

    我们查一下用没有SCOTT用户:

    SQL> select username from dba_users where username like '%SCOTT%';
    
    USERNAME
    --------------------------------------------------------------------
    
    SCOTT

    原来,SCOTT在PDBORCL下。

    复制代码
    SQL> alter user scott account unlock identified by tiger;
    
    用户已更改。
    
    SQL> conn scott@pdborcl/tiger
    已连接。
    SQL> select ename,empno,job from emp offset 5 rows fetch next 5 rows only;
    
    ENAME           EMPNO JOB
    ---------- ---------- ---------
    BLAKE            7698 MANAGER
    CLARK            7782 MANAGER
    SCOTT            7788 ANALYST
    KING             7839 PRESIDENT
    TURNER           7844 SALESMAN
    复制代码

    这样,我们就可以像11g那样使用像scott这样的普通用户了!

    三、自动启动PDB

     我们可以通过创建触发器的方式来自动启动PDB,用不着每次还得先用sys登录CDB,然后启动PDB。触发器代码如下:

    CREATE OR REPLACE TRIGGER open_all_pdbs
       AFTER STARTUP
       ON DATABASE
    BEGIN
       EXECUTE IMMEDIATE 'alter pluggable database all open';
    END open_all_pdbs;

    我们实验一下:

    复制代码
    SQL> CREATE OR REPLACE TRIGGER open_all_pdbs
      2     AFTER STARTUP
      3     ON DATABASE
      4  BEGIN
      5     EXECUTE IMMEDIATE 'alter pluggable database all open';
      6  END open_all_pdbs;
      7  /
    
    触发器已创建
    
    SQL> shutdown immediate
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    SQL> startup
    ORACLE 例程已经启动。
    
    Total System Global Area 1660944384 bytes
    Fixed Size                  3046320 bytes
    Variable Size             989856848 bytes
    Database Buffers          654311424 bytes
    Redo Buffers               13729792 bytes
    数据库装载完毕。
    数据库已经打开。
    SQL> conn scott@pdborcl/tiger
    已连接。
    复制代码

     总结:

          要想像11g那样使用普通用户,就得在PDB下面使用。

    ###SAMPLE 3

    感谢

    问题描述:
    客户端连接Oracle 12c的时候,报错误:

    ORA-28040: No matching authentication protocol

    问题原因:
    Oracle 12c的参数SQLNET.ALLOWED_LOGON_VERSION默认等于11。当我们使用11g JDBC之前版本的thin驱动连接的时候,就会报错。

    解决方法:
    在数据库服务器上的oracle/network/admin/sqlnet.ora文件添加一行SQLNET.ALLOWED_LOGON_VERSION=8,重启数据库,重新连接数据库,可以成功连接,问题解决。
    ————————————————
    版权声明:本文为CSDN博主「sunansheng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/sunansheng/java/article/details/45849409

  • 相关阅读:
    中断一个telnet连接
    QQ提示应用程序并行配置不正确,绿色版QQ不能运行解决方法
    新劳动合同法今起实施 正式工与派遣工同工同酬
    最详细的装修施工顺序
    最好的前端hacking备忘录——集锦
    基于vue配置axios
    Vue 实现loading进度条
    Vue 实现countDown倒计时
    使用mongoose操作mongodb数据库
    Vue项目之IE下打开页面是空白
  • 原文地址:https://www.cnblogs.com/feiyun8616/p/6026537.html
Copyright © 2011-2022 走看看