세이박스

SQL 2000 Server 서비스 팩3,4 설치시 '스크립트 실행 중 오류 발생'

데이타베이스

SQL 2000 Server 서비스 팩3,4 설치시 오류 대처방법

스크립트 실행 중 오류 발생 '80sp1-tools.sql (1)'



1. 쿼리분석기로 SQL Server 에 접속한다.


2. DBCC CHECKDB('dbname', NOINDEX) 로 지정한 데이터베이스에서 모든 개체의 할당과 구조적 무결성을 검사한다.

NOINDEX - 시스템 테이블이 아닌 테이블의 클러스터되지 않은 인덱스를 검사하지 않도록 지정한다. NOINDEX는 사용자 정의 테이블의 클러스터되지 않은 인덱스를 검사하지 않으므로 전체 실행 시간이 줄어든다. DBCC CHECKDB에서 모든 시스템 테이블 인덱스를 검사하므로 NOINDEX는 시스템 테이블에 어떤 영향도 주지 않는다.

-------------------------------------
NOINDEX 에 쓰일 수 있는 다른 옵션들 ↓

REPAIR_ALLOW_DATA_LOSS - REPAIR_REBUILD에서 수행하는 모든 복구 작업을 수행하며 할당 오류, 구조적 행 오류나 페이지 오류, 손상된 텍스트 개체 삭제를 수정하기 위한 행과 페이지의 할당 및 할당 취소가 포함된다. 이러한 복구를 할 경우 일부 데이터가 손실될 수 있다. 복구 작업은 사용자가 변경 사항을 롤백할 수 있도록 사용자 트랜잭션 내에서 수행된다. 복구가 롤백되어도 데이터베이스에는 오류가 그대로 포함되므로 백업에서 데이터베이스를 복원해야 한다. 제공된 복구 수준 때문에 오류 복구를 생략한 경우 해당 복구에 종속적인 모든 복구도 생략된다. 복구를 완료한 후 데이터베이스를 백업한다.

REPAIR_FAST - 클러스터되지 않은 인덱스의 별도 키를 복구하는 것과 같이 사소하고 시간이 소요되지 않는 복구 작업을 수행한다. 이러한 복구는 데이터 손실의 위험 없이 빨리 실행할 수 있다.

REPAIR_REBUILD - REPAIR_FAST에서 이루어지는 모든 복구 작업을 수행하고 인덱스 다시 작성과 같이 시간이 소요되는 복구를 포함한다. 이러한 복구는 데이터 손실의 위험 없이 실행할 수 있다.
-------------------------------------


3. 검사하여 오류가 발생하는 데이터베이스를 위의 옵션으로 적절히 사용하여 복구한다.


4. 이때 단일사용자 모드로 설정해야 한다.


sp_dboption dbname, single, true


5. 복구되면 단일사용자 모드 해제한다.


sp_dboption dbname, single, false


6. 서비스 팩을 다시 설치한다.

[주의사항] MS-SQL 2005 MDF >>> 2000 MDF 변환 불가

데이타베이스
Database Server 를 재설치 할 일은 종종 있는 일이다.
재설치할때 대부분 MDF, LDF 파일을 다른 곳에다가 백업 해두고
재 설치후 Attach 를 통해서 쉽게 같다 붙이면 예전 상태로 사용가능하다.
주의 해야할 것은 Attach 되는 MDF 가 SQL의 버전을 탄다는 것이다.
경험 한 것은 MS-SQL 2000으로 사용한 MDF 파일을 잠시 해당 서버가 복구해야할
필요가 있어서 임시로 MS-SQL 2005 서버에 Attach 시켜서 사용했다.
복구가 끝나고 난뒤에 다시 MS-SQL 2000 에 Attach 를 시키려고 하니
Error 602: Could not find row in sysindexes for database ID 9, object ID 1, index ID 1. Run DBCC CHECKTABLE on sysindexes
오류가 발생하면서 Attach 에 실패했다는 썰렁한 메세지 박스와 함께 끝나버렸다. ㅠ.ㅠ
덕분에 Database 새로 만들고 2005 로부터 Database Import 시켜 오는 등
난리를 치며 복구를 진행중이다. ㅠ.ㅠ
혹시나 이런 분이 계실까 해서 이 글을 씁니다.

우편번호 최신 DB 2009.2.23

데이타베이스
우체국 사업 본부 사이트인 koreapost.go.kr 에서 제공하는 우편번호 파일을 엑셀로 받아서 DB에 저장 할 수 있도록 insert 문으로 벼경 하였습니다.

http://www.koreapost.go.kr/woopuns/domestic_post3_3.jsp?sc_displayflag=true


위 URL로 직접 가셔서 사용하고자 하는 용도에 맞게 이용하시면 됩니다.

제가 만든 쿼리는 제 사이트에 맞게 받은것으로 자신의 사이트에 맞는 필드로 변경해서 이용하시기 바랍니다.

우편번호는 2009년 2월 23일자 현재 최신 자료 입니다. 

MSSQL2005 에서 MSSQL 2000의 서비스 관리자 이용하기

데이타베이스
질문. MSSQL 2000처럼  서비스 관리자 없나요? 웹어플리케이션이랑 같이 구동하려는데 ODBC 설정하려해도 안되고..

위 질문 처럼 MSSQL2000 이용자가 MSSQL2005로 이동하면서 어럽게 느끼는 부분이다.

1. MSSQL 2000처럼 서비스 관리자 없나요?
MSSQL2000 이용시 우측 하단 트레이바에 MSSQL 서비스 관리자를 볼 수 있었다.
서비스를 중지하고 시작하고를 편하게 컨트롤 할 수 있었습니다.
MSSQL2005 에서는
시작 > 프로그램 > Microsoft SQL Server 2005 > 구성도구> SQL Server Configuration Manager
를 열어서 서비스 관리를 하실수있습니다.
하지만 서비스 관리자가 편리하게 느끼는 분을 위해 별도의 프로그램 제공합니다.

SQL 2005 Service Manager

사용자 삽입 이미지

















* 다운로드

http://sql2005srvcmngr.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=16329



2. 웹어플리케이션이랑 같이 구동하려는데 ODBC 설정하려해도 안되고..
SQL 서버주소는 DB 깔려있는 컴퓨터 IP 주소로 하시면됩니다.
IP 확인은 시작 > 실행 > cmd 치고 엔터 > ipconfig
하시면 ip 확인할수있고요 로컬에 깔려있다면, localhost 나 . 으로 db 연결문자열 하시면 하시면됩니다
db연결문자열은  "server=db서버ip주소;uid=db 접속계정; pwd=계정의비밀번호;database=db명;"
이렇게 작성하시면돼고요 머 아실거라 예상은 됩니다.

혹시 계정명이나 비밀번호 서버아이피 등등이 전부 맞는데 접속이 안된다면 이걸 확인해보시 바랍니다

시작 > 프로그램 > Microsoft SQL Server 2005 > 구성도구> SQL Server 노출영역구성> 서비스및 연결에대한 노출영역구성 > 데이터베이스엔진에 원격연결 클릭 > 로컬및 원격연결 선택> TCP/IP 및 명명된 파이프 모두사용 체크 이렇게 해보세요. 

MSSQL2005 [DBNETLIB][ConnectionOpen (Connect()).]SQL Server가 없거나 액세스할 수 없습니다.

데이타베이스
MSSQL2000을 이용하다가 MSSQL2005로 업그레이드 하고 ASP소스는 DB가 이전에 웹서버와 분리 되어 있어서 DB에 접속하는 IP가 고정으로 되어 있었다.
그런데, 다음과 같은 오류가 발생하면서 DB에 접속할 수 없다는 오류가 나는 것이다.

[DBNETLIB][ConnectionOpen (Connect()).]SQL Server가 없거나 액세스할 수 없습니다.

sql 재시작해도 안되는것이었다.
새로 설치한 서버는 웹과 DB를 하나의 서버에 설치 했기에
혹시나해서 sql 연결구문에서 ip를 127.0.0.1 로 바꿨더니 접속이 된다.

OTL 헐..

MSSQL2008이 나왔는데 MSSQL2005를 붙잡고 고생하고 있다. ㅋㅋ

MSSQL 작업스케줄러로 반복 적으로 쿼리 실행하기

데이타베이스
최근 스크립트 인젝션 공격으로 인해 DB에 <script *></script> 가 삽입 되어 애를 먹은적이 있었다.

다행히 스크립트를 찾아서 지워주는 쿼릴 실행해서 복구는 되었으나 지속적으로 들어와 서비스를 중단하고 소스를 수정해야하는 사항까지 갈것 같았다.
그래서 생각한게 보안처리 될 동안 복구해주는 쿼리가 주기적으로 돌아가 주면 좋겠다는 생각에 MSSQL 에이전트 작업을 이용해보았다.

백업등을 목적으로 주로 이용하지만 이렇게 원하는 쿼리를 주기적으로 동작하게끔도 할수 있다.

1. 먼저 "엔터프라이즈 관리자"를 실행한다.

사용자 삽입 이미지

2. 다음으로 콘솔루트 > Microsoft SQL Servers > (LOCAL) ... > 관리 > 작업 을 선택한다.

사용자 삽입 이미지

3. 마우스 우측 버튼을 눌러 작업 추가를 선택한다.
여기서 이름을 구분할 수 있게 적어두고 범주는 적당히 데이터베이스 유지 관리 등 선택한다.
그리고, 당연 쿼리를 실행할 소유자를 선택한다. 쿼리 적용할 소유자 필요하면 다른 작업자를 위해 설명을 달아두는것도 좋을듯..그리고 우측 대상 서버 선택 보통 [local]

사용자 삽입 이미지


4. 다음으로 단계 탭을 클릭한다. 여기서 새로 만들기 클릭

사용자 삽입 이미지


5. 단계이름 적당히 입력하고 유형은 Transact-SQL 스크립트 [TSQL] 를 선택 그리고 데이터베이스를 선택한다. 그리고 명령칸에 쿼리를 작성한다.

사용자 삽입 이미지


6. 이제 일정 탭을 선택후 새일정을 추가한다. 스크립트를 언제 마다 돌릴지 설정 해주는것이다.

사용자 삽입 이미지

7. 이름을 적당히 넣어주고 되풀이를 선택한다. 그리고 되풀이 옆에 변경을 클릭!

사용자 삽입 이미지


8. 되풀이 방법은 매일 혹은 매주 선택하고 매일 인 경우 몇일마다 1일마다면 매일이 되는것이겠죠. 하루빈도 한번수행할지 되풀이 수행할지 선택 되풀이 수행 체크하고 1분으로 설정하면 1분마다 계속 줄기차게 실행이 되겠죠 그리고 시작 끝은 그냥 놔두시면된 기본설정이 24시간이니깐.

사용자 삽입 이미지

9. 마지막으로 알림 탭에서 처리후 관리자에게 처리 상태를 메일을 발송할지 여부를 선택할 수 있다. 즉, 실패할 경우라고 선택하고 메일을 적어두면 메일을 보고서 쿼리가 동작 안하는구나 하고 판단을 할 수 있겠죠. 필요하시면 설정하시면됩니다.

사용자 삽입 이미지

10. 이것으로 설정이 끝났으며 목록에서 자신이 추가한 항목에 마우스 우측 버튼 눌러 시작을 클릭하시면 동작합니다. 만약 중지하고 싶으시면 중지 그리고 아예 비활성화 시킬수도 있습니다. 말그대로 "비활성화"를 선택해주시면 절대 동작 안합니다.

사용자 삽입 이미지

원래 백업 관리 계획용으로 주로 이용되나 저처럼 반복적인 쿼리 실행을 하고자 할 때 유용하게 사용하실 수 있을겁니다. 응용해서 잘 이용해보세요!

위 글은 제가 직접 작성한 글이니 가져가실땐 꼭 출처까지 표시 해주세요!
출처 : 세이박스 http://www.saybox.co.kr/460

mssql 전체 테이블 문자 검색 변경

데이타베이스
 
어느날 갑자기 DB에 "<script src=http://...></script>" 와 같은 내용이 삽입 된경우는 스크립트 삽입 공격을 받으신 겁니다.
 
참고로, 구글(http://www.google.co.kr) 에서 "<script src=http://...></script>" 내용을 검색해보세요.
국내 사이트중 어마어마 하게 많이 공격받은걸 확인 하실 수 있을겁니다.
 
MSSQL 을 사용중인 서버들이 공격 대상입니다.
항상 느끼는거지만 윈도우 관련 서버들이 취약점이 많다 보니 이런 문제가 생기는 것 같네요 저도 더 자세히 관련 공격 원인과 방어를 찾아봐야겠지마 끝이 없는듯 ㅡㅡ;
 
그럼, 테이블 마다 일일이 삽입된 스크립트를 일일이 지우는것도 끝이 없죠 그래서 다음과 같이 쿼리를 실행 해주시면 문제의 스크립트가 있는 테이블, 컬럼을 일일이 자동으로 찾아서 삭제 해줍니다.
 
 
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
  EXEC(
    'update ['+@T+'] set ['+@C+'] = left(
            convert(varchar(8000), ['+@C+']),
            len(convert(varchar(8000), ['+@C+'])) - 6 -
            patindex(''%tpircs<%'',
                      reverse(convert(varchar(8000), ['+@C+'])))
            )
      where ['+@C+'] like ''%<script src=http://...></script>'''
      );
  FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
 
 
위 진하게 표시된 부분을 삽입된 스크립트 내용으로 넣어 주시면 됩니다.
만약 여러 종류의 스크립트가 삽입된경우 ''%<script%</script>''' 처럼 넣어 주셔도 됩니다. 하지만 정상적인 스크립트가 사라지는 경우가 발생하겠죠! 주의!
 
하지만, 안타깝게도 위 쿼리로 100% 복구 안될 가능성 있습니다.
가장 좋은 방법은 백업해두신거 복구하는게 가장 좋겠죠!
 
아무튼 행운을 빌며 해당 공격에 대해 더 자사한 정보 찾으면 올리겠습니다.

mysql 바이너리 로그파일 보기

데이타베이스
shell> mysqlbinlog binlogfile  
shell> mysqlbinlog binlogfile > log.txt 
 
--------------------------------------
Trouble shooting
 
v6_sw1:/user1/extdata/data> mysqlbinlog v6_sw1-bin.000001 > babo
mysqlbinlog: unknown variable 'default-character-set=utf8'
/etc/my.cnf에 아래와 같이 설정되어 있습니다.
[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock
default-character-set=utf8

해결방법
default-character-set=utf8 부분을 주석처리하시고 다시 mysql를 기동하십시오..작업후 다시 주석부분을 빼고 재기동..

트랜잭션 로그 파일 삭제 방법

데이타베이스
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]'WordGame' 데이터베이스의 로그 파일이 꽉 찼습니다. 데이터베이스의 트랜잭션 로그를 백업하여 사용 가능한 일부 로그 공간을 확보하십시오.
 
라는 오류 메시지가 나타나는 경우 해당 싸이트에서 DB를 SQL Server를 사용하는데.. 그 DB서버의 문제가 생긴 것입니다.
말 그대로 데이터베이스의 로그 공간을 확보 하면 되는데..
 
로그파일 용량을 늘여주는 방법이 있구요..
하드용량이 꽉차서 더이상 로그를 늘릴수 없다면 기존 로그를 삭제 하는 방법이 있어요.
기존 로그를 삭제하는 방법은 쿼리분석기에서
backup log 디비이름 with no_log
이렇게 실행시킨 후 엔터프라이즈관리자에서 해당 디비의 용량 축소를 하시면 됩니다.
 
주기적인 관리가 가능하다면
엔터프라이즈관리자 > 해당 DB의 등록정보 > 트랜잭션 로그 > 최대 파일 크기 > 파일 무제한 증가 로 체크를 하면 적어도 서비스가 중지되진 않음 하지만 용량이 커질수록 느려지는 문제가 생길수도 있음 따라서 필히 주기적으로 관리가 되어야함 ^^;
 
역시,,주기적인 모니터링이 최선인듯...ㅡㅡ;

SQL Server의 Procedure cache를 지우고 싶은데..

데이타베이스

Q . SQL Server의 Procedure cache를 지우고 싶은데요?
Tuesday, November 14, 2000

A . SQL Server 6.5 에서 유일한 방법은 SQL Server를 재시동하는 것입니다.
SQL 7.0 에서는 DBCC FREEPROCCACHE라는 명령어가 있습니다. DBCC FREEPROCCACHE의 권한은 sysadmin과 serveradmin 고정 서버 역할의 구성원에게만 기본적으로 부여되며, 양도할 수 없습니다

dat 만 가지고 데이터베이스를 복구할 수 있습니까?

데이타베이스
Q . .dat 만 가지고 데이터베이스를 복구할 수 있습니까?
Friday, November 24, 2000

A . 일반적으로 6.5 이하 버전에서는 백업을 받아 놓지 않고 자주 발생을 하는 일이다.
아래 글은 정원혁씨 사이트 참조

DISK REINIT, DISK REFIT을 수행하십시오.

1 SQL 서버를 single user mode 로 시작합니다. 옵션만 /f 대신 /m을 사용하면 됩니다.

C:MSSQLBINNSQLSERVR /m
2 ISQL/w를 수행하고 DISK REINIT을 수행합니다. 예를 들어 두 디바이스 파일로 구성되어 있었다면 다음과 같이 합니다.
DISK REINIT
NAME = 'dist' -- 이름은 종전과 똑같지 않아도 됩니다.
, PHYSNAME = 'd:mssqldatadist.dat'
-- 정확한 디바이스 파일의 path를 적어줍니다.
, SIZE = 2560
-- 파일의 크기를 근거하여 page 로 환산한 크기를 적어 줍니다.
-- 예를 들면 5MB * 512 = 2560 page 입니다.
, VDEVNO = 10
-- SQL 서버 안에서 유일한 디바이스 번호를 적어 줍니다.
--자세한 것은 Books Online/ DISK INIT 명령을 참조합니다.
--결과: This command did not return data, and it did not return any rows
GO
DISK REFIT
-- 결과: Warning: Disk Refit may not have the correct segment map information in Sysusages. Please review these after the command completes to verify their accuracy.
GO

-- 다시 이 작업을 남은 디바이스에 대해서도 수행합니다.
DISK REINIT
NAME = 'myDev'
, PHYSNAME = 'd:mssqldatamyDev.dat'
, SIZE = 1536
, VDEVNO = 11
GO
DISK REFIT
3 1 에서 사용한 프롬프트에서 Control + C를 눌르고 나타나는 질문에 Y를 입력합니다.
4 다시 정상적으로 SQL 서버를 시작합니다.

만약 이 방법으로 복구가 안 된다면 다음의 방법으로 검증을 해 보십시요.
1 testpubs라는 데이터베이스를 임의로 만듭니다.

SQL7 에서 미처 백업(.mdf)을 받지 못 하고 날려버린 DB를 살리기

데이타베이스

Q . SQL7 에서 미처 백업(.mdf)을 받지 못 하고 날려버린 DB를 살리는 법은?
Friday, November 24, 2000

A . 아래 내용은 정원혁씨 사이트에 참조한 글입니다. 저도 이러한 경우가 발생 해서 복구한적이이 있네요. 어려울때는 Books Online 을 참조 하시면 많은 도움이 됩니다.

1. *.mdf 를 비롯한 파일을 날렸다면 전혀 방법이 없습니다.
2. drop database 를 실행했거나 EM에서 database를 삭제했다면 역시 전혀 방법이 없습니다.
3. SQL 서버를 Uninstall 했다면 가능합니다. 이때는 *.mdf, *.ndf, *.ldf 등이 남아 있기 때문입니다.이 때는 바로 아래에 있는 스크립트를 참고하여 디비를 하나씩 살려내면 됩니다.
pubs 디비를 가지고 먼저 연습을 하고 하십시요.

sp_helpdb pubs
select * from pubs..titles
sp_detach_db pubs

sp_attach_db pubs, 'c:temppubs.mdf','c:temppubs_log.ldf'

sp_attach_single_file_db pubs, 'c:temppubs.mdf'
-----------
sp_helpdb mydb2
sp_detach_db mydb2

sp_attach_single_file_db mydb2, 'f:mssql7datamydb2.mdf'
,'f:mssql7datad2.ndf'
,'f:mssql7datamydb2_log.ldf'

mdf화일만 또는 mdf와 ldf 화일만 남았을때...

데이타베이스

10. 백업과 복구 - 4. mdf화일만 또는 mdf와 ldf 화일만 남았을때..
이번에 소개해드릴 내용은 약간은 쉬운? ^_^;;
간단한 내용 입니다.
앞에서 설명드린 FAQ들에 대해서 실질적인 내용을 답변 드리지요.
또한 하도 많이 받는 질문이라 아예 페이지를 만들었으니 참고 하시길 바랍니다.

Q. 풀백업과 로그백업을 혼용해 지속적으로 백업하고 있습니다.
개발자의 실수로 update 회원테이블 set 이름 = '아무개'
로 WHERE절 없이 update를 해 버렸습니다. 복구할 방법이 없을까요?

A. 가능합니다.
1. 복구 모델이 전체 모델일것(DB를 생성하면 기본입니다.)
2. 문제 발생후 풀백업이나 로그에 쓰지 않는 작업을 하지 않았을것
이 두 조건이 맞다면 즉시 로그를 with no_truncate 옵션으로 백업하신후..
Stop at 명령으로 복구할 수 있습니다.
 
Q. 지속적으로 전체 백업만을 받아 왔습니다.
개발자의 실수로 update 회원테이블 set 이름 = '아무개'
로 WHERE절 없이 update를 해 버렸습니다. 복구할 방법이 없을까요?

A. 제약 조건이 있습니다.
1. 복구 모델이 전체 모델일것(DB를 생성하면 기본입니다.)
2. 문제 발생후 풀백업이나 로그에 쓰지 않는 작업을 하지 않았을것
3. 로그 백업이 가능할것 입니다.
만약 이 세 조건이 맞다면 바로 로그를 with no_truncate 옵션으로 백업하신후..
Stop at 명령으로 복구할 수 있습니다.

Q. 풀백업과 로그백업을 혼용해 지속적으로 백업하고 있습니다.
개발자의 실수로 update 회원테이블 set 이름 = '아무개'
로 WHERE절 없이 update를 해 버렸습니다. 복구할 방법이 없을까요?

A. 가능합니다.
1. 복구 모델이 전체 모델일것(DB를 생성하면 기본입니다.)
2. 문제 발생후 풀백업이나 로그에 쓰지 않는 작업을 하지 않았을것
이 두 조건이 맞다면 즉시 로그를 with no_truncate 옵션으로 백업하신후..
Stop at 명령으로 복구할 수 있습니다.

Q. 이전 서버에서 사용하던 시스템의 문제로 해당하는 데이터베이스의
mdf 화일과 ldf 화일만 남았습니다. 새로 설치하는 시스템에 복구가 가능할까요?

A. 이전 서버와 문자셋 정보(sp_helpsort 명령으로 보실수 있습니다.)가 같고
이전에 사용하던 SQL서버가 정상적인 상태로 종료 되었을때(엔터프라이즈 관리자에서
SQL서버를 스탑 시켰거나.. 정상적으로 윈도우 시스템을 종료시킨 경우 - 해당
mdf 화일과 ldf 화일이 정상적으로 닫혔을 경우) 복구가 가능하며 이때 사용하는 명령은

EXEC sp_attach_db 'pubs'
, 'c:Program FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
, 'c:Program FilesMicrosoft SQL ServerMSSQLDatapubs_log.ldf'

명령으로 복구할 수 있습니다.

Q. 이전 서버에서 사용하던 시스템의 문제로 해당하는 데이터베이스의
mdf 화일만 남았습니다. 새로 설치하는 시스템에 복구가 가능할까요?

A. 가능합니다.
이전 서버와 문자셋 정보(sp_helpsort 명령으로 보실수 있습니다.)가 같고
이전에 사용하던 SQL서버가 정상적인 상태로 종료 되었을때(엔터프라이즈 관리자에서
SQL서버를 스탑 시켰거나.. 정상적으로 윈도우 시스템을 종료시킨 경우 - 해당
mdf 화일이 정상적으로 닫혔을 경우) 복구가 가능하며 이때 사용하는 명령은

EXEC sp_attach_single_file_db 'pubs'
, 'c:Program FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
 
명령으로 복구하실 수 있습니다.

Q. 이전시스템에서 사용하던 풀 백업본이 있습니다.
새로 시스템을 설치한후 이 풀 백업본을 복구하려 하는데 방법이 없을까요?

A. 가능합니다.
약간 다른 방식으로 아래처럼 하심 됩니다.
1. 같은 이름의 db를 만든다 (텅빈 db)
2. 빈 db를 그냥 풀 백업 한다.
3. 원본서버에서 가져온 백업본으로 리스토어 한다.
4. 리스토어시 옵션의 강제로 덮어쓰기 하시면 됩니다.
의 순서로 진행하시면 무리없이 하실 수 있습니다.