为什么我需要在Oracle中使用通用帐户?

时间:2013-10-18 18:46:45

标签: oracle oracle12c

为什么我需要Oracle 12c中的通用帐户?常见的方式是CDB帐户。当我使用企业管理器创建帐户表示它只创建普通帐户。我可以在那里创建一个非普通帐户吗?普通用户也会出现在我切换/连接的每个容器中。这个通用帐户访问所有可插拔数据库的目的是什么?

1 个答案:

答案 0 :(得分:1)

  

为什么我需要Oracle 12c中的通用帐户?   这个通用帐户访问所有可插拔数据库的目的是什么?

您需要一个公共帐户(普通用户)才能在CDB(容器数据库)上执行管理操作,例如更改可插拔数据库的状态,插入和拔出可插拔数据库(PDB)等等,本地用户无法执行此操作。嗯,实际上,本地用户也可以更改可插拔数据库的状态,但只有PDB连接到sysdba或sysoper。

  

我可以在那里创建一个非普通帐户(在CDB中)吗?

不可以,在根目录中无法创建非公共帐户(本地用户) - 只能在可插拔数据库(PDB)中创建和操作,并且无法访问(您无法使用它登录)CDB或其他PDBS。

Find out更多 关于共性和common and local users


修改

CDB$ROOT是root容器。 PDB$SEED只是创建可插拔数据库所需的模板。您无法在其中创建或修改对象。 PDBORCL是一个可插拔的数据库,您应该将其用于开发。

如果您尝试以非sysdba用户身份连接到已关闭的PDB,Oracle将抛出ORA-01033错误。通常,PDBs数据库默认情况下不会打开,只是挂载(除非您通过创建触发器自动执行该过程,例如,在启动CDB时为您执行此操作)并且您需要在作为公共连接时显式打开它user(具有启动/更改可插拔数据库权限的SYS或其他普通用户)并发出:

SQL> alter pluggable database <<name_of_PDB>> open;

or

SQL> startup pluggable database <<name_of_PDB>>

之后,您应该能够以普通用户或本地用户身份连接到PDB。当然,他们必须拥有适当的权限(create session)才能这样做。


编辑#2 使用系统事件(after startup on database)触发器在启动CDB时自动启动可插拔数据库。遗憾的是,没有自动启动PD的本地方式。

SQL> conn / as sysdba
Connected.

SQL> show con_name

CON_NAME                
------------------------------
CDB$ROOT            

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED 
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO 
         3 NKRASNOV                       READ WRITE NO 

此特定触发器打开一个可插拔数据库。如果您有多个PD并希望全部打开它们,则可以按如下方式修改alter语句ALTER PLUGGABLE DATABASE ALL OPEN;

SQL> create or replace trigger open_pdb
  2  after startup on database
  3  begin
  4    execute immediate 'alter pluggable database nkrasnov open';
  5  end;
  6  /

Trigger created.

SQL> shutdown

Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Database mounted.
Database opened.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED  
---------- ------------------------------ ---------- ---------- 
         2 PDB$SEED                       READ ONLY  NO 
         3 NKRASNOV                       READ WRITE NO

SQL> conn hr/hr@nkrasnov_pdb
Connected.

SQL> spool off;