我目前遇到的问题是在存储过程中无法引用链接数据库中的表。我收到了以下错误信息:
ORA-00942:表或视图不存在
以下是我在主机上(运行oracle 10g)执行的设置与远程数据库(运行oracle 11g)建立数据库链接的步骤。这些步骤是准确的,但有些名称已更改,尽管它们保持一致。
更新tnsnames.ora,添加一个新条目:
REMOTE_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)
(HOST = 10.10.10.10)
(QUEUESIZE = 20)
(PORT = 1521)
)
(CONNECT_DATA =
(SERVICE_NAME = remote_service)
)
)
以后将创建和执行存储过程的用户身份创建数据库链接:
create database link remote_link
connect to "remote_user"
identified by "remote_pass"
using 'REMOTE_DB';
证明数据库链接正常工作,通过从中进行选择来实现:select id from remote_table@remote_link;
id
--------------------------------------------------------------------------------
8ac6eb9b-fcc1-4574-8604-c9fd4412b917
c9e7ee51-2314-4002-a684-7817b181267b
cc395a81-56dd-4d68-9bba-fa926dad4fc7
d6b450e0-3f36-411a-ba14-2acc18b9c008
创建一个依赖于工作数据库链接的存储过程:
create or replace
PROCEDURE test_remote_db_link
AS
v_id varchar(50);
BEGIN
select id into v_id from remote_table@remote_link where id = 'c9e7ee51-2314-4002-a684-7817b181267b';
dbms_output.put_line('v_id : ' || v_id);
END test_remote_db_link;
在整整一天的工作时间里盯着下面的错误信息看了一个晚上后,差点让自己崩溃:
Error(10,27): PL/SQL: ORA-00942: table or view does not exist
我尝试过许多方法来解决这个问题,包括:
在创建数据库链接时,不使用引号包围用户名和密码。链接可以成功创建,但从中选择时会出现以下错误:
ERROR at line 1: ORA-01017: invalid username/password; logon denied ORA-02063: preceding line from TWS_LINK
尝试了各种大小写组合的用户名和密码,收到了与1相同的错误。
尝试使用单引号而非双引号来包围用户名和密码。收到了以下错误:
通过使用sqlplus连接到远程数据库证明我具有完全访问权限:
ERROR at line 1:
ORA-00987: missing or invalid username(s)
[oracle]$ sqlplus remote_user/remote_pass@REMOTE_DB
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Oct 20 22:23:12 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
我不确定接下来该怎么做。可能的下一步是开始查看远程数据库上的问题,也许可以尝试连接其他数据库。另一种方法是查看从主机10g到远程11g的不兼容性。