0

我正在使用 Oracle Sql Developer

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

我的数据库名称是:dbo_other

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

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

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

这是非常乏味和耗时的。

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

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

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

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

4

3 回答 3

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;。这是一个非常方便的技巧,我在一段时间前把它写在了博客上。了解更多

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

于 2009-10-01T16:07:11.733 回答
1

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

更改会话集 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.>
于 2010-09-13T14:06:47.643 回答
0

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

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

于 2009-10-01T16:21:07.500 回答