Oracle 运行脚本

Posted

技术标签:

【中文标题】Oracle 运行脚本【英文标题】:Oracle running script 【发布时间】:2009-10-01 15:58:18 【问题描述】:

我正在使用 Oracle Sql Developer

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

我的数据库名称是:dbo_other

我以 sysdba 身份登录到这个 dbo_other。

如果我运行我的脚本,那么表格不会显示在“表格”下的左侧面板中

但是,如果我通过添加“dbo_other.”来附加脚本。在每个表名前面,然后显示表。

这是非常乏味和耗时的。

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

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

为什么oracle sql developer要我用dbo_other创建??

另外,有没有办法避免为每个表添加它?也许可以在脚本之上做一些事情,这样它就会对后面的所有内容生效?

【问题讨论】:

【参考方案1】:

您为什么使用 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)。

【讨论】:

【参考方案2】:

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

alter session set current_schema =

示例: 我 + 表1 + 表2 其他人 + 超级表1 + 超级表2

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.>

【讨论】:

【参考方案3】:

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

正如其他人所说,除非需要,否则不应使用 SYSDBA,而且根据粗略的描述,您的脚本应该作为普通用户执行。

【讨论】:

以上是关于Oracle 运行脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何在Oracle中一个接一个地运行多个脚本?

使用 Oracle Application Express 运行 SQL 脚本

从 bat 文件(oracle、批处理)运行 sql 脚本

创建可重新运行的 Oracle DDL SQL 脚本

linux下怎样运行oracle数据库建库脚本

在打算多次运行的 Oracle PL/SQL 脚本中,是不是需要清除集合?