0

我想在脚本文件中创建一个带有 oracle 变量的 oracle 用户,而不是 PL/SQL 客户端。

像这样的东西:

define var DBUSERNAME = 'AAA';

CREATE USER '&DBUSERNAME' PROFILE "DEFAULT" IDENTIFIED BY "pwd123" DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK
BEGIN
DBMS_WM.GrantSystemPriv('ACCESS_ANY_WORKSPACE', '&DBUSERNAME', 'NO');
END;

GRANT ADMINISTER ANY SQL TUNING SET TO '&DBUSERNAME'
GRANT ADMINISTER DATABASE TRIGGER TO '&DBUSERNAME'
BEGIN
dbms_resource_manager_privs.grant_system_privilege(privilege_name=>'ADMINISTER_RESOURCE_MANAGER', grantee_name=>'&DBUSERNAME', admin_option=>FALSE);
END;

GRANT ADMINISTER SQL TUNING SET TO '&DBUSERNAME'
GRANT ADVISOR TO '&DBUSERNAME'
...
4

1 回答 1

0

对于 DDL 调用,用户名不应包含在引号中:

define var DBUSERNAME = 'AAA';

CREATE USER &DBUSERNAME PROFILE "DEFAULT" ...

它可以用引号括起来,但我建议您仅在确定名称将设置为大写以避免将来出现问题时才这样做 - 最好跳过引号以避免这种情况。create(只要您没有任何具有奇怪名称的东西,您实际上也不需要在呼叫中使用双引号引起的配置文件、密码等,但是get_ddl为了安全起见,实用程序总是包含它们)。尽管如果它们无论如何都不是大写的,那么过程调用可能无法识别该名称。

GrantSystemPriv脚本中唯一需要单引号的地方是对and的调用grant_system_privilege,其中您将字符串作为参数传递。

您还缺少 DDL 语句后的分号,以及/匿名 PL/SQL 块后的终止符:

GRANT ADMINISTER DATABASE TRIGGER TO &DBUSERNAME;

BEGIN
    dbms_resource_manager_privs.grant_system_privilege(
        privilege_name=>'ADMINISTER_RESOURCE_MANAGER',
        grantee_name=>'&DBUSERNAME',
        admin_option=>FALSE);
END;
/

等等

于 2012-12-10T09:45:03.003 回答