2011-10-20 3 views
11

현재 저장 프로 시저 내에서 연결된 데이터베이스의 테이블을 참조 할 수없는 문제가 있습니다. (오라클 11g를 실행) 다음 Oracle : 저장 프로 시저에서 데이터베이스 링크 사용 : 테이블 또는 뷰가 존재하지 않습니다.

ORA-00942: table or view does not exist

원격 데이터베이스에 대한 데이터베이스 링크를 설정하는 내가 호스트 시스템 (실행 오라클 10g)에 수행 한 단계이다 : 나는 오류 메시지가 표시됩니다. 단계는 정확하지만 일부 이름은 일관되게 유지되었지만 일부 이름이 변경되었습니다.

  1. 업데이트의 tnsnames.ora, 새 항목 추가 :

    REMOTE_DB = 
        (DESCRIPTION = 
         (ADDRESS = (PROTOCOL = TCP) 
            (HOST = 10.10.10.10) 
            (QUEUESIZE = 20) 
            (PORT = 1521) 
         ) 
         (CONNECT_DATA = 
            (SERVICE_NAME = remote_service) 
         ) 
        ) 
    
  2. 데이터베이스 링크를 생성, 나중에 저장 프로 시저를 생성하고 실행 할 사용자로 :

    create database link remote_link 
    connect to "remote_user" 
    identified by "remote_pass" 
    using 'REMOTE_DB'; 
    
  3. 증명 데이터베이스 링크가 선택되어 작동합니다 :

    select id from [email protected]_link; 
    
    id 
    -------------------------------------------------------------------------------- 
    8ac6eb9b-fcc1-4574-8604-c9fd4412b917 
    c9e7ee51-2314-4002-a684-7817b181267b 
    cc395a81-56dd-4d68-9bba-fa926dad4fc7 
    d6b450e0-3f36-411a-ba14-2acc18b9c008 
    
  4. 작업 데이터베이스 링크에 따라 저장 프로 시저 만들기 :

    Error(10,27): PL/SQL: ORA-00942: table or view does not exist 
    

I :

create or replace 
PROCEDURE test_remote_db_link 
AS 
v_id varchar(50); 
BEGIN 
    select id into v_id from [email protected]_link where id = 'c9e7ee51-2314-4002-a684-7817b181267b'; 
    dbms_output.put_line('v_id : ' || v_id); 
END test_remote_db_link; 
  • 은 전체 작업 일 이상에 대한 다음과 같은 오류 메시지를 응시 한 후 자신의 머리를 폭발을

      등이 문제를 해결하기 위해 많은 노력을 기울였습니다.
    1. 데이터베이스 링크를 만들 때 사용자 이름과 암호를 따옴표로 묶지 마십시오. 링크는 잘 만들지 만에서 선택하면 날이 오류를 제공합니다 : 위/소문자 사용자 이름과 암호의

      ERROR at line 1: 
      ORA-01017: invalid username/password; logon denied 
      ORA-02063: preceding line from TWS_LINK 
      
    2. 시도 다양한 조합을. 1과 동일한 오류가 발생했습니다.

    3. 사용자 이름과 암호 주위에 큰 따옴표 대신 작은 따옴표를 사용하십시오.

      ERROR at line 1: 
      ORA-00987: missing or invalid username(s) 
      
    4. 증명 내가 SQLPLUS로에 연결하여 원격 DB에 대한 모든 권한이 있습니다 :

      [oracle]$ sqlplus remote_user/[email protected]_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로 진행되는 비 호환성을 살펴 보는 것입니다.

  • +1

    멋진 글을 남겨주세요. 매우 명확한. –

    +0

    선택 권한이 역할에서 비롯된 경우 이와 동일한 현상이 발생할 수 있습니다.pl/sql 프로그램에서 객체를 사용하려면 직접 부여해야합니다. http://www.dba-oracle.com/concepts/roles_security.htm –

    답변

    5

    그래, 나는이 일을 할 수 있었다.

    데이터베이스 링크를 만들 때 사용자 이름과 암호 필드 주위의 큰 따옴표가 문제를 일으키는 것으로 나타났습니다. 요약하면 :

    create database link remote_link 
    connect to "remote_user" 
    identified by "remote_pass" 
    using 'REMOTE_DB'; 
    
    1. SQL
    2. 저장 프로 시저 을 통해 조회 할 수있는 원격 데이터베이스가 컴파일 할 수 없습니다가 존재하고, 링크가 그래서 만든 경우

      , ORA-942 오류 수신

    3. 프로 시저를 컴파일 할 수 없으므로 실행할 수 없습니다.

    따옴표는 제시하지 않는 경우 :

    create database link remote_link 
    connect to remote_user 
    identified by remote_pass 
    using 'REMOTE_DB'; 
    
    1. 가 (질문에 설명) 잘못된 암호 오류
    2. 저장 프로 시저를 잡, SQL을 통해 쿼리 할 수 ​​없습니다 수있는 원격 데이터베이스 이 오류없이 컴파일 될 수 있습니다.
    3. 저장 프로 시저 은 예상대로을 실행하고 데이터베이스 링크에서 데이터를 검색하여 표시합니다.

    그래서, 원격 데이터베이스가 잘못된 암호 오류, 정보를 컴파일하고 정상적으로 실행이 동일한 연결을 사용하는 절차를 잡, SQL을 통해 querued 할 수는 없지만.

    나는 당신이 동의 할 것이라고 확신합니다. 이것은 흥미로운 사건의 상태이며, 나는 그것이 내 시나리오에서 효과가 있다는 것을 진정으로 우연히 발견했습니다. 많은 답변이 없기 때문에 해결책이라고 부를지는 못합니다.

    누군가가 Google을 통해 여기에 오면 잘하면이 답변이 유용 할 것이며 코드 실행이 가능할 것입니다.

    GC.

    +0

    여전히이 문제를 해결할 수는 없습니다 ... 11g의 암호는 대소 문자를 구별하며 따옴표로 묶는 이점이 있습니다. 이 블로그 항목에서 찾았습니다. http://pbarut.blogspot.com/2008/08/db-link-to-oracle-11g.html – Clarkey

    2

    여기에 문제가 있다고 생각합니다. 저장 프로 시저를 실행하는 사용자가 저장 프로 시저를 만든 사용자와 동일한 사용자입니까?

    "데이터베이스 링크를 나중에 저장 프로 시저를 실행하는이 될 사용자로 만듭니다"라고하셨습니다.

    데이터베이스 링크를 만드는 사용자가 저장 프로 시저를 만드는 사용자와 다른 경우 문제 일 수 있습니다.

    동일한 사용자로 저장 프로 시저 및 데이터베이스 링크를 만들거나 공용 데이터베이스 링크를 만들어보십시오.

    그런 다음 Oracle 기본값은 정의 자 권한이므로 프로 시저에 대한 실행 권한이 부여되었다고 가정하면 누구나 저장 프로 시저를 실행할 수 있습니다.

    +0

    안녕하세요, 답장을 보내 주셔서 감사합니다. 나는 동일한 사용자, 즉 데이터베이스 링크를 생성하고 동일한 사용자로 프로 시저를 생성하려고 시도하여 모든 것을했습니다. 공개 데이터베이스 링크는 좋은 생각입니다. 나는 다음에 그것을 시도 할 것이다. – Clarkey

    +0

    컴파일 또는 런타임시 ORA-942 오류가 발생합니까? (나는 컴파일 시간을 추측하고 있습니까?) –

    +0

    예, 컴파일시 ORA-942가 표시됩니다. 공용 데이터베이스 링크를 사용하여 시도했지만 동일한 오류가 발생합니다. 일반적인 데이터베이스 링크와의 차이점은 없습니다 : s – Clarkey

    4

    나는 11gR2에서 같은 문제에 직면했으며,이 포럼에서 문제를 찾는데 도움을 준 것에 감사드립니다. SQL과 프로 시저 모두에서 db 링크를 작동시키는 방법은 다음 구문을 사용하는 것입니다 (큰 따옴표로 묶은 암호 만 사용하십시오).

    create database link remote_link 
    connect to remote_user 
    identified by "remote_pass" 
    using 'REMOTE_DB'; 
    
    +0

    Btw, 11g r2를 사용하고있었습니다. – Sanjog

    관련 문제