我在一个有多个SQL服务器的地方工作。在每台服务器上,我有一个用户,允许我创建和删除自己的表并访问其他表。通常,我通过在服务器之间来回创建链接来工作,但到目前为止,我还没有必要链接到我为自己创建的表。
因此,我的问题是,提供上述信息(我希望它已经足够了),如何在server2上创建一个表并通过server1中已建立的数据库链接进行访问?我一直在考虑创建数据库链接,但我确信这不是一种可行的方法,因为服务器之间已经建立了数据库链接。我认为它与授予访问权有关。
截至目前,我无法使用select * from table1@server2
这样的查询从server1访问该表,这是我通常访问远程表的方式。当我尝试这样做时,我收到通常的错误消息,指出Table or view does not exist
和preceding line from SERVER2
。
谢谢
编辑:
当我连接到server1并使用查询select * from all_tables@server2
查看所有远程表@ server2时,我在server2上创建的表是可见的。但是,我仍然无法使用上述查询select
。
答案 0 :(得分:2)
听起来远程数据库上的用户没有足够的权限(即如果您确定该表存在),解决方案取决于数据库链接的创建方式。
如果数据库链接是使用CONNECT TO someuser IDENTIFIED BY ...
子句创建的,那么您只能连接到" someuser",在您的情况下,谁无权访问该表。在这种情况下,建议为正确的用户创建新的DB链接。
否则,DB链接具有CONNECT TO CURRENT_USER
或无CONNECT BY
子句,这意味着您在server1上使用的用户名和凭据也用于server2。在这种情况下,您只需要确保用户实际上可以访问该表。
您可以在数据库链接here中阅读有关远程用户的更多信息(来自Oracle文档)。
答案 1 :(得分:0)
我找到了解决方案。答案是使用以下查询从表中选择
SELECT * FROM user2.table1@server2
其中user2是我用来在server2创建table1的用户。