我正在使用Oracle SQL开发人员

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

我的DB名称是:dbo_other

我以sysdba登录了这个dbo_other。

如果我运行脚本,则表不在“桌子”下方的左面板上显示

但是,如果我通过添加“ dbo_other”来附加脚本。在每个桌子名称的前面,桌子都会显示。

这是非常乏味且耗时的。

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

我什至可以从创建的表中进行选择 *(但在左侧栏中看不到它),此外,我可以在PL/SQL开发人员中看到表。

Oracle SQL开发人员为什么要我使用dbo_other创建它。

另外,有没有办法避免为每个表添加它?也许可以在脚本之上做些事情,以便对接下来的一切生效?

有帮助吗?

解决方案

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

关于SYSDBA的有趣之处在于,它覆盖了登录的用户名部分:如果您的操作系统用户具有特权,那么您就可以。一探究竟:

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>

因此,当您运行该脚本时,您会在系统模式中创建所有这些对象。这将被证明是脖子上的巨大疼痛。希望您有一个平等和相反的归还脚本。

要正确运行脚本,您需要做的就是将其连接为dbo_other(正常 - IE没有sysdba或sysoper,毕竟是默认值)。您的脚本将在当前架构中创建表。

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

请注意,您的用户不会通过更改当前架构来获得任何其他特权:他们只能做他们当前可以做的事情。因此,对于在多个模式中创建对象之类的东西,执行用户应该是一个电源用户,具有创建任何特权(例如DBA)(但仍然不是SYSDBA)的人。

其他提示

我只是偶然发现了这个小jem,它默认情况下可以在模式/用户上执行操作,而您却没有登录AS。也就是说,默认情况下,您的选择语句等将在此新架构上进行操作,而不是您自己的架构。

Alter会话集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.>

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

正如其他人所说的那样,除非需要,否则您不应使用Sysdba,听起来很像您的脚本应根据其粗略描述作为普通用户执行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top