우선 고려되어야 할 사항은 ORACLE INSTANCE가 두 개 이상이고 각기 다른 PLATFORM에서 운용된다는 가정 하에서 각각의 HOST NAME과 ORACLE_SID는 다르고 NLS_CHARACTER_SET은 동일하게 되어 있어야 합니다.
만약 같은 MACHINE에서 INSTANCE의 ORACLE_SID가 같다면 TNS ERROR가 발생할 것이다.
또한 미래를 위해 다른 MACHINE이라 할지라도 ORACLE_SID는 규칙에 의해 다르게 가져가는 것이 좋습니다.
그리고, NLS_CHARACTER_SET이 동일하게 되어 있지 않으면 DATA 입/출력 시 한글 데이타가 ?????로 나타날 것입니다.
그럼 환경 점검이 끝났으니 ORACLE7에서 ORACLE V6(ORACLE7의 경우도 비슷)에 있는 TABLE의 DATA를 DB LINK를 이용하여 SELECT하거나 VIEW를 작성하여 보겠습니다.
HOST NAME : HP7 - SUN7
ORACLE_SID : ORA7 - ORATEST
이라 할 때
1) HP7 에서 SUN7로 DB LINK 생성하기.
scott/tiger 로 Login
SQL*NET V1의 경우
SQL> create public database link HP7TOSUN6
connect to scott identified by tiger
using 't:SUN7:ORATEST';
(rdbms 7.3 이상은 SQL*NET v2 를 사용하십시오)
SQL*NET V2의 경우
SQL> create public database link HP7TOSUN7
connect to scott identified by tiger
using 'ORATEST';
로 하면 된다.
이때 V2인 경우의 ORATEST는 $ORACLE_HOME/network/admin directory의
tnsnames.ora file 내에 지정된 service name이다.
tnsnames.ora의 service name이 잘 setting 되어 있는지 확인하는 방법
: SQL*Plus scott/tiger@service name했을 때, SQL*Plus에 log-in되어야
합니다.
2> SUN7 에 있는 TABLE의 select 및 view(view는 필요에 따라 생성) 작성,
HP에서 작업
SQL> select * from emp@HP7TOSUN7;
SQL> create view emp_view as select * from emp@HP7TOSUN7 a
where a.deptno = 10;
3> HP7 에서 SYNONYM을 생성하여 사용하는 경우
SQL> create synonym emp for emp@HP7TOSUN7;
SQL> select * from emp;
로 한다면 간단히 분산 DB의 환경에서 사용할 수 있습니다.
select를 제외한 DML(insert, update, delete)을 하려면,
sql*plus log-in 시에 다음과 같은 option 이 display 되어야 합니다.
SQL*Plus: Release 3.3.3.0.0 - Production on Mon Jan 19 14:18:47 1998
Copyright (c) Oracle Corporation 1979, 1996. All rights reserved.
Connected to:
Oracle7 Server Release 7.3.3.4.0 with the 64-bit option - Production
Release With the distributed, ......
------------------------------------
remote 작업의 예
select * from table_name@HP7TOSUN7;
insert into table_name@HP7TOSUN7;
delete table_name@HP7TOSUN7;
...
(단 SERVER TO SERVER로 NETWORK 환경이 구축되어 있어야 하고,
listener 가 반드시 떠 있어야 합니다.)
< SQL*NET V2 SETUP (MTS) >
UNIX에서 SQL*NET V2를 사용하려면 ORACLE 인스톨 후에 다음과 같이
SETUP을 한 다음 사용하면 된다. 여기서
ORACLE HOME DIRECTORY는 /usr/oracle7
ORACLE SID는 ORA7
이라고 가정한다.
1. (단, MTS로 setting하지 않고 dedicated로 접속할 때는 이 과정은 생략하도록 한다.)
Multi-threaded server 프로세스들을 먼저 기동을 하여야 한다.
$ORACLE_HOME/dbs/initSID.ora 화일에 다음과 같은 내용을 추가하고
DB 를 다시 startup 을 한다
##########################################
# Filename : /usr/oracle7/dbs/initSID.ora
# Protocol : tcp
##########################################
mts_dispatchers="tcp,3"
mts_max_dispatchers=10
mts_servers=5
mts_max_servers=10
mts_service=ORA7
mts_listener_address="(ADDRESS=(PROTOCOL=tcp)(port=1521)
(host=hostname))"
2. tnsnames.ora 및 listener.ora 를 작성한다. 이 화일들은
/usr/oracle7/network/admin 디렉토리에 만들어야 하며 유닉스 환경변수를
TNS_ADMIN=$ORACLE_HOME/network/admin
와같이 지정하고 사용하는 것이 좋다.
#####################################################
# File name : /usr/oracle7/network/admin/listener.ora
# This configuration supports tcp
#####################################################
LISTENER =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = tcp)
(HOST = hostname)
(PORT = 1521)
)
)
STARTUP_WAIT_TIME_LISTENER = 0
CONNECT_TIMEOUT_LISTENER = 0
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = ORA7)
(ORACLE_HOME=/usr/oracle7)
)
)
#####################################################
# Filename : /usr/oracle7/network/admin/tnsnames.ora
#####################################################
TORA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = tcp)
(HOST = hostname)
(PORT=1521)
)
)
(CONNECT_DATA =
(SID = ORA7)
)
)
3. listener 프로세스를 start 한다.
$lsnrctl start
4. SQL*NET v2 를 사용하여 MTS 에 접속한다.(LOOPBACK TEST)
$ sqlplus scott/tiger@TORA
5. CLIENT에서 접속하는 경우라면 위해서 만든 tnsnames.ora 화일을 CLIENT의 $ORACLE_HOME/network/admin 디렉토리에 COPY 하기만 하면 된다.
6. 예를 들어 CLIENT가 WIN95라면 C:\ORAWIN95\NETWORK\ADMIN 디렉토리에 tnsnames.ora 화일을 COPY하면 된다. 만약 ORA-12154 에러가 발생하면 C:\ORAWIN95\NETWORK\ADMIN 디렉토리에 sqlnet.ora가 있는지 확인하고 이것을 sqlnet.old 같이 다른 이름으로 rename 한 후에 접속테스트를 해 보도록 한다. sql*plus(plus33.exe or plus33w.exe)로 접속하는 경우
다음과 같이 접속하면 된다.
USERNAME scott
PASSWORD tiger
HOST STRING TORA
* SERVER가 WINDOWS NT 경우에는 다른 부분은 UNIX와 동일하게 셋업하면 되고 단지 listener를 띄우는 방법만 다르다.
제어판 -> SERVICES 에서 ORACLE 관련 SERVICE 들을 모두 START 시켜 주면 된다.
|