MSSQL은 mysql과 oracle과 달리 DB 이름이 jdbc url에 없어도 잘 붙고 동작을 합니다.
예를 들자면, 현재 특정 웹 서비스에서 DB를 MSSQL를 쓰고 있습니다. 이 때, DB명없는 jdbc url을 가지고 있습니다.
Jdbc:jtds:sqlserver://1.1.1.1:1433;sendStringParam……
MSSQL 로 접근하는 DB 계정명을 가지고 여러 DB를 접근한다는 것을 의미하기 때문에 편하게 사용한다고 합니다.
즉, 오라클이나 mysql에서는 (특정 DB, 특정 계정)이라는 개념이 있었는데, mssql은 (특정 DB, 특정 계정) 뿐 아니라 (여러 DB, 특정 계정)의 개념이 있다는 것을 알았습니다..^^
지인들에게 물어보니. 좋은 대답을 해줍니다.
다른 RDBMS 와 비교해서 MSSQL과 SYBASE의 'DB' 개념은 물리적인 단위보다는 논리적인 성격이 강합니다.
Active Directory 기반의 인증을 지원하다보니 하나의 계정을 여러 DB에서도 사용할 수 있어야 하고, 그러다보니 MSSQL이 저런 구조를 가지게 된 것입니다. 사실 오라클도 LDAP 기반의 인증을 사용하면 마찬가지라고 합니다.
출처 : http://blog.ohmynews.com/icorea77/239068
◈ DB Link (오라클 원격DB 연결)
현재 접속되어 있는 DB에서 원격으로 다른 곳의 DB에 연결하여 사용한다.
기본적으로 오라클은 dblink를 사용하면 세션 연결이 지속 되기 때문에,
로컬DB의 연결을 끊거나, commit/rollback을 하여 세션을 끊어야 한다.
[사용방법]
CREATE [PUBLIC] DATABASE LINK <link_name>
CONNECT TO <user> IDENTIFIED BY <password>
USING '<service_name>';
[예 1] tnsnames에 원격DB 설정이 되어있는 경우
create public database link testlink
connect to scott identified by tiger
using 'testdb';
[예 2] tnsnames에 원격DB 설정이 되어있지 않은 경우
create public database link testlink
connect to scott identified by tiger
using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = TESTDB)))';
[DB Link 전체보기]
select * from all_db_links;
[사용 1] 단순조회
select * from emp@testlink;
[사용 2] 로컬DB와 원격DB의 JOIN
select t.*, s.dname
from dept s, emp@testlink t
where t.deptno = s.deptno;
[사용 3] 원격 프로시져/함수 호출
<procedure_name>@<database_link>(<parameters>);
현재 접속되어 있는 DB에서 원격으로 다른 곳의 DB에 연결하여 사용한다.
기본적으로 오라클은 dblink를 사용하면 세션 연결이 지속 되기 때문에,
로컬DB의 연결을 끊거나, commit/rollback을 하여 세션을 끊어야 한다.
[사용방법]
CREATE [PUBLIC] DATABASE LINK <link_name>
CONNECT TO <user> IDENTIFIED BY <password>
USING '<service_name>';
[예 1] tnsnames에 원격DB 설정이 되어있는 경우
create public database link testlink
connect to scott identified by tiger
using 'testdb';
[예 2] tnsnames에 원격DB 설정이 되어있지 않은 경우
create public database link testlink
connect to scott identified by tiger
using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = TESTDB)))';
[DB Link 전체보기]
select * from all_db_links;
[사용 1] 단순조회
select * from emp@testlink;
[사용 2] 로컬DB와 원격DB의 JOIN
select t.*, s.dname
from dept s, emp@testlink t
where t.deptno = s.deptno;
[사용 3] 원격 프로시져/함수 호출
<procedure_name>@<database_link>(<parameters>);
'DB' 카테고리의 다른 글
[Mysql] skip-name-resolve 옵션 (0) | 2010.06.13 |
---|---|
[Mysql] Table 백업/풀기 (0) | 2010.05.18 |
[mysql] mysql.sock 위치 확인 (0) | 2010.03.09 |
Mysql db replication 구성 (0) | 2010.02.10 |
Mysql 물리적인 서버 이동 작업 History (0) | 2010.02.10 |