Set database from SINGLE USER mode to MULTI USER

Set database from SINGLE USER mode to MULTI USER
use master
GO
declare @sql as varchar(20), @spid as int
select @spid = min(spid) from master..sysprocesses where dbid = db_id(‘sample’) and spid != @@spid
while (@spid is not null)
begin
print ‘Killing process ‘ + cast(@spid as varchar) + ‘ …’
set @sql = ‘kill ‘ + cast(@spid as varchar)
exec (@sql)
select
@spid = min(spid)
from
master..sysprocesses
where
dbid = db_id(‘sample’)
and spid != @@spid
end
ALTER DATABASE DB_NAME SET MULTI_USER; GO
———————————————–
select
    d.name,
    d.dbid,
    spid,
    login_time,
    nt_domain,
    nt_username,
    loginame
from sysprocesses p
    inner join sysdatabases d
        on p.dbid = d.dbid
where d.name = ‘sample’
GO
You can add the option to rollback your change immediately.
ALTER DATABASE DB_NAME
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
USE master;
GO
ALTER DATABASE sample
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE sample
SET READ_ONLY;
GO
ALTER DATABASE sample
SET MULTI_USER;
GO
–Make Database Read Only
USE [master]
GO
ALTER DATABASE sample SET READ_ONLY WITH NO_WAIT
GO
–Make Database Read/Write
USE [master]
GO
ALTER DATABASE sample SET READ_WRITE WITH NO_WAIT
GO

ms sql server database restore

데이타베이스 복원.

http://m.blog.naver.com/mavis5/10079514586
https://msdn.microsoft.com/ko-kr/library/ms189272(v=sql.120).aspx
— 복구 준비
USE MSDB
GO효
— 백업파일 확인 (TYPE:D – 풀, L – 로그, I – 차등백업)
SELECT BACKUP_START_DATE, TYPE, DATABASE_NAME, PHYSICAL_DEVICE_NAME
FROM MSDB.DBO.BACKUPSET A JOIN MSDB.DBO.BACKUPMEDIAFAMILY B ON A.MEDIA_SET_ID = B.MEDIA_SET_ID
WHERE DATABASE_NAME = ‘ELOC2001’
AND  BACKUP_START_DATE > GETDATE() – 2
ORDER BY BACKUP_START_DATE DESC
— 풀백업 파일 정보 확인
RESTORE HEADERONLY FROM DISK = @FILEPATH –‘L:\SQL_BACKUP\AAA.FULL
RESTORE FILELISTONLY FROM DISK = @FILEPATH –‘L:\SQL_BACKUP\AAA.FULL
— 복구 진행
USE MASTER
GO
— 복구모델이 SIMPLE인경우
 — 1. 풀백업 복구 백업진행
 RESTORE DATABASE @DB_NAME
  FROM DISK = @FILEPATH WITH  NORECOVERY
  –, REPLACE — 복구시 기존 파일 교체할 때
  –, MOVE ‘@LOGICAL_NAME’ TO ‘@PYSICAL_PATH’ — 복구시 파일 위치 변경할 때
 — 2. 차등백업 복구 (해당하는경우 만)
 RESTORE DATABASE @DB_NAME
  FROM DISK= @FILEPATH WITH NORECOVERY
 — 3. 복구 마무리
 RESTORE DATABASE @DB_NAME WITH RECOVERY
 — 4. 다중 사용자로 변경
 ALTER DATABASE @DB_NAME SET MULTI_USER
— 복구모델이 FULL, BULK_LOGGED인경우 (차등백업, 로그백업 사용한다)
 — 0. 비상로그 백업 : 마지막 로그 백업로 사용
 BACKUP LOG @DB_NAME TO DISK = @FILEPATH
  WITH NORECOVERY — db상태를 복구중으로 변경한다 -> DB 변경사항 없게 한다!
  –, { CONTINUE_AFTER_ERROR | NO_TRUNCATE }
 — 1. 풀백업 복구
 RESTORE DATABASE @DB_NAME  FROM DISK = @FILEPATH WITH  NORECOVERY
  –, MOVE ‘@LOGICAL_NAME’ TO ‘@PYSICAL_PATH’ — 복구시 파일 위치 변경할 때
 — 2. 차등백업 복구 (해당하는경우 만)
 RESTORE DATABASE @DB_NAME  FROM DISK= @FILEPATH WITH NORECOVERY
 — 3. 로그백업 복구
 RESTORE LOG @DB_NAME  FROM DISK=@LOG_BAL_FILE_1_PATH WITH NORECOVERY
 RESTORE LOG @DB_NAME  FROM DISK=@LOG_BAL_FILE_2_PATH WITH NORECOVERY
 RESTORE LOG @DB_NAME  FROM DISK=@LOG_BAL_FILE_3_PATH WITH NORECOVERY
 RESTORE LOG @DB_NAME  FROM DISK=@LOG_BAL_FILE_4_PATH WITH NORECOVERY–, STOPAT = ‘0000-00-00 00:00:00.000’ — 지정시간 복구
 — 4. 복구 마무리
 RESTORE DATABASE @DB_NAME WITH RECOVERY
 — 5. 다중 사용자로 변경
 ALTER DATABASE @DB_NAME SET MULTI_USER

mssql vs mysql data type mapping

http://dev.mysql.com/doc/workbench/en/wb-migration-database-mssql-typemapping.html
http://www.sqlines.com/sql-server-to-mysql/functions/convert_string
mariadb, mysql feartures
timestamp default는 테이블에 오직 하나만 가능.
테이블 upt-date 는  timestap –> datetime으로 변경 default 제거, null 허용해 해결
timestamp는 default 가능한 2038년에 만료됨.

Table Column Property Change & column constraints

Table Column의 속성을 변경하거나 삭제하고자 할 경우 column 제약 조건으로 속성 변경이 불가능한 경우가 종종 발생 
한다.
프로젝트 개발중엔 Column 속성을 변경할 일이 종종 발생하므로 관련 사항을 정리해 둔다.
Table의 특정 column 속성 수정시 Result
Msg 5074, Level 16, State 1, Line
2
개체 ‘DF__A1_Studen__schoo__7A521F79’은(는)
열 ‘school3’에 종속되어 있습니다.
Msg 4922, Level
16, State 9, Line 2
하나 이상의 개체가 이 열에 
액세스하므로 ALTER TABLE ALTER COLUMN school3이(가) 실패했습니다.
문제가 된 Column을 생성할 때 not null 속성과 default 값을 적용한 상태였다. 다음 문제의 해결책은 column에
부여된 모든 제약 조건을 삭제 후 원래의 작업을 진행하는 것이다.
msdn을 참고하면 제약 조건 삭제를 위해 아래 query를 제시 하고 있다.
alter table <PublishedTableName>
drop constraint
<ConstraintName>
go
PublishedTableName은 해당 Table명이 될것이고 ConstraintName은 오류 발생시 ‘개체’ 명이다. SSMS
Results 창에 표시된
개체명 ‘DF__A1_Studen__schoo__7A521F79’ 를 적용하여 발생한
문제를 해결할 수 있었다.
참고: http://support.microsoft.com/kb/816755/ko

Alter index enable index disable index

USE AdventureWorks
GO
—-Diable Index
ALTER INDEX [IX_StoreContact_ContactTypeID] ON Sales.StoreContact DISABLE
GO
—-Enable Index
ALTER INDEX [IX_StoreContact_ContactTypeID] ON Sales.StoreContact REBUILD
GO
—-Diable Index
ALTER INDEX [IX_cid] ON Sales.StoreContact DISABLE
GO
—-Enable Index
ALTER INDEX [IX_StoreContact_ContactTypeID] ON Sales.StoreContact REBUILD
GO

table index definition document and modeling tools

테이블 정의서 2008
인덱스 정의서 2008
exerd 모델링
데이타 모델링의 이해
Download sqljdbc4-2.0.jar
[MSSQL]2008 백업 파일을 2005에서 복원하기

mssql pivot sample

 

select * from (
SELECT ROW_NUMBER() OVER (ORDER BY [01]) AS [00]
     , left(cast([01] as varchar),7) [99]
     , [01]
     , [02]
     , [03]
     , [04]
     , [05]
     , [06]
     , [07]
     , [08]
     , [09]
     , [10]
     , [11]
     , [12]
     , [13]
     , [14]
     , [15]
     , [16]
     , [17]
     , [18]
     , [19]
     , [20]
     , [21]
     , [22]
     , [23]
     , [24]
     , [25]
     , [26]
     , [27]
     , [28]
     , [29]
     , [30]
     , [31]
  FROM (SELECT dt+’_’+amst+’_’+pmst+’_’+apst d
             , DATEPART(d, dt) dd
             , left(dt,7) ww
          FROM ( select  solardate dt, isnull(cast(am_state as varchar),’0′) amst, isnull(cast(pm_state as varchar),’0′) pmst, isnull(cast(ap_state as varchar),’0′) apst from sldate a left outer join agent_work b on a.solardate = b.work_date
               and agent_idx = 1115
  and  (ISNULL(am_state,0)+ ISNULL(pm_state,0) + ISNULL(ap_state,0)) > 0
  where solardate between convert(varchar(10),Dateadd(m,0,’2015-10-01′),120) and convert(varchar(10),dateadd(ss,-1,Dateadd(m,12,’2015-10-01′)),120)
  ) T
        ) a
 PIVOT( MIN(d) FOR dd IN
        ( [00], [99], [01], [02], [03], [04], [05], [06], [07], [08], [09], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31]) ) a
  ) ta
  join copy_t ct on 1 = 1 and  no < 3