반응형
마스터 데이터베이스에 기록 된 데이터베이스 소유자 SID가 데이터베이스 소유자 SID와 다릅니다.
tSQLt를 기존 데이터베이스에 설치하려고하면 다음 오류가 발생합니다.
master 데이터베이스에 기록 된 데이터베이스 소유자 SID가 ''데이터베이스에 기록 된 데이터베이스 소유자 SID와 다릅니다. ALTER AUTHORIZATION 문을 사용하여 ''데이터베이스의 소유자를 재설정하여이 상황을 수정해야합니다.
이 문제는 백업에서 복원 된 데이터베이스와 데이터베이스 소유자의 SID가 마스터 데이터베이스에 나열된 소유자 SID와 일치하지 않을 때 발생할 수 있습니다. 다음은 오류 메시지에서 권장되는 "ALTER AUTHORIZATION"문을 사용하는 솔루션입니다.
DECLARE @Command VARCHAR(MAX) = 'ALTER AUTHORIZATION ON DATABASE::[<<DatabaseName>>] TO
[<<LoginName>>]'
SELECT @Command = REPLACE(REPLACE(@Command
, '<<DatabaseName>>', SD.Name)
, '<<LoginName>>', SL.Name)
FROM master..sysdatabases SD
JOIN master..syslogins SL ON SD.SID = SL.SID
WHERE SD.Name = DB_NAME()
PRINT @Command
EXEC(@Command)
이것을 tSQLt.class.sql 스크립트의 맨 위에 추가했습니다.
declare @user varchar(50)
SELECT @user = quotename(SL.Name)
FROM master..sysdatabases SD inner join master..syslogins SL
on SD.SID = SL.SID
Where SD.Name = DB_NAME()
exec('exec sp_changedbowner ' + @user)
데이터베이스에 아래 스크립트를 적용하면 오류가 발생합니다.
EXEC sp_changedbowner 'sa'
ALTER DATABASE [database_name] SET TRUSTWORTHY ON
Necromaning :
SQL-Server 2000보기 (더 이상 사용되지 않음)를 사용하지 않으려면 다음을 사용하십시오.
-- Restore sid when db restored from backup...
DECLARE @Command NVARCHAR(MAX)
SET @Command = N'ALTER AUTHORIZATION ON DATABASE::<<DatabaseName>> TO <<LoginName>>'
SELECT @Command = REPLACE
(
REPLACE(@Command, N'<<DatabaseName>>', QUOTENAME(SD.Name))
, N'<<LoginName>>'
,
QUOTENAME
(
COALESCE
(
SL.name
,(SELECT TOP 1 name FROM sys.server_principals WHERE type_desc = 'SQL_LOGIN' AND is_disabled = 'false' ORDER BY principal_id ASC )
)
)
)
FROM sys.databases AS SD
LEFT JOIN sys.server_principals AS SL
ON SL.SID = SD.owner_sid
WHERE SD.Name = DB_NAME()
PRINT @command
EXECUTE(@command)
GO
또한 이상한 이름의 데이터베이스 또는 사용자에 대한 버그를 방지하고 연결된 사용자가없는 경우 버그를 수정합니다 (sa 로그인 사용).
이 문제도 발생했고 대상 데이터베이스의 소유자가 마스터 데이터베이스에 존재하지 않는다는 것을 발견했습니다. 해당 사용자를 master 데이터베이스에 매핑하면 문제가 해결되었습니다.
반응형
'IT TIP' 카테고리의 다른 글
웹 브라우저에 PDF 표시 (0) | 2020.10.20 |
---|---|
파일이 링크되는 아키텍처가 아닌 아카이브 용으로 빌드되었습니다 (i386). (0) | 2020.10.20 |
Rails 4 before_action, 호출 된 메소드에 매개 변수 전달 (0) | 2020.10.20 |
Android AppCompat 21 Elevation (0) | 2020.10.20 |
Angular 2 사이트에서 브라우저 캐시를 방지하는 방법은 무엇입니까? (0) | 2020.10.20 |