如何切换到 Oracle 12+ 中的唯一 PDB?
How to switch to the only PDB in Oracle 12+?
使用 Oracle 的 vagrant boxes,您可以轻松添加 运行 post 安装的脚本,方法是将它们放在 userscripts
目录中。我想创建我的标准用户,这很容易 (CREATE USER etc...
)。但是,这些用户需要在 PDB 中创建,而不是在 CDB$ROOT 中创建。
那么,如何从连接到 CDB$ROOT 的 sys / as sysdba
切换到数据库中唯一的 PDB? PDB 的名称不应硬编码,因为它由 Vagrantfile 中的参数控制。该脚本应该 运行 在没有干预的情况下成功。
到目前为止,这段代码可以正常工作,但是很丑陋:
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;
一定有更简单的方法...
如果这确实是 "one and only" pdb,为什么要排序?难道你只需要
COLUMN pdb_name NEW_VALUE mypdb
SELECT pdb_name
FROM dba_pdbs p1
WHERE pdb_name <> 'PDB$SEED'
但由于您使用的是 vagrant 文件,您可以让脚本执行
grep ORACLE_PDB Vagrantfile | awk ...
获取 PDB 的名称,然后设置 TWO_TASK 或类似名称。
使用 Oracle 的 vagrant boxes,您可以轻松添加 运行 post 安装的脚本,方法是将它们放在 userscripts
目录中。我想创建我的标准用户,这很容易 (CREATE USER etc...
)。但是,这些用户需要在 PDB 中创建,而不是在 CDB$ROOT 中创建。
那么,如何从连接到 CDB$ROOT 的 sys / as sysdba
切换到数据库中唯一的 PDB? PDB 的名称不应硬编码,因为它由 Vagrantfile 中的参数控制。该脚本应该 运行 在没有干预的情况下成功。
到目前为止,这段代码可以正常工作,但是很丑陋:
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;
一定有更简单的方法...
如果这确实是 "one and only" pdb,为什么要排序?难道你只需要
COLUMN pdb_name NEW_VALUE mypdb
SELECT pdb_name
FROM dba_pdbs p1
WHERE pdb_name <> 'PDB$SEED'
但由于您使用的是 vagrant 文件,您可以让脚本执行
grep ORACLE_PDB Vagrantfile | awk ...
获取 PDB 的名称,然后设置 TWO_TASK 或类似名称。