我有一个拥有3个用户的oracle数据库(user1 / user1,user2 / user2,user3 / user3) 我在3个用户中拥有相同数量/结构的表。
我的问题是:当我想在user1中更新例如我的table1时,我想更新user2和user3中的同一个table1以便更新它们, 我想执行我的脚本一次,无需登录其他用户并执行相同的脚本,因为我将有其他用户(4和5),这将花费大量时间在所有用户中执行一个脚本。
我想知道是否有工具或技术可以为多个用户执行一次脚本。
提前致谢。
答案 0 :(得分:2)
您可以使用SQLPlus构建一个脚本,每个用户运行一次脚本。 假设您有这样的脚本:
<强> script.sql 强>:
select count(1) from obj;
并且您希望为两个用户运行它;您可以构建如下的脚本:
<强> scriptLauncher.sql 强>:
conn alek/****@xe
@d:\script
conn hr/****@xe
@d:\script
结果:
SQL> @d:\scriptLauncher
Connected.
COUNT(1)
----------
15
Connected.
COUNT(1)
----------
35
当然,这意味着您必须将密码存储在纯文本文件中,这可能存在安全风险。
答案 1 :(得分:1)
如果您的脚本只有DML操作
,请尝试此操作SET SERVEROUTPUT ON
DECLARE
TYPE my_users_type IS VARRAY (5) OF VARCHAR (256);
my_users my_users_type;
BEGIN
my_users := my_users_type ('USER1', 'USER2', 'USER3'); --your users
FOR i IN my_users.FIRST .. my_users.LAST LOOP
EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA =' || my_users (i);
@D:\yourscript.SQL; --your script with path
END LOOP;
end;
/
yourscript.SQL应该只包含由分割的DML命令; 没有其他的。 或者你可以修改它 - 创建一个过程有字符串参数。参数将是单个DML命令,它将在循环中为所有用户执行。
或只是使用
ALTER SESSION SET CURRENT_SCHEMA = USER1
@D:\yourscript.SQL;
ALTER SESSION SET CURRENT_SCHEMA = USER2
@D:\yourscript.SQL;
ALTER SESSION SET CURRENT_SCHEMA = USER3
@D:\yourscript.SQL;
脚本yourscript.SQL没有限制,除了在DML操作中不使用模式名称作为前缀
P.S。执行用户应该有足够的权利。
答案 2 :(得分:0)
我有一个文件夹,我有
OR
使用对所有其他3具有权限的用户运行它,并对脚本进行个性化设置,以便为每个脚本运行。