Oracle运行脚本

时间:2009-10-01 15:58:19

标签: sql oracle oracle-sqldeveloper sysdba

我正在使用Oracle Sql Developer

我有一个巨大的脚本,可以创建表,索引,主键约束等。

我的数据库名称是:dbo_other

我以sysdba身份登录此dbo_other。

如果我运行我的脚本,则表格不会显示在“Tables”

下的左侧面板上

但是,如果我通过添加'dbo_other'来附加脚本。在每个表名前面,表格会显示出来。

这非常繁琐且耗时。

有没有办法避免这种情况?为什么他们不会在没有添加dbo_other的情况下出现在dbo_other中。在每个表名前?当我在右上角运行查询时,下拉列表中选择了dbo_other !!

我甚至可以从创建的表中执行select *(但是在左侧边栏中看不到它)此外,我可以在pl / sql developer中看到该表。

为什么oracle sql开发人员要我用dbo_other创建它。??

另外,有没有办法避免为每个表添加它?也许可以在脚本之上完成某些事情,以便它对后面的所有内容生效?

3 个答案:

答案 0 :(得分:7)

为什么要使用SYSDBA帐户登录数据库?这是非常强大的,如果您不知道自己在做什么,它将允许您对数据库造成可怕的损害。在开发环境中,你可以做的伤害是有限的,但最好在做生产之前养成良好的习惯。

AS SYSDBA的有趣之处在于它覆盖了登录的用户名部分:如果您的操作系统用户具有权限,那么您就是。作为SYS。看看:

SQL> conn apc
Enter password:
Connected.
SQL> show user
USER is "APC"
SQL> conn apc as sysdba
Enter password:
Connected.
SQL> show user
USER is "SYS"
SQL>

因此,当您运行该脚本时,您在SYS架构中创建了所有这些对象。这将被证明是颈部的巨大痛苦。我希望你有一个平等且相反的回归剧本。

要正确运行脚本,您需要做的就是以DBO_OTHER方式连接(正常 - 即没有SYSDBA或SYSOPER,这毕竟是默认值)。您的脚本将在当前架构中创建表。

如果需要在多个模式中创建对象,则无需再次注销。模式与用户不同,可以通过执行alter session set current schema = WHOEVR;来切换模式。这是一个非常方便的技巧,我在一段时间后发表了博客。 Find out more

请注意,您的用户不会通过更改当前架构获得任何其他权限:它们只能执行当前可以执行的操作。因此,对于像在多个模式中创建对象这样的事情,执行用户应该是高级用户,有人具有CREATE ANY特权,例如DBA(但仍然不是SYSDBA)。

答案 1 :(得分:1)

我偶然发现了这个小jem,它允许你默认对架构/用户执行操作,而你没有登录。也就是说,默认情况下,您的select语句等将在此新架构上运行,而不是您自己的架构。

alter session set current_schema =

实施例: 我 + table1 + table2 其他人 + SuperTable1 + SuperTable2

log in as "Myself" 
select * from SuperTable1

Error: ORA-00942: table or view does not exist

alter session set current_schema = SomeoneElse 
select * from SuperTable1 <This will work.>

答案 2 :(得分:0)

左侧面板上的“Tables”树仅包含登录用户在Oracle SQL Developer中拥有的表。如果您的脚本在另一个用户的架构中创建表,则需要单击“其他用户”旁边的+,找到相应的用户,然后单击其表上的+。

正如其他人所说的那样,除非你需要,否则你不应该使用SYSDBA,这听起来非常像你的脚本应该基于粗略的描述作为普通用户执行。