번호   제목 닉네임 조회 등록일
8 MS-SQL lock걸린 spid 조회 및 강제종료
조인상
1757 2016-08-09
원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ MS-SQL lock걸린 spid 조회 및 강제종료 1. lock 걸린 spid 조회 exec sp_lock --> mode 에 x 로 표시된 것이 lock 2. spid 로 현재 실행중인 object 조회 dbcc inputbuffer(<SPID>) 3. SPID 강제종료 kill <SPID>
7 MSSQL DB이전시 로그인이름과 패스워드까지 동일하게 넘기기
조인상
2903 2016-06-22
원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ MSSQL SERVER A에서 백업 받은 DB를 다른 서버에 있는 MSSQL SERVER B 에 복원 시켰을때 DB 데이터와 username은 잘 넘어가지만 로그인 이름은 넘어가지 않는다. 이럴 경우 로그인이름을 생성하면 되지만, 생성하려면 기존에 있었던 로그인이름, 패스워드, 연결될 DB명을 모두 알고 있어야만 한다. Management Studio 에서 로그인이름에 대한 스크립팅 기능을 지원하지만, 보안상 패스워드는 암호화 되어있어 확인이 불가능하다. DB이전할 경우는 기존 서버의 정보를 볼 수 있다 하더라도 패스워드를 알 수 없는 경우가 생길수 있으며, 모든 정보가 날아간 DB의 복구의 경우 참조할 값이 없기 때문에 문제는 심각해 진다. 이 경우 패스워드의 평문화는 안되지만, hash된 패스워드값을 읽어내서 다른 DB에 기존 패스워드 그대로 이전하는 방법이 있다. 다음 URL을 참조한다. https://support.microsoft.com/ko-kr/kb/918992 Stored procedure 생성 다음 스크립트를 실행하여 sp_hexadecimal 및 sp_help_revlogin이라는 두 가지 Stored procedure 를 master 데이터베이스에 만든다. ================================================================================================================= USE master GO IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL DROP PROCEDURE sp_hexadecimal GO CREATE PROCEDURE sp_hexadecimal @binvalue varbinary(256), @hexvalue varchar (514) OUTPUT AS DECLARE @charvalue varchar (514) DECLARE @i int DECLARE @length int DECLARE @hexstring char(16) SELECT @charvalue = '0x' SELECT @i = 1 SELECT @length = DATALENGTH (@binvalue) SELECT @hexstring = '0123456789ABCDEF' WHILE (@i <= @length) BEGIN DECLARE @tempint int DECLARE @firstint int DECLARE @secondint int SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1)) SELECT @firstint = FLOOR(@tempint/16) SELECT @secondint = @tempint - (@firstint*16) SELECT @charvalue = @charvalue + SUBSTRING(@hexstring, @firstint+1, 1) + SUBSTRING(@hexstring, @secondint+1, 1) SELECT @i = @i + 1 END SELECT @hexvalue = @charvalue GO IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL DROP PROCEDURE sp_help_revlogin GO CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS DECLARE @name sysname DECLARE @type varchar (1) DECLARE @hasaccess int DECLARE @denylogin int DECLARE @is_disabled int DECLARE @PWD_varbinary varbinary (256) DECLARE @PWD_string varchar (514) DECLARE @SID_varbinary varbinary (85) DECLARE @SID_string varchar (514) DECLARE @tmpstr varchar (1024) DECLARE @is_policy_checked varchar (3) DECLARE @is_expiration_checked varchar (3) DECLARE @defaultdb sysname IF (@login_name IS NULL) DECLARE login_curs CURSOR FOR SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM sys.server_principals p LEFT JOIN sys.syslogins l ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa' ELSE DECLARE login_curs CURSOR FOR SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM sys.server_principals p LEFT JOIN sys.syslogins l ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name OPEN login_curs FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin IF (@@fetch_status = -1) BEGIN PRINT 'No login(s) found.' CLOSE login_curs DEALLOCATE login_curs RETURN -1 END SET @tmpstr = '/* sp_help_revlogin script ' PRINT @tmpstr SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */' PRINT @tmpstr PRINT '' WHILE (@@fetch_status <> -1) BEGIN IF (@@fetch_status <> -2) BEGIN PRINT '' SET @tmpstr = '-- Login: ' + @name PRINT @tmpstr IF (@type IN ( 'G', 'U')) BEGIN -- NT authenticated account/group SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']' END ELSE BEGIN -- SQL Server authentication -- obtain password and sid SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) ) EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT -- obtain password policy state SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']' IF ( @is_policy_checked IS NOT NULL ) BEGIN SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked END IF ( @is_expiration_checked IS NOT NULL ) BEGIN SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked END END IF (@denylogin = 1) BEGIN -- login is denied access SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name ) END ELSE IF (@hasaccess = 0) BEGIN -- login exists but does not have access SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name ) END IF (@is_disabled = 1) BEGIN -- login is disabled SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE' END PRINT @tmpstr END FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin END CLOSE login_curs DEALLOCATE login_curs RETURN 0 GO ================================================================================================================= 로그인정보가 있는 DB서버의 SQL 쿼리창에서 exec sp_help_revlogin 를 수행하면 현재 로그인이름을 생성하는 스크립트들이 생성된다. 예) CREATE LOGIN [TESTLOGINNAME] WITH PASSWORD = 0x0100B9B5BB9675F9E9507A602F78F03E750590C8A113EFB0EC1D HASHED, SID = 0xC73FD9FAB70D094EB887FFF6B823E4FC, DEFAULT_DATABASE = [TESTDB], CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF 위 스크립트를 디비를 이전하고자 하는 대상서버에서 수행하면 기존 로그인 이름과 패스워드를 그대로 이전할 수 있다. 단, 로그인이름이 생성되었다고 해도 바로 로그인이 되지는 않는다. 이 문제는 해당 DB를 사용하는 사용자의 GUID가 syslogins.sid 테이블에 있는 것과 다르기 때문이다. 이 문제를 해결하기 위한 스크립트는 다음과 같다. use TESTDB exec sp_change_users_login 'Update_One','testloginname','testloginname' 여기까지 하고 기존 로그인 이름과 패스워드로 로그인이 잘 이루어지 테스트 한다.
6 MS-SQL instancename, servername 확인하기
조인상
24273 2012-02-29
원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ select serverproperty('instancename') as instancename, serverproperty('servername') as servername;
5 MS-SQL에서 전체 테이블리스트 + 테이블당 스키마구조 긁어오는 Query
조인상
6971 2012-02-24
원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ MS-SQL에서 전체 테이블리스트 + 테이블당 스키마구조 긁어오는 Query select cl.TABLE_NAME as [TABLE], cl.COLUMN_NAME as [NAME], cl.IS_NULLABLE as [ISNULL], cl.DATA_TYPE as [TYPE], cl.CHARACTER_MAXIMUM_LENGTH as [LENGTH], kcu.COLUMN_NAME AS [KEYS], kcu.ORDINAL_POSITION as [POSITION] from INFORMATION_SCHEMA.COLUMNS cl LEFT OUTER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu on cl.TABLE_NAME = kcu.TABLE_NAME and cl.COLUMN_NAME = kcu.COLUMN_NAME and cl.ORDINAL_POSITION = kcu.ORDINAL_POSITION;
4 MS-SQL 제품 버전,레벨,에디션 확인
조인상
8333 2012-01-19
원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
3 트랜잭션 로그의 관리
조인상
15983 2010-11-11
원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 트랜잭션 로그의 관리 트랜잭션 로그를 자동증가 옵션으로 사용할 경우 무한적으로 증가할 수 있음. Disk full을 막기 위하여 트랜잭션 로그의 관리가 필요함. 1. 트랜잭션 로그 삭제 - 트랜잭션 로그의 중요도가 낮아서 백업할 필요가 없는 경우 그냥 삭제 BACKUP LOG DB명 WITH {NO_LOG|TRUNCATE_ONLY} 2. 트랜잭션 로그 백업 - 트랜잭션 로그를 백업하면 자동으로 기존 로그 내용이 정리된다. 단, 이미 늘어나 있는 트랜잭션로그 파일(?.LDF)의 사이즈가 줄어드는건 아니고, 로그의 내용만 삭제된다. BACKUP LOG DB명 TO DISK = <백업파일명> 3. 트랜잭션 로그 파일 사이즈 줄이기 - ?.LDF 파일의 실제 사이즈를 줄이고 싶을 경우 DBCC SHRINKDATABASE(DB명,TRUNCATEONLY) or BACKUP LOG DB명 WITH TRUNCATE_ONLY 트랜잭션 로그 내용이 있는 만큼의 사이즈로 줄어든다. * 트랜잭션 로그의 MAX 사이즈 제한 - 특정 용량 이상으로 늘어나길 원치 않을 경우 사이즈를 제한한다. 제한사이즈를 넘어설 경우 옛 데이터부터 자동 삭제된다. DBCC SHRINKDATABASE(DB명,1024) DB명 뒤의 단위는 MB. 4. 확인 방법 MS-SQL Server Management Studio 등에서 SQL명령어로 Use <DB명>; DBCC LOGINFO; /* 로그파일 정보 보기 */ EXEC SP_HELPFILE; /* 데이터파일,로그파일 정보 보기 */ select * from sysfiles /* 데이터파일,로그파일 정보 보기 */ dbcc sqlperf(logspace); /* 로그파일 사용량(%) 보기 */
2 MS-SQL 스크립트로 백업하기
조인상
19801 2010-11-11
원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Express Edition의 경우 개발자용 무료버전이라 Management Studio 의 경우도 Express 에디션이고 백업에 쓰이는 '관리-유지보수계획' 이 없어서 GUI 방식으로 손쉽게 자동백업을 구성할 수 없다. 이럴땐 스크립트로 만들어서 윈도우 작업스케줄러에 등록하여 해결하자. dbbackup.sql -------------------------------------------------------------------------------------------------------------- DECLARE @Path nvarchar(200) DECLARE @DBName nvarchar(100) DECLARE @FileName nvarchar(100) DECLARE @TXFileName nvarchar(100) DECLARE @FullFileName nvarchar(200) DECLARE @TXFileName nvarchar(200) DECLARE @TXFullFileName nvarchar(200) SET @Path = 'D:\backup' SET @DBName = 'master'-- 경로지정 SET @Path = @Path + N'\' + @DBName -- 파일명 생성 SET @FileName = @DBName + N'_Backup_' + CONVERT(VARCHAR(10), GETDATE(), 120) + N'_' + LEFT(REPLACE(CONVERT(VARCHAR, GETDATE(), 108),':','-'),5) SET @TXFileName = @DBName + N'_TX_' + CONVERT(VARCHAR(10), GETDATE(), 120) + N'_' + LEFT(REPLACE(CONVERT(VARCHAR, GETDATE(), 108),':','-'),5) -- 경로+파일명 SET @FullFileName = @Path + N'\' + @FileName + N'.bak' SET @TXFullFileName = @Path + N'\tx\' + @TXFileName + N'.trn' -- 백업 실행 BACKUP DATABASE @DBName TO DISK = @FullFileName WITH NOFORMAT, NOINIT, NAME = @FileName, SKIP, REWIND, NOUNLOAD, STATS = 10 BACKUP LOG @DBName TO DISK = @TXFullFileName WITH NOFORMAT, NOINIT, NAME = @FileName, NOSKIP, STATS = 10, NOFORMAT ------------------------------------------------------------------------------------------------------------- 스크립트를 실행할 때는 다음과 같이... c:\> osql -Lserver\dbname c:\> osql -S server\dbname -Usa -Ppassword -i dbbackup.sql
1 MS-SQL 2005 수동제거
조인상
8477 2010-05-11
본문 : http://www.ischo.net -- 조인상 //시스템 엔지니어 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 출처 : http://msdn.microsoft.com/ko-kr/library/aa337087(SQL.90).aspx 업데이트: 2007년 9월 15일 다음 단계에 따라 Microsoft SQL Server 2005의 인스턴스를 제거할 수 있습니다. 중요: SQL Server 인스턴스를 유지 관리 또는 업데이트하려면 서비스로 로그온할 수 있는 권한을 가진 로컬 관리자여야 합니다. 이 아티클에서는 Microsoft SQL Server 2005의 독립 실행형 인스턴스를 수동으로 제거하는 방법에 대해 설명합니다. 또한 이 항목에서 설명하는 단계에 따라 SQL Server를 다시 설치할 수 있도록 시스템을 준비합니다. SQL Server 2005 장애 조치 클러스터를 제거하는 방법에 대한 자세한 내용은 방법: SQL Server 2005 장애 조치(Failover) 클러스터 수동 제거 또는 방법: SQL Server 2005 장애 조치(Failover) 클러스터형 인스턴스 제거(설치)를 참조하십시오. SQL Server 2000 인스턴스를 수동으로 제거하는 방법에 대한 자세한 내용은 방법: 수동으로 SQL Server 2000의 기본, 명명된 또는 가상 인스턴스 제거를 참조하십시오. 이 절차에 따라 SQL Server 2005를 제거하기 전에 다음의 중요 정보를 고려하십시오. 제어판의 프로그램 추가/제거를 사용하여 SQL Server 2005를 제거하는 것이 좋습니다. 그러나 설치에 실패했거나 프로그램 추가/제거로 SQL Server 2005 인스턴스를 제거할 수 없는 경우 이 항목의 단계에 따라 인스턴스를 수동으로 제거할 수 있습니다. 이 아티클에는 레지스트리를 수정하는 방법에 대한 정보가 들어 있습니다. 레지스트리는 수정하기 전에 백업해야 하며 문제가 발생한 경우 레지스트리를 복원하는 방법을 알고 있어야 합니다. 레지스트리를 백업, 복원 및 수정하는 방법에 대한 자세한 내용은 Microsoft 기술 자료 문서의 Microsoft Windows 레지스트리 설명(Description of the Microsoft Windows registry)을 참조하십시오. 이전 버전의 SQL Server와 함께 SQL Server 2005를 실행 중인 컴퓨터에서는 SQL-DMO에 의존하는 엔터프라이즈 관리자와 다른 프로그램을 사용하지 못할 수 있습니다. 이 문제는 다음 상황에서 발생할 수 있습니다. SQL Server 2005, SQL Server 2000 및 SQL Server 7.0을 함께 설치한 후 하나 이상의 인스턴스를 제거한 경우 SQL Server 2005가 설치된 상태에서 SQL Server 2000을 설치하여 SQL Server 2000과 SQL Server 2005를 함께 설치한 경우 이 문제는 SQL Server 2005 SQL-DMO COM 라이브러리의 등록을 제거하여 발생합니다. 엔터프라이즈 관리자와 SQL-DMO 종속성을 가진 그 밖의 프로그램을 다시 사용하려면 명령 프롬프트에서 regsvr32.exe sqldmo.dll을 실행하여 SQL-DMO를 등록하십시오. 자세한 내용은 SQL Server 데이터베이스 엔진 설치 문제 해결을 참조하십시오. 필요한 최소 수준의 실제 메모리가 있는 컴퓨터에서 SQL Server 2005 구성 요소를 제거하기 전에 페이지 파일 크기를 실제 메모리 양의 2배로 유지해야 합니다. 가상 메모리가 부족하여 SQL Server 2005가 완전하게 제거되지 않을 수도 있습니다. SQL Server 2005 설치 프로그램을 실행하는 중에 SQL Server 2005 구성 요소가 컴퓨터에서 제거되지 않은 경우 다음과 같은 오류 메시지가 표시됩니다. ADD_LOCAL 속성에 지정한 구성 요소가 이미 설치되어 있습니다. 기존 구성 요소를 업그레이드하려면 template.ini를 참조하여 UPGRADE 속성을 구성 요소의 이름으로 설정하십시오. SQL Server 2005를 제거하기 전에 다음 단계를 수행하십시오. 데이터를 백업합니다. 데이터베이스를 현재 상태대로 저장할 수 있습니다. 또한 시스템 데이터베이스에 적용된 변경 사항을 저장할 수도 있습니다. 두 경우 모두 SQL Server 2005를 제거하기 전에 데이터를 백업해야 합니다. 또는 모든 데이터 및 로그 파일의 사본을 MSSQL 폴더 이외의 폴더에 저장해야 합니다. MSSQL 폴더는 제거 중에 삭제됩니다. 저장해야 하는 파일에는 다음 데이터베이스 파일이 포함됩니다. 다음 파일은 SQL Server 2005의 일부로서 설치됩니다. Distmdl.* Master.* Mastlog.* Model.* Modellog.* Msdbdata.* Msdblog.* Mssqlsystemresource.* Northwind.*(선택적으로 설치할 수 있는 데이터베이스) Pubs.* Pubs_log.* Tempdb.* Templog.* ReportServer[$InstanceName](Reporting Services 기본 데이터베이스) ReportServer[$InstanceName]TempDB(Reporting Services 기본 임시 데이터베이스) 로컬 보안 그룹을 삭제합니다. SQL Server 2005를 제거하기 전에 SQL Server 2005 구성 요소에 대한 로컬 보안 그룹을 삭제합니다. SQL Server Reporting Services 폴더를 저장하거나 이름을 변경합니다. SQL Server 설치와 Reporting Services를 함께 사용하는 경우 다음 폴더 및 하위 폴더를 저장하거나 이름을 변경합니다. <drive>\Microsoft SQL Server\Reporting Services <drive>\Microsoft SQL Server\MSSQL\Reporting Services <drive>\Microsoft SQL Server\<SQL Server instance name>\Reporting Services <drive>\Microsoft SQL Server\90\Tools\Reporting Services 참고: SSRS 구성 도구를 사용하여 설치를 구성한 경우에는 목록의 이름과 다를 수 있습니다. 또한 데이터베이스가 SQL Server를 실행하는 원격 컴퓨터에 있을 수 있습니다. Reporting Services 가상 디렉터리를 삭제합니다. Microsoft 인터넷 정보 서비스(IIS) 관리자를 사용하여 다음 가상 디렉터리를 삭제합니다. ReportServer[$InstanceName] Reports[$InstanceName] ReportServer 응용 프로그램 풀을 삭제합니다. IIS 관리자를 사용하여 ReportServer 응용 프로그램 풀을 삭제합니다. 모든 SQL Server 서비스를 중지합니다. SQL Server 2005 구성 요소를 제거하기 전에 모든 SQL Server 서비스를 중지하는 것이 좋습니다. 활성 연결로 인해 제거 작업이 실패할 수 있습니다. 적합한 권한을 가진 계정을 사용합���다. SQL Server 서비스 계정 또는 동등한 권한을 가진 계정을 사용하여 서버에 로그온합니다. 예를 들어 로컬 Administrators 그룹의 멤버 계정을 사용하여 서버에 로그온할 수 있습니다. 주의: 레지스트리를 올바르게 편집하지 않으면 시스템을 심각하게 손상시킬 수 있습니다. 따라서 레지스트리를 변경하기 전에 컴퓨터의 중요한 데이터는 백업해 두는 것이 좋습니다. 참고: 여기 나열된 제거 단계를 정확한 순서에 따라 수행해야 합니다. SQL Server 2005 인스턴스를 수동으로 제거하려면 -------------------------------------------------------------------------------- SQL Server 설치 지원 파일 구성 요소가 설치되었는지 확인합니다. 프로그램 추가/제거에서 Microsoft SQL Server 설치 지원 파일이 설치된 프로그램 목록에 표시되는지 확인합니다. 목록에 Microsoft SQL Server 설치 지원 파일이 표시되면 2단계로 이동합니다. 목록에 Microsoft SQL Server 설치 지원 파일이 없으면 계속하기 전에 이 구성 요소를 먼저 설치합니다. 이렇게 하려면 SQL Server 2005 설치 미디어에서 Servers\setup\sqlsupport.msi 파일을 두 번 클릭합니다. 이 절차의 5단계에서 Microsoft SQL Server 설치 지원 파일 구성 요소를 제거하게 됩니다. 명령 프롬프트에서 다음 명령을 실행하여 SQL Server 구성 요소를 제거합니다. 복사%ProgramFiles%\Microsoft SQL Server\90\Setup Bootstrap\ARPWrapper.exe /Remove 모든 SQL Server 구성 요소가 제거될 때까지 SQL Server 구성 요소를 한 번에 하나씩 제거합니다. 참고: 또한 프로그램 추가/제거는 ARPWrapper.exe 프로그램을 /Remove 옵션으로 실행합니다. 그러나 ARPWrapper.exe 프로그램에 대한 참조는 삭제되었을 것입니다. 다음 오류 메시지가 표시되면 이후에 나오는 "문제가 발생한 경우" 섹션을 참조하십시오. 레지스트리를 열거하지 못했습니다. SQL Server 인스턴스에 두 개 이상의 서버 구성 요소가 있는 경우, 예를 들어 데이터베이스 엔진 및 Analysis Services가 설치된 경우 설치가 실패하고 다음 오류 메시지가 표시됩니다. 데이터 저장소에서 오류가 발생했습니다. 작업: RestoreSetupParams. 이 오류는 refcount 때문에 예상됩니다. refcount는 동일한 .dll 파일 또는 동일한 .msi 파일을 사용하는 프로그램의 수를 추적하는 데 사용됩니다. 프로그램이 제거될 때 .msi 파일에 대한 refcount가 하나씩 감소합니다. 마지막 프로그램이 제거될 때 .msi 파일이 삭제됩니다. 이 경우 .msi 파일은 SQL Server 설치 지원 파일 구성 요소(SqlSupport.msi)입니다. 이 오류 메시지가 표시되면 다음 방법 중 하나를 실행하여 오류를 해결합니다. 인스턴스의 각 구성 요소를 제거하기 전에 SQL Server 설치 지원 파일 구성 요소(SqlSupport.msi)를 다시 설치합니다. 임시로 SqlSupport.msi 파일 자신에게 refcount합니다. 이 작업을 수행하려면 다음 단계를 따릅니다. Microsoft SQL Server 설치 지원 파일 구성 요소의 GUID를 구합니다. GUID를 구하려면 "문제가 발생한 경우" 섹션의 1단계와 2단계를 따릅니다. 레지스트리 편집기를 사용하여 다음 레지스트리 키를 만들거나 수정하여 다음과 같은 값을 지정합니다. 키 이름: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\Bootstrap\MSIRefCount 값: Uninstall 유형: REG_SZ 데이터: {11111111-1111-1111-1111-111111111111},{GUID} 참고 GUID는 SQL Server 지원 파일의 GUID에 대한 자리 표시자입니다. 예를 들어 영어 버전의 x86 SQL Server 지원 파일의 GUID는 다음과 같습니다. 데이터: {11111111-1111-1111-1111-111111111111},{53F5C3EE-05ED-4830-994B-50B2F0D50FCE} 문제가 발생한 경우 SQL Server 구성 요소를 제거하려고 할 때 문제가 발생한 경우 다음 단계를 따르십시오. 레지스트리 편집기를 시작하고 다음 레지스트리 키를 찾습니다. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 왼쪽 창에서 각 GUID를 클릭합니다. 클릭한 각 GUID별로 "Microsoft SQL Server 2005"가 포함된 표시 이름이 오른쪽 창에 표시되는지 확인합니다. 예를 들어 다음 이름을 찾습니다. Microsoft SQL Server 2005 Microsoft SQL Server 2005 Analysis Services Microsoft SQL Server 2005 Reporting Services Microsoft SQL Server 2005 Notification Services Microsoft SQL Server 2005 Integration Services Microsoft SQL Server 2005 도구 Microsoft SQL Server 2005 온라인 설명서 "Microsoft SQL Server 2005"가 포함된 표시 이름이 표시된 경우 왼쪽 창에서 클릭한 GUID를 기록합니다. 이전 단계에서 기록한 각 GUID에 대해 명령 프롬프트에서 다음 명령을 실행합니다. 복사start /wait msiexec /x {GUID} /l*v c:\sql_uninstall.log 참고: 이 명령에서 GUID를 이전 단계에서 기록한 GUID로 바꿉니다. 다음 오류 메시지가 표시되면 기술 지원 서비스에 문의하십시오. 데이터 저장소에서 오류가 발생했습니다. 고객 지원 담당자에게 문의하십시오. 전체 기술 지원 전화 번호 목록 및 지원 비용 정보를 보려면 지원 연락처 정보 Microsoft 웹 사이트를 참조하십시오. C:\Sql_uninstall.log 파일을 엽니다. 파일의 끝에서부터 약 15번째 행에서 다음과 비슷한 행을 찾습니다. MSI (s) (EC:F8) [12:52:18:007]: 제품 : Microsoft SQL Server 2005 도구 -- 제거가 잘 끝났습니다. 제거에 실패한 경우에는 구성 요소 이름과 GUID를 기록한 다음 Sql_uninstall.log 파일을 저장합니다. 프로그램 추가/제거를 사용하여 다음 순서대로 지원 구성 요소를 제거합니다. MSXML 6.0 파서 SQLXML4 SQL Server VSS 기록기 SQL Server 2005 이전 버전과의 호환성 SQL Server 네이티브 클라이언트 구성 요소 및 SQL Server 설치 지원 파일 구성 요소를 제외한 SQL Server 2005와 관련된 모든 구성 요소 지원 구성 요소 중 하나라도 제거하지 못한 경우 다음 오류 메시지가 표시됩니다. 필수 구성 요소가 누락되어 설치에 실패했습니다. 이 오류 메시지가 표시된 경우에는 다음 단계를 따릅니다. 레지스트리 편집기를 시작하고 다음 레지스트리 키를 찾습니다. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 왼쪽 창에서 각 GUID를 클릭합니다. 클릭한 각 GUID별로 재배포 가능한 파일의 이름과 일치하는 표시 이름이 오른쪽 창에 표시되는지 확인합니다. 재배포 가능한 파일의 이름과 일치하는 표시 이름이 표시된 경우 왼쪽 창에서 클릭한 GUID를 기록합니다. 이전 단계에서 기록한 각 GUID에 대해 명령 프롬프트에서 다음 명령을 실행합니다. 복사start /wait msiexec /x {GUID} SKIPREDISTPREREQS=1 /l*v c:\sqlredist_uninstall.log 이 명령에서 GUID를 이전 단계에서 기록한 GUID로 바꿉니다. C:\Sqlredist_uninstall.log 파일을 엽니다. 파일의 끝에서 다음과 비슷한 행을 찾습니다. MSI (s) (EC:F8) [12:52:18:007]: 제품 : Microsoft SQL Server 2005 이전 버전과의 호환성 -- 제거가 잘 끝났습니다. 제거에 실패한 경우에는 구성 요소 이름과 GUID를 기록한 다음 Sqlredist_uninstall.log 파일을 저장합니다. 다른 모든 단계를 성공한 경우 프로그램 추가/제거를 사용하여 SQL Server 네이티브 클라이언트 구성 요소를 제거합니다. SQL Server 구성 요소가 설치되어 있는 경우에는 SQL Server 네이티브 클라이언트 구성 요소를 제거하지 마십시오. 다른 모든 단계를 성공한 경우 프로그램 추가/제거를 사용하여 SQL Server 설치 지원 파일 구성 요소를 제거합니다. 이러한 단계를 수행한 후 SQL Server 인스턴스와 관련된 모든 구성 요소 및 파일이 제거되지 않은 경우 기술 지원 서비스에 문의하십시오. 전체 기술 지원 전화 번호 목록을 보려면 Microsoft 도움말 및 지원 웹 사이트를 참조하십시오. 참고 항목 -------------------------------------------------------------------------------- 작업 방법: SQL Server 2005 설치 로그 파일 읽기 개념 방법: SQL Server 2005 설치 로그 파일 보기 도움말 및 정보 SQL Server 2005 지원 받기 커뮤니티 콘텐츠 프로필(내 정보) 관리 | 법적정보 | MSDN 최신 뉴스레터 &copy; 2010 Microsoft Corporation. 모든 권리 보유. 사용약관 | 상표 | 개인정보취급방침 및 청소년보호정책 | 사용자 의견단순 보기에 대한 사용자 의견x 단순 보기는 스크립트를 사용하지 않는 환경(loband)을 기반으로 사용자가 요청한 검색란 및 선택한 기본 코드 언어를 추가하여 만들어집니다. 검색란을 원하십니까? 예 아니요 탭으로 구분된 코드 블록을 원하십니까? 예 아니요 이 항목이 얼마나 유용했습니까? 기타 의견 보내기