我正在使用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创建它。??
另外,有没有办法避免为每个表添加它?也许可以在脚本之上完成某些事情,以便它对后面的所有内容生效?
答案 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,这听起来非常像你的脚本应该基于粗略的描述作为普通用户执行。