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 运行脚本的主要内容,如果未能解决你的问题,请参考以下文章