SP_MSFOREACHTABLE 'sp_changeobjectowner ''?'' , ''dbo'''
전체 테이블 소유자 변경
 
EXEC sp_changeobjectowner 'TableName', 'dbo'
테이블 하나 소유자 변경

Linked Server를 구성하여
Table Select는 되지만 프로시저 호출을 하면 RPC 오류가 떨어질때
아래와 같이 조치한다.



Linked Server의 속성 > 서버옵션 > RPC내보내기 --> True



use master
go
Backup log [db명] with truncate_only
go

use [db명]
go
dbcc shrinkfile ([db로그명], 1)
go

임시테이블을 사용하고 난 후에
예외처리부분에서 사용하면 유용하다.


-- OBJECT_ID() 확인후 있으면 테이블 삭제
IF OBJECT_ID('tempdb..#tblTemp') IS NOT NULL
    drop table #tblTemp


-- 확인
Select table_catalog, table_schema, table_name, table_type
from tempdb.information_schema.tables
where table_name like '#temptable%'

-- tempdb.sys.objects
select *
from tempdb.sys.objects
where name like '#aaa%'

- 원인 : MSSQL 2005 64bit에서 32bit의 SQL2000이나 SQL7.0으로 링크드 서버 연결할 때

 

- 서버환경

  원격지 : Microsoft SQL Server 2005 Standard Edition (64-bit)

  대상 : Microsoft SQL Server 2000 Standard Edition (32-bit) 

 

- 에러메시지

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

연결된 서버 "ㅌㅌGameLog1"의 OLE DB 공급자 "SQLNCLI"이(가) 메시지 "지정되지 않은 오류입니다."을(를) 반환했습니다.
연결된 서버 "ㅌㅌGameLog1"의 OLE DB 공급자 "SQLNCLI"이(가) 메시지 "이 작업을 완료하는 데 필요한 저장 프로시저가 서버에 없습니다. 시스템 관리자에게 문의하십시오."을(를) 반환했습니다.
메시지 7311, 수준 16, 상태 2, 줄 1
연결된 서버 "ㅌㅌGameLog1"에 대한 OLE DB 공급자 "SQLNCLI"의 스키마 행 집합 "DBSCHEMA_TABLES_INFO"을(를) 가져올 수 없습니다. 공급자가 인터페이스를 지원하지만 이 인터페이스를 사용하면 오류 코드가 반환됩니다.
----------------------------------------------------------------------------------------------------------------

 

- 참고문헌

http://support.microsoft.com/kb/906954/ko

 

 

1. 위와같이 2005 64비트에서 2000 32비트로 링크드서버를 통해서 데이터를 끌어올 때 에러를 발생을 합니다.

 

2. 32비트 머신에서 '실행'에 cmd를 입력해서 윈도우커맨드창을 엽니다.

윈도우 커맨드창에 아래와 같이 입력합니다.

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

osql -E -S "localhost" -i "C:\Program Files\Microsoft SQL Server\MSSQL\Install\instcat.sql"

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

원본

osql -E -S <LinkedServerName> -i <Location>\instcat.sql

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

 

 

3. 그러면 엄청난 숫자가 마구마구 나오고 마지막에

instcat.sql completed successfully.

가 입력이 되면서 끝이 납니다.

 

4. 그럼 아까 실행했던 원격문을 다시 실행하면 정상적으로 가져올 수 있는것을 확인할 수 있습니다.

 

Select
    a.Name,
    dependObjectType = Case c.xType When 'U' Then 'Table' When 'P' Then 'Procedure' When 'TF'
          Then 'Function' End,
    dependObject = c.Name
From
    sysobjects a
        Join (Select id,depid From sysdepends group by id,depid) b On a.id = b.id
        Join sysobjects c On b.depid = c.id
Where
    a.xtype = 'P' and left(a.name,2) <> 'dt'
        and a.name like '%프로시저명%'
Order By a.Name,dependObjectType


SELECT *
FROM dbo.sysobjects
where id in (select ID from dbo.syscomments where text like '%객체명(테이블명 등)%')

+ Recent posts