В настоящее время у меня есть проблема, из-за которой я не могу ссылаться на таблицу в связанной базе данных в рамках хранимой процедуры. Я получаю сообщение об ошибке:
ORA-00942: таблица или представление не существует
Вот шаги, которые я предпринял на хост-компьютере (с оракулом 10g), чтобы настроить связь базы данных с удаленной базой данных (с оракулом 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.
Пробовал одинарные кавычки вместо двойных кавычек вокруг имени пользователя и пароля. Получил эту ошибку:
ERROR at line 1: ORA-00987: missing or invalid username(s)
Доказано, что у меня есть полный доступ к удаленной базе данных, подключившись к ней с помощью sqlplus:
[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.