상세 컨텐츠

본문 제목

[Oracle] 다른 DB에 있는 테이블 값 쓰기 (DB Link)

개발/Database

by 대충고양이짤 2013. 11. 14. 16:03

본문

문제 상황

Oracle에서 생성한 DB는 2개. web 부분과 core 부분을 분리하여 쓰고 있다. 

하지만 구조 문제로 web db값 쿼리 시 core db의 데이터를 끌어다가 쓰는 부분이 많다.

MySQL에서는 그냥 "coreDB.testTable" 이라는 형태로 바로 가져올 수 있었는데, oracle은 아래와 같은 에러가 뜨면서 그게 되지 않았다.



에러 코드

### Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00942: 테이블 또는 뷰가 존재하지 않습니다




문제 해결

DB Link 라는 기능을 사용해서, web db에서 core db 값을 가지고 오도록 수정했다.


0.문제 코드

<select id="getDatabaseInfo" parametertype="java.lang.String" resultmap="DatabaseInfo">

SELECT

a.ID,

a.TYPE,

b.JOB,

c.SCHOOL,,

c.USER_NAME

FROM NON_INFO a, JOB_INFO b, core.USER_INFO c <!-- c 값에서 에러 발생! -->

WHERE a.ID= #{id} AND a.ID= b.BID AND a.ID= c.CID

</select>



1.tnsnames.ora 파일 수정

파일 위치 : $ORACLE_HOME/NETWORK/ADMIN

$ORACLE_HOME은 PC 설정마다 다르겠지만, 나는 c:\oracle\product\(version)\dbhome 이었다.


web = 

    (DESCRIPTION = 

        (ADDRESS = (PROTOCOL = TCP)(HOST = TESTPC)(PORT = 1001))

        (CONNECT_DATA = 

            (SERVER = DEDICATED)

            (SERVICE_NAME = web)

        )


        //추가한다

        (CONNECT_DATA = 

            (SID = core)

        )

    )


core = 

    (DESCRIPTION = 

        (ADDRESS = (PROTOCOL = TCP)(HOST = TESTPC)(PORT = 1001))

        (CONNECT_DATA = 

            (SERVER = DEDICATED)

            (SERVICE_NAME = core)

        )

)



2.DB Link 설정 (DBA 권한이 있는 계정 사용)


CREATE DATABASE LINK testdbconn
CONNECT TO testuser
IDENTIFIED BY "testpwd"
USING 'core'


3.쿼리 변경

테이블@DBLink명


<select id="getDatabaseInfo" parametertype="java.lang.String" resultmap="DatabaseInfo">

        SELECT

                a.ID,

                a.TYPE,

                b.JOB,

                c.SCHOOL,,

                c.USER_NAME

        FROM    NON_INFO a, JOB_INFO b, USER_INFO@testdbcon c <!-- c 값을 변경 -->

        WHERE   a.ID= #{id} AND a.ID= b.BID AND a.ID= c.CID

 </select>



4.기타 커맨드

DB Link 확인 : SELECT * FROM ALL_DB_LINKS; 

DB Link 삭제 : DROP DATABASE LINK DBLink명;



참고 사이트



관련글 더보기

댓글 영역