SQLServer 2005 에서 Oracle 10g 까지 의 링크 서버 를 만 들 고 이 구조 데이터베이스 데이터 변환 방안 을 실현 합 니 다.

1.새 링크 서버 

그림 1 에서'링크 서버'를 선택 하고 오른쪽 단 추 를 누 르 면'새 링크 서버'를 선택 합 니 다.그림 2 참조.관련 매개 변 수 를 설정 합 니 다.2.관련 매개 변 수 를 설정 합 니 다
"일반"옵션 에"링크 서버 이름"을 입력 하고 인터페이스 에 접근 하여 선택 하 십시오.
"Microsoft OLE DB Provider for Oracle"항목.그 중에서 제품 이름,데이터 소스,액세스 인터페이스 문자열 은 설정 한 Oracle 클 라 이언 트 가 로 컬 에서 설정 한 net 서비스 이름 을 입력 하 십시오.그림 3 참조.

'보안'항목 에서 이 보안 컨 텍스트 를 사용 하여 연결 을 만 들 고 원 격 로그 인 사용자 와 비밀 번 호 를 입력 하 십시오.즉,원 격 Oracle 서버 에 로그 인 한 사용자 와 비밀 번 호 를 입력 하 십시오.그림 4 참조.3.이성 데이터베이스 접근 구문 형식
예 를 들 어 우 리 는 링크 서버 ORAD BCONN 을 만 들 었 고 Oracle 에서 HRSOFT 사용자 아래 에 표 WEBUSER 를 만 들 었 다.그러면 우리 의 SQL 문 구 는 다음 과 같다.
--오 라 클 테이블 에 있 는 데이터 비우 기
DELETE  FROM  ORADBCONN..HRSOFT.WEBUSER
--SQL Server 에 있 는 데 이 터 를 Oracle 에 쓴다
INSERT  into  ORADBCONN.. HRSOFT. WEBUSER
SELECT * FROM WEBUSER
만약 보고 가 성공 한다 면,우리 의 데 이 터 는 이미 Oracle 에 기록 되 었 을 것 이다.
SELECT 로*FROM  ORADBCONN..HRSOFT.WEBUSER
Oracle 데이터베이스 에 데이터 가 있 는 지 확인 합 니 다.4.링크 서버 응용
A.Oracle 데이터 시트 를 조회 하 는 방식 1(이런 방식 으로 Oracle 과 SQLServer 의 데이터 형식 이 일치 하지 않 을 때 자주 오 류 를 보고 하고 속도 가 약간 느 립 니 다).
select * from [LINK2ORACLE]..[ORACLE_USER_NAME].TABLE_NAME;
서버'LINK2ORACLE'를 연결 하 는 OLE DB 액세스 인터페이스'MSDAORA'가 열 에 제공 하 는 메타 데이터 가 일치 하지 않 습 니 다.대상"CMCC"."OS2GIS_CELL'의 열'ISOPENED'(컴 파일 시 번호 20)는 컴 파일 시 130 의'DBTYPE'가 있 지만,실행 시 5 가 있다.
B.Oracle 데이터 시트 를 조회 하 는 방식 2(테스트 를 통 해 이런 방식 은 사용 하기에 원활 하고 잘못 보고 하지 않 으 며 속도 가 Oralce 에서 처럼 빠르다).
  select * from openquery(LINK2ORACLE,'select * from OracleUserName.TableName')
openquery()를 시계 로 사용 할 수 있 습 니 다.
C.예 를 들 어(Oralce 사용자 HRSOFT 의 사용자 표 WEBUSER 를 SQLServer 2005 데이터베이스 에 가 져 오기):
  select * into OS_GIS_WEBUSER from openquery(LINK2ORACLE,'select * from HRSOFT. WEBUSER)
D.더욱 편리 한 방식:동의어 생 성 을 통 해 편리 한 조회:
  CREATE SYNONYM OS_GIS_CELL FOR [ORACLELK]..[CMCC].OS_GIS_CELL;
  select * from os_gis_cell;
  select * from os_gis_cell a where a.CellName is null;
주의:Oracle 부분 과 관련 된 SQL 문장,특히[ORACLELINK].[ORACLEUSER_NAME].TABLE_NAME 는 반드시 대문자 로 써 야 합 니 다.그렇지 않 으 면 비슷 한 오 류 를 보고 할 것 입 니 다.
메시지 7314,레벨 16,상태 1,첫 번 째 줄
서버"ORACLELK"를 연결 하 는 OLE DB 액세스 인터페이스"MSDAORA"는 표"CMCC"를 포함 하지 않 습 니 다."OS2gis_CELL""。이 표 가 존재 하지 않 거나 현재 사용자 가 이 표 에 접근 할 수 있 는 권한 이 없습니다.
설정 원본:



프로젝트 계획:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.6)(PORT=1521)))(CONNECT_DATA=(SID=sa)(SERVER=DEDICATED)))
ERP:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL = TCP)(HOST = 192.168.3.25)(PORT = 1528)))(CONNECT_DATA =(SID= TJTEST)))
  (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL = TCP)(HOST = 192.168.3.25)(PORT = 1528)))(CONNECT_DATA =(SID= TJTEST)))
새로 만 든 I 의 세대 a:
delete  from XBLD_Information
INSERT INTO  XBLD_Information(job_name, num_layers, JB_PP1, JB_PC1, JB_PP2, JB_PC2, JB_PP3, JB_PC3, PP_PP1, PP_PC1, PP_PP2, PP_PC2, PP_PP3, PP_PC3, PP_PP4,PP_PC4,BM)
select * from openquery(INPLAN,'
select  mjs15.job_name, mjs15.num_layers,mjs1.MM1 JB_PP1,mjs1.MC1 JB_PC1,mjs2.MM2 JB_PP2,mjs2.MC2 JB_PC2,mjs3.MM3 JB_PP3,mjs3.MC3 JB_PC3,mjs11.MM1 PP_PP1,mjs11.MC1 PP_PC1,mjs12.MM2 PP_PP2,mjs12.MC2 PP_PC2,mjs13.MM3 PP_PP3,mjs13.MC3 PP_PC3,mjs14.MM4 PP_PP4,mjs14.MC4 PP_PC4,Substr(mjs15.job_name,5,2) BM
from
(select mjl.job_name,
        mjl.num_pcbs,  
        mjl.num_arrays,
        mjl.num_panles_,
        mjl.num_layers,
        substr(mjl.op_size_y_string_,instr(mjl.op_size_y_string_,''='')+1,length(mjl.op_size_y_string_)-instr(mjl.op_size_y_string_,''='')+1) y_사이즈
        substr(mjl.op_size_x_string_,instr(mjl.op_size_x_string_,''='')+1,length(mjl.op_size_x_string_)-instr(mjl.op_size_x_string_,''='')+1) x_size  --거지
 from   tj.my_job_list mjl
 ) mjs15,
(select *
 from
(select mjs.job_name,
        decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),1,material_name) MM1,
        decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),1,material_count) MC1
  from tj.my_job_stackup_material_count mjs
  where mjs.type_T=''Core''
  )where MM1 is not null
) mjs1,
(select  *
 from
 (select mjs.job_name,
         decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),2,material_name) MM2,
         decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),2,material_count)MC2
  from tj.my_job_stackup_material_count mjs
  where mjs.type_T=''Core''
 ) where MM2 is not null
) mjs2,
(select *
 from
  (select mjs.job_name,
          decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),3,material_name) MM3,
          decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),3,material_count)MC3
   from tj.my_job_stackup_material_count mjs
   where mjs.type_T=''Core''
  ) where MM3 is not null
) mjs3,
(select  *
 from
 ( select mjs.job_name,
        decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),1,material_name) MM1,
        decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),1,material_count) MC1
   from tj.my_job_stackup_material_count mjs
   where mjs.type_T=''Prepreg''
 )where MM1 is not null
)  mjs11,
(select *
  from (
   select mjs.job_name,
         decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),2,material_name) MM2,
         decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),2,material_count)MC2
   from tj.my_job_stackup_material_count mjs
  where mjs.type_T=''Prepreg''
  )where MM2 is not null
  ) mjs12,
  (select  *
 from
 ( select mjs.job_name,
          decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),3,material_name) MM3,
          decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),3,material_count)MC3
   from  tj.my_job_stackup_material_count mjs
   where mjs.type_T=''Prepreg''
 )
 where MM3 is not null
 ) mjs13,
 (select distinct *
  from
  (   select mjs.job_name,
             decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),4,material_name) MM4,
             decode(DENSE_RANK() over( partition by job_name  order by material_name,material_count),4,material_count)MC4
      from tj.my_job_stackup_material_count mjs
      where mjs.type_T=''Prepreg''
  ) where MM4 is not null
  ) mjs14
  where mjs15.job_name=mjs1.job_name(+)
  and mjs15.job_name=mjs2.job_name(+)
  and mjs15.job_name=mjs3.job_name(+)
  and mjs15.job_name=mjs11.job_name(+)
  and mjs15.job_name=mjs12.job_name(+)
  and mjs15.job_name=mjs13.job_name(+)
  and mjs15.job_name=mjs14.job_name(+)
')
 UPDATE XBLD_Information SET BM=b.Describe from XBLD_Information a, XBLD_BM b where a.bm=b.id

좋은 웹페이지 즐겨찾기