블로그 이미지
bedbmsguru

Notice

Recent Post

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
  • total
  • today
  • yesterday
2010. 11. 3. 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. 3. 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. 3. 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