使用Oracle的vagrant boxes,您可以通过将它们放置在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;
必须有一种更简单的方法...
如果确实是“唯一的” pdb,为什么要全部排序?您不只是需要
COLUMN pdb_name NEW_VALUE mypdb
SELECT pdb_name
FROM dba_pdbs p1
WHERE pdb_name <> 'PDB$SEED'
但是由于您使用的是流浪者文件,因此可以让脚本执行
grep ORACLE_PDB Vagrantfile | awk ...
获取PDB的名称,然后设置TWO_TASK或类似的名称。