728x90
ALTER PROC USP_TAB_INFO (
   @DBNAME VARCHAR(100)=''
 , @TABLENAME VARCHAR(100) = ''
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @SQL VARCHAR(4000)
IF @TABLENAME=''
             set @sql='select b.name ColumnName, c.name TypeName, b.length ColumnLength
                                        , Case b.IsNullable when 1 then '''' else ''Not Null'' end Nullable
                                        , Case When g.name is null Then '''' Else ''PK'' End PKwithCidx
                                        , IsNull(d.value,'''') Caption 
                           from '+@DbName+'..sysobjects a
                                        JOIN '+@DbName+'..syscolumns b ON (a.id = b.id and a.type=''U'' and a.status > 0)
                                        JOIN '+@DbName+'..systypes c ON (b.xtype = c.xtype and c.name<>''sysname'')
                                        LEFT JOIN '+@DbName+'..sysproperties d ON  (b.id=d.id and b.colid = d.smallid)
                                        LEFT JOIN (select name,e.id,colid from '+@DbName+'..sysindexes e join '+@DbName+'..sysindexkeys f on e.id=f.id
                                                     where e.id > 10000000 and e.indid=1 and f.indid=1) g ON (g.id=b.id and g.colid=b.colid)
                           order by a.name, colorder'
ELSE
             set @sql='select   b.name ColumnName, c.name TypeName, b.length ColumnLength
                                        , Case b.IsNullable when 1 then '''' else ''Not Null'' end Nullable
                                        , Case When g.name is null Then '''' Else ''PK'' End PKwithCidx
                                        , IsNull(d.value,'''') Caption 
                           from '+@DbName+'..sysobjects a
                                        JOIN '+@DbName+'..syscolumns b ON (a.id = b.id and a.type=''U'' and a.status > 0 and a.name='''+@TableName+''')
                                        JOIN '+@DbName+'..systypes c ON (b.xtype = c.xtype and c.name<>''sysname'')
                                        LEFT JOIN '+@DbName+'..sysproperties d ON  (b.id=d.id and b.colid = d.smallid)
                                        LEFT JOIN (select name,e.id,colid from '+@DbName+'..sysindexes e join '+@DbName+'..sysindexkeys f on e.id=f.id
                                                     where e.id > 10000000 and e.indid=1 and f.indid=1) g ON (g.id=b.id and g.colid=b.colid)
                           order by a.name, colorder'
EXEC(@SQL)
SET NOCOUNT OFF
END
--USE INSIDER
--GO
--EXEC USP_TAB_INFO 'INSIDER', 'INSIDER_1' 
728x90
Posted 2006/11/30 14:11 by martian

출처 : http://blog.naver.com/cmsworld7/50006434348
http://www.rainnara.com/zero/zboard.php?id=study&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=33

링크드 서버 등록
--@Server='서버명 (IP 또는 호스트네임)'
--@srvproduct='오라클서버명'
--@provider='서비스공급자 (오라클 : MSDAORA)'
--@datasrc='TNS 명'
declare @sql varchar(1000)
set @sql = ' exec sp_addlinkedserver
@Server=''192.168.1.4'',
@srvproduct=''ORACLE2'',
@provider=''MSDAORA'',
@datasrc=''OCS'''

exec(@sql)

링크드 서버 login 매칭
exec sp_addlinkedsrvlogin
@rmtsrvname='192.168.1.4',
@useself=false,
@locallogin=null,
@rmtuser='system',
@rmtpassword='asdf123'



TNS (LISTENER) 설정

-- 시작 (프로그램)--> Oracle - OraHome92 --> Configuration and Migration Tools
  --> Net Configuration Assistant

-- (리스너 구성)
-- 리스너구성 --> 추가 --> 리스너명 입력 --> TCP --> 표준포트번호(1521)사용
  --> 다른 리스너를 구성하시겠습니까(아니오) --> 완료

-- (로컬네트 서비스 이름구성)
-- 로컬네트 서비스 이름구성 --> 추가 --> Oracle8i 이상 데이타베이스 또는 서비스
  --> 서비스이름입력 (일반적으로 DB명)
-- TCP --> 호스트이름 또는 IP 입력(포트번호 기본) --> 접속테스트수행(로그인매칭) --> 완료


링크드 서버로의 쿼리
select * from openquery([192.168.1.4], 'select * from all_users')
select * from openquery(IRON, 'select * from dba_role_privs')

MS-SQL (tb_physician2) 에 테이블 복사 ---> ORACLE 4자처리 : 대소문자 구분주의 (속도저하)
insert into tb_physician2
select * from [192.168.1.4]..SYSTEM.TB_PHYSICIAN

ORACLE 에 MS-SQL 소속 테이블 복사
insert into [192.168.1.4]..SYSTEM.TB_PHYSICIAN
select * from tb_physician2

MS-SQL (tb_physician2) 에 테이블 복사 ---> openquery 이용
  (속도향상됨 : where 절을 이용할 경우 더욱 향상됨)

insert into tb_physician2
select * from openquery([192.168.1.4], 'select * from tb_physician')

ORACLE -  INSERT
insert openquery([192.168.1.4], 'select * from tb_physician')
values ('OG', '산부인과', 'OG03', '김수찬', '20040901', '29991231', 'Y')

ORACLE - UPDATE
update openquery(IRON, 'select drcd from tb_physician where drcd=''OG01'' ')
set drcd='OG02'

ORACLE - DELETE
delete openquery([192.168.1.4], 'select * from tb_physician')

------------------------------------------------------------------------------------------

LINKED SERVER로 이기종 연결 후 저장프로시저 생성오류가 날 경우

CREATE PROC 구문전에 아래 구문을 먼저 적는다.

SET ANSI_NULLS ON
SET ANSI_WARNINGS ON

GO

CREATE PROC SP_XXX_XXXX
AS
......
......
......

위 구문이 없이 프로시저를 생성하려 하면 다음과 같은 에러메세지가 뜬다.

------------------------------------------------------------------------------------------
오류 7405: 유형이 다른 쿼리를 사용하려면 연결에 대해  ANSI_NULLS 및 ANSI_WARNINGS 옵션을
설정해야 합니다. 이렇게 하면 일관된 방식으로 쿼리를 사용할 수 있습니다. 이 옵션을 설정한 다음
쿼리를 다시 실행하십시오
-------------------------------------------------------------------------------------------


오라클과 MS-SQL 연결 또는 SQL-PLUS 에서 한글이 깨지는 경우

ORACLE 과 NT 서버의 Characterset 을 일치시킨다.

1. NT : regedit --> hkey_local_machine --> software --> oracle --> nls_lang 에서 확인

2. ORACLE : props$ 테이블의 필드를 확인 NLS 관련 세필드의 조합
   - AMERICAN_AMERICA.US7ASCII 형식
   - KOREAN_KOREA.KO16KSC5601 형식

3. 확인 되었으면 두 서버의 Characterset 을 일치시키면 됨
   - NT 의 regedit 에서 찾기를 눌러 ORACLE 소속 NLS_LANG 문자열값을 바꿔준다.
   - 다음찾기를 눌러 계속 바꿔준다 (총 3개)

728x90

create procedure psp_help_allidx7
as
/* Purpose: to list all indexes for each table
   Author : Eddy Djaja, Publix Super Markets, Inc.
   Revision: 12/07/1999 born date
*/
   
-- SET UP SOME CONSTANT VALUES FOR OUTPUT QUERY
declare @empty varchar(1)
select @empty = ''
declare @des1  varchar(35), -- 35 matches spt_values
 @des2  varchar(35),
 @des4  varchar(35),
 @des32  varchar(35),
 @des64  varchar(35),
 @des2048 varchar(35),
 @des4096 varchar(35),
 @des8388608 varchar(35),
 @des16777216 varchar(35)
select @des1 = name from master.dbo.spt_values where type = 'I' and number = 1
select @des2 = name from master.dbo.spt_values where type = 'I' and number = 2
select @des4 = name from master.dbo.spt_values where type = 'I' and number = 4
select @des32 = name from master.dbo.spt_values where type = 'I' and number = 32
select @des64 = name from master.dbo.spt_values where type = 'I' and number = 64
select @des2048 = name from master.dbo.spt_values where type = 'I' and number = 2048
select @des4096 = name from master.dbo.spt_values where type = 'I' and number = 4096
select @des8388608 = name from master.dbo.spt_values where type = 'I' and number = 8388608
select @des16777216 = name from master.dbo.spt_values where type = 'I' and number = 16777216

select  o.name,
 i.name,
 'index description' = convert(varchar(210), --bits 16 off, 1, 2, 16777216 on, located on group
    case when (i.status & 16)<>0 then 'clustered' else 'nonclustered' end
    + case when (i.status & 1)<>0 then ', '+@des1 else @empty end
    + case when (i.status & 2)<>0 then ', '+@des2 else @empty end
    + case when (i.status & 4)<>0 then ', '+@des4 else @empty end
    + case when (i.status & 64)<>0 then ', '+@des64 else
      case when (i.status & 32)<>0 then ', '+@des32 else @empty end end
    + case when (i.status & 2048)<>0 then ', '+@des2048 else @empty end
    + case when (i.status & 4096)<>0 then ', '+@des4096 else @empty end
    + case when (i.status & 8388608)<>0 then ', '+@des8388608 else @empty end
    + case when (i.status & 16777216)<>0 then ', '+@des16777216 else @empty end),
 'index column 1' = index_col(o.name,indid, 1),
 'index column 2' = index_col(o.name,indid, 2),
 'index column 3' = index_col(o.name,indid, 3)
from sysindexes i, sysobjects o
where i.id = o.id
  and indid > 0
  and indid < 255
  and o.type = 'U'
  --exclude autostatistic index
  and (i.status & 64) = 0
  and (i.status & 8388608) = 0
  and (i.status & 16777216)= 0
  order by o.name
go


exec psp_help_allidx7
go

+ Recent posts