/* ATTACH하는 프로시저입니다. */
ALTER PROCEDURE DB_ATTACH
@db_name sysname
AS
BEGIN
DECLARE @sql varchar(8000)
SET @sql = 'EXEC sp_attach_db ' + quotename(UPPER(@db_name)) + ', ' + quotename(@db_name) + ';'
SET @sql = @sql + 'ALTER DATABASE ' + quotename(UPPER(@db_name))
SET @sql = @sql + ' SET TRUSTWORTHY ON'
EXEC(@sql)
END
/* DETACH하는 프로시저입니다. */
ALTER PROCEDURE DB_DETATCH
@db_name sysname
AS
BEGIN
DECLARE @sql varchar(8000)
SET @sql = 'ALTER DATABASE ' + quotename(UPPER(@db_name))
SET @sql = @sql + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE'
SET @sql = @sql + ' EXEC sp_detach_db ' + quotename(UPPER(@db_name))
EXEC(@sql)
END
업무의 특성상 사용자가 DB를 지속적으로 DETATCH 하고 ATTACH하고를 반복합니다.
물론 SQL DB Engine은 사용자 PC에 설치되어 있고요.
여기저기 자문을 구하고 또 MSDN을 찾아본 결과 Detatch하고 Attach는 성공적으로 됩니다. 그러나 항상 새로 Attach된 DB에서 쿼리를 날리면 첫번째 쿼리에서 "서버로 요청을 보내는 동안 전송 수준 오류가 발생했습니다. (provider: 명명된 파이프 공급자, error: 0 - 파이프의 다른 끝에 프로세스가 없습니다.)"라는 오류가 뜨는데요. 신기하게도 두번째 쿼리에서 부터는 문제가 없습니다.
지금까지 디버깅해보면서 추측하는바로는 DB를 ATTACH하고 SELECT * FROM sys.sysdatabases 를 실행시켰을때 나오는 목록상에서 version이 NULL일때 이런문제가 발생한다는 것이고요. 첫번째 쿼리에서 실패후 다시 위의 쿼리를 날려보면 역시 version은 NULL. 그 다음 업무쿼리(두번째) 날린후 다시 확인하면 version이 611로 변경되어 있습니다. 그 이후론 잘됩니다.
Attach할때 뭔가 옵션이 빠진듯한데...
도움을 주실분 안계신가요??? ㅠ,.ㅜ 어디가서 물어봐야하나요?
|