블로그 이미지
bedbmsguru

Notice

Recent Comment

Recent Trackback

Archive

calendar

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
  • 28,566total
  • 2today
  • 5yesterday
2010.11.03 11:37 SQL SERVER

(1)MASTER

1)master 복구모드로 sql 실행
-- If the instance is the default instance:
NET START MSSQLSERVER /f /T3608
-- For a named instance:
NET START MSSQL$instancename /f /T3608

 2)master디비의 백업을 restore  한다.
 3)SQL SERVER가 자동으로 종료된다 다시 정상적으로 재시작 하면 된다.

이동:

Sql Server Configuration Manager --> 서버 -->속성-->고급 --> 시작매개변수 의 파라미터를 변경해주면 된다.

-dD:\sqldat\master.mdf; --master 디비 위치

-eD:\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG; --에러로그

-lD:\SQLDAT\mastlog.ldf --master디비 로그위치

파라미터 변경후 실제 파일의 위치를 옮긴후 SQL SERVER 재시작

 

(2)MSDB
 1)먼저 SQL SERVER Agent를 중지한다.
 2)MSDB의 모드를 SINGLE_USER로 변경한다(alter database MSDB set single_user with ROLLBACK IMMEDIATE)
 3)MSDB 백업을 다시 로딩한다.
  RESTORE DATABASE MSDB
  FROM FILE=C:\msdb.bak
  WITH RECOVERY
 4)MSDB의 모드를 MULTI_USER로 변경한다 (alter database MSDB set MULTI_user with ROLLBACK IMMEDIATE)

 

(3)MODEL
 1)일반 USER DB처럼 RESTORE가 가능하다.  
 한가지 주의사항은 로그작업 손실이 어쩌구 저쩌구 나오는데 with replace를 붙여서 가볍게 무시해준다..(-_-V)
 restore database model from disk = 'c:\sqldat\model.bak' with replace

 

(4)tempdb
   SQL SERVER가 재시작 할때마다 재생성 하기때문에 특별히 백업은 필요없다
   기존 tempdb가 있던 디스크가 문제가 생기거나 했을경우 아래의 쿼리를 이용해 생성경로를 변경해주면 된다.


master디비를 제외한  다른 DB 들도 이동법은 tempdb와 마찬가지 이다

단 tempdb를 제외한 다른DB 들은 실제 mdf, ldf를 신규로 옮길려고 하는 위치로 이동해야한다.

   CF)SQL SERVER를 재시작 해야 적용됨
   ALTER DATABASE tempdb
          MODIFY FILE (NAME = tempdev, FILENAME = 'c:\SQLDat\tempdb.mdf');
   ALTER DATABASE tempdb
   MODIFY FILE (NAME = templog, FILENAME = 'c:\SQLDat\templog.ldf');

저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

SQL SERVER Named Instance에 연결하기  (0) 2010.11.03
SQLCMD에 관해서..  (0) 2010.11.03
System Database Restore OR move하는법  (0) 2010.11.03
특정 프로세스가 실행중인 쿼리 보기  (0) 2010.11.03
Blocking 체크  (0) 2010.11.03
인덱스 조각화 확인  (0) 2010.11.03
posted by bedbmsguru
2010.11.03 11:36 SQL SERVER

SELECT st.* FROM sys.sysprocesses AS a
CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) AS st
WHERE spid = 54
저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

SQLCMD에 관해서..  (0) 2010.11.03
System Database Restore OR move하는법  (0) 2010.11.03
특정 프로세스가 실행중인 쿼리 보기  (0) 2010.11.03
Blocking 체크  (0) 2010.11.03
인덱스 조각화 확인  (0) 2010.11.03
UPGRADE Vs MIGRATION  (0) 2010.11.03
posted by bedbmsguru
2010.11.03 11:36 SQL SERVER

SELECT  tl.request_session_id AS WaitingSessionID
       ,wt.blocking_session_id AS BlockingSessionID
       ,wt.resource_description
       ,wt.wait_type
       ,wt.wait_duration_ms
       ,DB_NAME(tl.resource_database_id) AS DatabaseName
       ,tl.resource_associated_entity_id AS WaitingAssociatedEntity
       ,tl.resource_type AS WaitingResourceType
       ,tl.request_type AS WaitingRequestType
       ,wrt.[text] AS WaitingTSql
       ,btl.request_type BlockingRequestType
       ,brt.[text] AS BlockingTsql
FROM    sys.dm_tran_locks tl
        JOIN sys.dm_os_waiting_tasks wt
        ON tl.lock_owner_address = wt.resource_address
        JOIN sys.dm_exec_requests wr
        ON wr.session_id = tl.request_session_id
        CROSS APPLY sys.dm_exec_sql_text(wr.sql_handle) AS wrt
        LEFT JOIN sys.dm_exec_requests br
        ON br.session_id = wt.blocking_session_id
        OUTER APPLY sys.dm_exec_sql_text(br.sql_handle) AS brt
        LEFT JOIN sys.dm_tran_locks AS btl
        ON br.session_id = btl.request_session_id
저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

System Database Restore OR move하는법  (0) 2010.11.03
특정 프로세스가 실행중인 쿼리 보기  (0) 2010.11.03
Blocking 체크  (0) 2010.11.03
인덱스 조각화 확인  (0) 2010.11.03
UPGRADE Vs MIGRATION  (0) 2010.11.03
SQL SERVER Function  (0) 2010.11.03
posted by bedbmsguru
2010.11.03 11:35 SQL SERVER

--sys.dm_db_index_physical_stats(디비ID, object_ID, indexid(null은 모든인덱스), partition_number , mode(Valid inputs are DEFAULT, NULL, LIMITED, SAMPLED, or DETAILED. The default (NULL) is LIMITED.)

select a.index_id, name, avg_fragmentation_in_percent
from sys.dm_db_index_physical_stats (DB_ID(), OBJECT_ID('테이블이름'), NULL, NULL, NULL) AS a
inner join sys.indexes AS b
 on a.object_id = b.object_id and a.index_id = b.index_id
저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

특정 프로세스가 실행중인 쿼리 보기  (0) 2010.11.03
Blocking 체크  (0) 2010.11.03
인덱스 조각화 확인  (0) 2010.11.03
UPGRADE Vs MIGRATION  (0) 2010.11.03
SQL SERVER Function  (0) 2010.11.03
Log Shipping 잘 되고 있는지 체크용 쿼리  (0) 2010.11.03
posted by bedbmsguru
2010.11.03 11:35 SQL SERVER

1)Migration
(장점)
- UPGRADE에 비해 좀더 세밀한 컨트롤이 가능하다.
- NEW INSTANCE 와 OLD INSTANCE를 나란히 테스트 가능하다.
- 전체 셋업 과정중에도 서비스가 가능하다.(OLD INSTANCE에서 서비스를 하기 때문에)
- NEW INSTANCE를 셋업도중 에러가 나도 크게 문제가 되지 않는다.
(단점)
- NEW INSTANCE를 설치할 서버가 추가로 필요하다.
- 같은서버에 NAMED INSTANCE로 추가 설치를 할 경우 Application 코드의 수정이 필요하다.
- NAMED INSTANCE로 설치했을경우 DEFAULT INSTANCE를 삭제한다고 해도 NAMED INSTANCE를 DEFAULT INSTANCE로 만들 수 없다.

(2) UPGRADE
(장점)
- 작은 System에서는 MIGRATION보다 속도가 빠르다.
- 추가적인 서버가 필요없다.
- Application의 수정이 필요없다.
(단점)
- UPGRADE도중  데이타나 INSTANCE에 대해 컨트롤이 거의 불가능하다.
- UPGRADE도중 DB서버가 OFFLINE이 된다.
- 모든 SQL서버 컴포넌트에 업그레이드가 좋은 방법이 되는 것은 아니다. (Ex:Analysis Service Cube 같은 경우는 Migration이 더 적절함)

저작자 표시
신고
posted by bedbmsguru
2010.11.03 11:35 SQL SERVER

Function
(1)특징
-에러가 발생하면 Function은 중지된다.
-Function은 독립적으로 실행할 수 없다.
     -->Select, From, WHERE 절과 같은 쿼리 문장에서 호출되어 사용된다.
-에러처리(TRY...CATCH) 사용불가
    -->다른 SQL 문에 종속되어 호출 되기 때문에 에러 처리 불가능 에러처리를 하려면 함수를 호출한 SQL문에 대       하여 에러 처리를 해야한다.
-Function 내부에서는 데이타 갱신 작업이 불가능
    -->외부 테이블에 Insert, Delete, Update, DDL쿼리등이 불가능 단 함수내의 개체에서는 가능함
       
(2)종류
-스칼라 함수 int, nvarchar, bit... 등의 스칼라 데이타 타입을 Return 한다.
-테이블 함수 Table 을 Return 한다.

    CF)테이블함수와 뷰를 통한 결과값 반환과의 차이'
    뷰에서는 조건을 지정할 수 없는 고정된 SELECT 문만 사용가능 조건에 따라 다른 결과를 출력하게 할려면 여    러개의 뷰가 필요함 테이블 함수는 한개의 테이블 반환 함수로 가능
    CF2)테이블 함수와 저장프로시저 와의 차이
    저장 프로시저를 통한 테이블은 테이블중 일부 칼럼만 가져오는 등의 작업이 불가능하기 때문에
    결과 테이블을 다른 테이블과 Joiin 하는등 여러가지 이용이 불가능하다.

(3)테이블 함수의 장점
저장프로시저 처럼 외부 사용자의 요청을 파라미터 받아 다양한 형태의 테이블 만드는 것이 가능하고
SELECT FROM에서 호출 되기 때문에 원하는 필드만 출력도 가능하고 JOIN도 가능하다.


(4)테이블 함수의 단점
-여러개의 결과 테이블을 반환 불가능
-함수 내부에서 업데이트 작업 불가능(저장프로시저는 업데이트 하다가 결과 출력도 가능하고 다른작업도 가능)
-동적 Execute 함수로 테이블 반환 불가능 Exec(SELECT * FROM TABLE 불가능)

저작자 표시
신고
posted by bedbmsguru
2010.11.03 11:34 SQL SERVER

/*****

주 서버 로그 전달 데이터베이스, 백업 폴더 및 공유, 백업 보유 기간, 백업 작업, 최종 백업 시간 및 파일 정보

******/
SELECT primary_database, backup_directory, backup_share, backup_retention_period AS backup_retention_minutes,
       j.name AS backup_job_name, monitor_server, last_backup_file, last_backup_date
FROM     msdb.dbo.log_shipping_primary_databases pd
JOIN msdb.dbo.sysjobs j ON j.job_id = pd.backup_job_id
order by last_backup_date
GO


/*****

주 서버 로그 전달 데이터베이스에 대한 보조 서버 및 데이터베이스 정보

******/
/*****

주 데이터베이스 모니터링 이력 정보

******/
SELECT pd.primary_database,
        CASE agent_type WHEN 0 THEN 'Backup' WHEN 1 THEN 'Copy' WHEN 2 THEN 'Restore' END AS agent_type,
        database_name,
    CASE session_status WHEN 0 THEN 'Starting' WHEN 1 THEN 'Running' WHEN 2 THEN 'Success'
    WHEN 3 THEN 'Error' WHEN 4 THEN 'Warning' END AS session_status,
log_time, message
FROM     msdb.dbo.log_shipping_monitor_history_detail hd
JOIN msdb.dbo.log_shipping_primary_databases pd ON pd.primary_id = hd.agent_id
WHERE   log_time >= CAST(CONVERT(CHAR(10), getdate(), 120) AS DATETIME)
ORDER BY pd.primary_database, log_time
GO

/*****

주 데이터베이스 상세 오류 정보

******/

SELECT pd.primary_database,
 CASE agent_type WHEN 0 THEN 'Backup' WHEN 1 THEN 'Copy' WHEN 2 THEN 'Restore' END AS agent_type,
 database_name, log_time, message
    FROM     msdb.dbo.log_shipping_monitor_error_detail ed
    JOIN msdb.dbo.log_shipping_primary_databases pd ON pd.primary_id = ed.agent_id
    WHERE   log_time >= CAST(CONVERT(CHAR(10), getdate(), 120) AS DATETIME)
    ORDER BY pd.primary_database, log_time

 
/*****

보조 서버에 대한 로그 전달 데이터베이스, 백업 원본 및 대상 폴더, 백업 파일 보유 기간, 백업 파일 복사 및 복원 작업, 최종 복원 시간 정보

******/
SELECT s.primary_server, s.primary_database, last_restored_date , backup_source_directory, backup_destination_directory,
                           file_retention_period AS file_retention_minutes,
                           j1.name AS copy_job_name, j2.name AS restore_job_name, monitor_server
FROM     msdb.dbo.log_shipping_secondary s
                           JOIN msdb.dbo.sysjobs j1 ON j1.job_id = s.copy_job_id
                           JOIN msdb.dbo.sysjobs j2 ON j2.job_id = s.restore_job_id
                           JOIN msdb.dbo.log_shipping_monitor_secondary ms ON ms.secondary_id = s.secondary_id
            
order by last_restored_date
GO 
저작자 표시
신고
posted by bedbmsguru
2010.11.03 11:34 SQL SERVER

비슷한 일을 하는 쿼리를 만들어야 할때 참고할 것
혹시 이글 보시고 더 좋은 방법 아시는분은 알려주세요^^;;

DECLARE CHECK_COLUMN CURSOR FOR
select OBJECT_NAME(object_id) AS table_name, object_id  from sys.columns where system_type_id in(231, 167) and object_id > 100
grOUP BY object_id

DECLARE @table_name AS VARCHAR(100)
DECLARE @table_id AS BIGINT

OPEN CHECK_COLUMN
    FETCH NEXT FROM CHECK_COLUMN INTO @table_name, @table_id
    WHILE @@FETCH_STATUS = 0
    BEGIN
        DECLARE @RESULT_QUERY AS VARCHAR(2000)
       
        SET @RESULT_QUERY = 'SELECT TOP 1 '''  + @table_name + ''', '
        DECLARE PROCESS_COLUMN CURSOR FOR
            select name from sys.columns where system_type_id in(231, 167) and object_id = @table_id
           
        DECLARE @column_name AS VARCHAR(100)
        DECLARE @FkFirstColumn BIT SET @FkFirstColumn = 1
        OPEN PROCESS_COLUMN
        FETCH NEXT FROM PROCESS_COLUMN INTO @column_name
        WHILE @@FETCH_STATUS = 0
        BEGIN
            IF(@FkFirstColumn = 1)
                SET @FkFirstColumn = 0
            ELSE
                SET @RESULT_QUERY = @RESULT_QUERY + ', '       
            SET @RESULT_QUERY = @RESULT_QUERY + @column_name
           
            FETCH NEXT FROM PROCESS_COLUMN INTO @column_name
        END
        CLOSE PROCESS_COLUMN
        DEALLOCATE PROCESS_COLUMN
    SET @RESULT_QUERY = @RESULT_QUERY + ' FROM ' + @table_name
    PRINT @RESULT_QUERY
    FETCH NEXT FROM CHECK_COLUMN INTO @table_name, @table_id
    END
CLOSE CHECK_COLUMN
DEALLOCATE CHECK_COLUMN
저작자 표시
신고
posted by bedbmsguru
2010.11.03 11:33 SQL SERVER

DECLARE cIX CURSOR FOR
   SELECT OBJECT_NAME(SI.Object_ID), SI.Object_ID, SI.Name, SI.Index_ID
      FROM Sys.Indexes SI
         LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC ON SI.Name = TC.CONSTRAINT_NAME AND OBJECT_NAME(SI.Object_ID) = TC.TABLE_NAME
      WHERE TC.CONSTRAINT_NAME IS NULL
         AND OBJECTPROPERTY(SI.Object_ID, 'IsUserTable') = 1
      ORDER BY OBJECT_NAME(SI.Object_ID), SI.Index_ID

DECLARE @IxTable SYSNAME
DECLARE @IxTableID INT
DECLARE @IxName SYSNAME
DECLARE @IxID INT

-- Loop through all indexes
OPEN cIX
FETCH NEXT FROM cIX INTO @IxTable, @IxTableID, @IxName, @IxID
WHILE (@@FETCH_STATUS = 0)
BEGIN
   DECLARE @IXSQL NVARCHAR(4000) --SET @PKSQL = ''
   SET @IXSQL = 'CREATE '

   -- Check if the index is unique
   IF (INDEXPROPERTY(@IxTableID, @IxName, 'IsUnique') = 1)
      SET @IXSQL = @IXSQL + 'UNIQUE '
   -- Check if the index is clustered
   IF (INDEXPROPERTY(@IxTableID, @IxName, 'IsClustered') = 1)
      SET @IXSQL = @IXSQL + 'CLUSTERED '

   SET @IXSQL = @IXSQL + 'INDEX ' + @IxName + ' ON ' + @IxTable + '('

   -- Get all columns of the index
   DECLARE cIxColumn CURSOR FOR
      SELECT SC.Name
      FROM Sys.Index_Columns IC
         JOIN Sys.Columns SC ON IC.Object_ID = SC.Object_ID AND IC.Column_ID = SC.Column_ID
      WHERE IC.Object_ID = @IxTableID AND Index_ID = @IxID
      ORDER BY IC.Index_Column_ID

   DECLARE @IxColumn SYSNAME
   DECLARE @IxFirstColumn BIT SET @IxFirstColumn = 1

   -- Loop throug all columns of the index and append them to the CREATE statement
   OPEN cIxColumn
   FETCH NEXT FROM cIxColumn INTO @IxColumn
   WHILE (@@FETCH_STATUS = 0)
   BEGIN
      IF (@IxFirstColumn = 1)
         SET @IxFirstColumn = 0
      ELSE
         SET @IXSQL = @IXSQL + ', '

      SET @IXSQL = @IXSQL + @IxColumn

      FETCH NEXT FROM cIxColumn INTO @IxColumn
   END
   CLOSE cIxColumn
   DEALLOCATE cIxColumn

   SET @IXSQL = @IXSQL + ')'
   -- Print out the CREATE statement for the index
   PRINT @IXSQL

   FETCH NEXT FROM cIX INTO @IxTable, @IxTableID, @IxName, @IxID
END

CLOSE cIX
DEALLOCATE cIX
저작자 표시
신고
posted by bedbmsguru
2010.11.03 11:33 SQL SERVER

declare foreignkey_make_cursor cursor for
    select name, parent_object_id, referenced_object_id, delete_referential_action, update_referential_action from sys.foreign_keys

declare @foreignkey_name as varchar(100)
declare @current_table_id as int
declare @refrenced_table_id as int
declare @delete_refrencial_action as tinyint
declare @update_refrencial_action as tinyint

open foreignkey_make_cursor
fetch next from foreignkey_make_cursor    into @foreignkey_name, @current_table_id, @refrenced_table_id, @delete_refrencial_action, @update_refrencial_action
while (@@fetch_status = 0)
begin
    declare @result_query  as varchar(3000)
    set @result_query ='alter table ' + object_name(@current_table_id)
    set @result_query = @result_query  + ' add constraint ' + @foreignkey_name + ' foreign key '
    set @result_query = @result_query  + '('
   
    --foreign key 에  들어갈 column 을 불러오는 커서
    declare process_column_cursor cursor for
        select b.name from sys.foreign_key_columns as a
        inner join sys.columns as b
        on a.parent_object_id = b.object_id
        and a.parent_column_id = b.column_id
        where parent_object_id = @current_table_id

        declare @fkcolumn sysname
        declare @fkfirstcolumn bit set @fkfirstcolumn = 1

        open process_column_cursor
        fetch next from process_column_cursor into @fkcolumn
        while (@@fetch_status = 0)
        begin
            if (@fkfirstcolumn = 1)
                set @fkfirstcolumn = 0
            else
                set @result_query = @result_query + ', '

            set @result_query = @result_query + @fkcolumn

            fetch next from process_column_cursor into @fkcolumn
        end
        close process_column_cursor
        deallocate process_column_cursor
    --###########process_column_cursor 커서의 끝###############################
          
    set @result_query = @result_query  + ') '
    set @result_query = @result_query  + 'references ' + object_name(@refrenced_table_id) +'('
   
    --원본테이블에서 참조되고 있는 column 을 불러오는 커서   
    declare process_rdcolumn_cursor cursor for
        select b.name from sys.foreign_key_columns as a
        inner join sys.columns as b
        on a.referenced_object_id= b.object_id
        and a.referenced_column_id = b.column_id
        where referenced_object_id = @refrenced_table_id

        declare @rdcolumn sysname
        declare @rdfirstcolumn bit set @rdfirstcolumn = 1

        open process_rdcolumn_cursor
        fetch next from process_rdcolumn_cursor into @rdcolumn
        while (@@fetch_status = 0)
        begin
            if (@rdfirstcolumn = 1)
                set @rdfirstcolumn = 0
            else
                set @result_query = @result_query + ', '

            set @result_query = @result_query + @rdcolumn
            fetch next from process_rdcolumn_cursor into @rdcolumn
        end
    close process_rdcolumn_cursor
    deallocate process_rdcolumn_cursor
    --###########process_rdcolumn_cursor 커서의 끝###############################

    set @result_query = @result_query  + ')'
   
    if(@delete_refrencial_action = 0)
        set @result_query = @result_query + ' on delete no action'
    else if(@delete_refrencial_action = 1)
        set @result_query = @result_query + ' on delete cascade'
    else if(@delete_refrencial_action = 2)
        set @result_query = @result_query + ' on delete set null'
    else if(@delete_refrencial_action = 3)
        set @result_query = @result_query + ' on delete set default'
   
       
       
       
    if(@update_refrencial_action = 0)
        set @result_query = @result_query + ' on update no action'
    else if(@update_refrencial_action = 1)
        set @result_query = @result_query + ' on update cascade'
    else if(@update_refrencial_action = 2)
        set @result_query = @result_query + ' on update set null'
    else if(@update_refrencial_action = 3)
        set @result_query = @result_query + ' on update set default'
   
    print @result_query
    fetch next from foreignkey_make_cursor    into @foreignkey_name, @current_table_id, @refrenced_table_id, @delete_refrencial_action, @update_refrencial_action
end
close foreignkey_make_cursor
deallocate foreignkey_make_cursor
저작자 표시
신고
posted by bedbmsguru

티스토리 툴바