작성자 : 최용수
작성일 : 2010-06-08
라이센스 : 암때나 퍼가시고 출처만 적어주세요..굽신굽신
=============================================
1. 상황
SQL Server 2000에서 운영중인 DB를 2005로 업그레이드 하는 도중에 management Studio에서 해당 DB의 Table 조회가 되지 않음 .
-> Context 값이 null이 있다고 솰롸솰롸...=ㅅ= 열받는다..
2. 원인 파악
무턱대고 업그레이드를 시작한것이 문제였지만.. 그전에 관리가 안된 DB를 유지한거 자체가 더문제..
일단 하단의 박스에 있는 쿼리를 실행하였다. (M-Studio에서 Table을 선택하면 실행되는쿼리다)
SELECT
'Server[@Name=' + quotename(CAST(serverproperty(N'Servername') AS sysname),'''') + ']' + '/Database[@Name=' + quotename(db_name(),'''') + ']' + '/Table[@Name=' + quotename(tbl.name,'''') + ' and @Schema=' + quotename(SCHEMA_NAME(tbl.schema_id),'''') + ']' AS [Urn],
tbl.name AS [Name],
SCHEMA_NAME(tbl.schema_id) AS [Schema],
CAST(
case
when tbl.is_ms_shipped = 1 then 1
when (
select
major_id
from
sys.extended_properties
where
major_id = tbl.object_id and
minor_id = 0 and
class = 1 and
name = N'microsoft_database_tools_support')
is not null then 1
else 0
end
AS bit) AS [IsSystemObject],
tbl.create_date AS [CreateDate]
FROM
sys.tables AS tbl
WHERE
(CAST(
case
when tbl.is_ms_shipped = 1 then 1
when (
select
major_id
from
sys.extended_properties
where
major_id = tbl.object_id and
minor_id = 0 and
class = 1 and
name = N'microsoft_database_tools_support')
is not null then 1
else 0
end
AS bit)=0)
ORDER BY
[Schema] ASC,[Name] ASC
결과는 역시나..ㅡ.ㅡ;
첫번째 컬럼 값인 urn 값이 null로 구성된 테이블 3개가 발견되었다. (이넘들은 Schema 컬럼값도 null이었다..)
그런데 이놈들은 삭제도 안되고 object_name으로 실행하는 모든 DML / DDL들에서 참조가 안되는 현상이 발생했다.
왜그란가~~
추가적인 조사.. sys.tables 를 뒤지기 시작.. principal_id 값이 .. 이상하다!!!
존재 하지 않는 principal_id 값을 가지고 있는 테이블들이었다..
-_- 분명 2000 서버에서 난감한 스키마 (dbo가 아닌..)를 마구 사용하다 스키마 날리고 뭐 그러면서
고스트(?) 테이블로 붕떠버린 현상으로 보인다.. (2000 과 2005의 스키마의 개념자체가 워낙에 천지차이라..)
복원 하면서 기존의 principal_id를 고대로 입력하고 있다가 2005에서 Schema Base의 Role에 떡하니 걸린것...으로 보여진다..
3. 해결
principal_id ....가 존재 하지 않아서 발생하는 것이므로..임의의 스키마를 생성하여 principal_id를 유효값으로 만들었다.
당연히 그다음은 object 삭제, 임의의 schema도 삭제.. [어짜피 참조도 뭐도 안되던 넘들이었다..]
m-studio에서도 잘나오고.. 찝찝한 기분도 사라졌다..
끝.




















