Не удается получить доступ к таблице в оракуле после создания dblink

Я пытаюсь создать dblink в оракуле, но он показывает мне ошибку.

У меня есть база данных orcl1, и я хочу подключиться к другой базе данных etlsr, которую я создал следующей базой данных.

Внутри этой базы данных etlsr я создал простую таблицу с именем человека внутри sys и вставил данные.

Теперь я снова подключаюсь к orcl1 и хочу подключиться к базе данных etlsr, но этого не произошло, как я ни пытался

select * from person@ETLSR;

Но это выдало мне ошибку:

                  *
Error at line 1
ORA-02019: connection description for remote database not found

Итак, я думаю создать ссылку на базу данных, поэтому я попытался :(Я пробовал это из orcl1)

CREATE DATABASE LINK sales 
    CONNECT TO sys IDENTIFIED BY ashwin
    USING 'SALES';

Я добавил в файл tnsname как:

SALES =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = SALES_PRD)
    )
  ) 

Итак, когда я попытался:

 select * from person@SALES;

Я получил ошибку:

ORA-12154: TNS:could not resolve the connect identifier specified

Почему появляется эта ошибка? Любое разрешение для этого творения dblink? Могу ли я получить доступ к таблицам другой базы данных без использования dblinks?

Tnsnames.ora

# tnsnames.ora Network Configuration File: E:\oracle\app\AshwinPC\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

TEST=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.1.6)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

sqlnet.ora

# sqlnet.ora Network Configuration File: E:\oracle\app\AshwinPC\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.

# This file is actually generated by netca. But if customers choose to 
# install "Software Only", this file wont exist and without the native 
# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

person Random guy    schedule 30.01.2020    source источник
comment
это tnsnames, которые вы показываете, расположены ли они на сервере базы данных, на котором размещен «orcl1»? Помните, что со ссылкой на базу данных база данных, использующая ссылку, действует как клиент для другой базы данных, поэтому конфигурация, связанная с клиентом (например, sqnet.ora и tnsnames.ora), должна быть на этой машине, а не на вашей рабочей станции.   -  person EdStevens    schedule 30.01.2020
comment
Я использую обе эти базы данных на своем ПК. нельзя ли создать fblink на том же ПК?   -  person Random guy    schedule 30.01.2020
comment
Да, вполне возможно иметь несколько баз данных на одном компьютере со ссылками между ними. Я просто пытался убедиться, что вы понимаете, что «клиент», выполняющий поиск в tnsnames, на самом деле является самой базой данных orcl1, и поэтому вам нужно разрешить это при поиске tnsnames. Покажите нам содержимое sqlnet.ora и значение параметра 'db_domain'. Они влияют на поиск вещей в tnsnames.ora.   -  person EdStevens    schedule 30.01.2020
comment
хорошо, я добавил tnsnames.ora и slqnet.ora   -  person Random guy    schedule 30.01.2020
comment
@Randomguy - у tnsnames.ora, который вы указали, нет записи для SALES? Запись, которую вы показали отдельно, похоже, тоже имеет неправильное имя службы (не etlsr), но это приведет к другой ошибке, если это будет единственная проблема.   -  person Alex Poole    schedule 30.01.2020


Ответы (1)


Говоря о том, что у вас есть несколько баз данных на одном компьютере (и, возможно, какое-то другое программное обеспечение Oracle), обратите внимание, что большинство из них имеют свой собственный файл TNSNAMES.ORA. Если вы не обращаете внимания на то, что делаете, возможно, вы используете неправильный файл. Чтобы все работало, вам придется поддерживать все эти TNSNAMES.ORA файлы, что является утомительной работой.

Поэтому создайте переменную среды TNS_ADMIN, которая будет указывать на какой-то каталог (даже не обязательно быть частью каталогов \oracle\, например, c:\my_ora_lib). Поместите туда одну копию файла TNSNAMES.ORA и убедитесь, что он содержит ссылки на ВСЕ используемые вами базы данных.

Таким образом, вы заставите каждый программный продукт Oracle использовать именно этот TNSNAMES.ORA файл.


Поскольку ссылка на базу данных создается «правильно», это мало что значит. Вы можете сделать это для любой несуществующей базы данных, но вы не сможете ее использовать:

SQL> create database link dbl_wrong
  2  connect to asfasdfj
  3  identified by asldfkj234l
  4  using 'laskjfoiwe';

Database link created.

SQL> select * from dual@dbl_wrong
  2  /
select * from dual@dbl_wrong
                   *
ERROR at line 1:
ORA-12154: TNS:could not resolve the connect identifier specified


SQL>

Поэтому убедитесь, что вы использовали реально существующие логин, пароль и базу данных.

person Littlefoot    schedule 30.01.2020