如何切换到Oracle 12+中唯一的PDB?

如何切换到Oracle 12+中唯一的PDB?,oracle,oracle12c,pluggable-database,Oracle,Oracle12c,Pluggable Database,使用Oracle,您可以通过将安装后运行的脚本放在userscripts目录中,轻松添加这些脚本。我想创建我的标准用户,这是很容易创建用户等。。。。但是,这些用户需要在PDB中创建,而不是在CDB$ROOT中创建 那么,如何从连接到CDB$ROOT的sys/as sysdba切换到数据库中唯一的PDB?PDB的名称不应硬编码,因为它由文件中的参数控制。脚本应在没有干预的情况下成功运行 到目前为止,这个代码还在运行,但很难看: COLUMN pdb_name NEW_VALUE mypdb SEL

使用Oracle,您可以通过将安装后运行的脚本放在userscripts目录中,轻松添加这些脚本。我想创建我的标准用户,这是很容易创建用户等。。。。但是,这些用户需要在PDB中创建,而不是在CDB$ROOT中创建

那么,如何从连接到CDB$ROOT的sys/as sysdba切换到数据库中唯一的PDB?PDB的名称不应硬编码,因为它由文件中的参数控制。脚本应在没有干预的情况下成功运行

到目前为止,这个代码还在运行,但很难看:

COLUMN pdb_name NEW_VALUE mypdb
SELECT pdb_name
  FROM (
        SELECT pdb_name,
               RANK() OVER (ORDER BY CREATION_SCN) r
          FROM dba_pdbs p1
         WHERE pdb_name <> 'PDB$SEED'
       )
 WHERE r = 1;

ALTER SESSION SET CONTAINER=&mypdb; 

必须有一个更简单的方法…

如果这是唯一的pdb,为什么要订购?难道你不需要

COLUMN pdb_name NEW_VALUE mypdb
SELECT pdb_name
FROM dba_pdbs p1
WHERE pdb_name <> 'PDB$SEED'

获取PDB的名称,然后设置两个任务或类似任务。

即使名称由Vagrant文件中的参数控制,为什么这意味着您不知道名称?您的代码表明您确实这样做了,或者您知道如何找到它。使用NEW_VALUE所做的只是允许您避免键入,或许还可以使某些过程自动化,这样就不需要您的干预——这就是您这样做的原因吗?除此之外,一旦您知道pdb的名称,就可以直接连接到它。@mathguy:是的,这个脚本应该在无监督的情况下运行,而不需要干预。除此之外,我想这是一项相当常见的任务,我想为这项任务找到一个流线型的、运行良好的解决方案。你所展示的屁股丑陋的解决方案可能是你唯一的选择,这几乎肯定是最简单的。只是好奇你是如何在没有硬编码的情况下创建pdb的?你将pdb名称导出为环境变量的一部分,对吗?尝试在pdb中安装演示模式,创建新的模式它有你想要的一切,你只需通过脚本就知道了,你是对的。如果第二个数据库突然出现,代码将抛出一个错误,这是绝对可以接受的。
grep ORACLE_PDB Vagrantfile | awk ...