์ž์ฒด ๊ด€๋ฆฌํ˜• SQL Server ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์„ฑ

๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋Š” Datastream๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ž์ฒด ๊ด€๋ฆฌํ˜• SQL Server ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  1. ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— CDC๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  SQL ํ”„๋กฌํ”„ํŠธ ๋˜๋Š” ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    USE [DATABASE_NAME]
    GO
    EXEC sys.sp_cdc_enable_db
    GO
    

    DATABASE_NAME์„ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  2. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์บก์ฒ˜ํ•ด์•ผ ํ•˜๋Š” ํ…Œ์ด๋ธ”์—์„œ CDC๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    USE [DATABASE_NAME]
    EXEC sys.sp_cdc_enable_table
    @source_schema = N'SCHEMA_NAME',
    @source_name = N'TABLE_NAME',
    @role_name = NULL
    GO
    

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • DATABASE_NAME: ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ด๋ฆ„
    • SCHEMA_NAME: ํ…Œ์ด๋ธ”์ด ์†ํ•œ ์Šคํ‚ค๋งˆ์˜ ์ด๋ฆ„
    • TABLE_NAME: CDC๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„
  3. SQL Server ์—์ด์ „ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ํ•ญ์ƒ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. SQL Server ์—์ด์ „ํŠธ๊ฐ€ ์žฅ์‹œ๊ฐ„ ์ž‘๋™ ์ค‘์ง€ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋ฉด ๋กœ๊ทธ๊ฐ€ ์ž˜๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ Datastream์—์„œ ์ฝ์ง€ ์•Š์€ ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์†์‹ค๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    SQL Server ์—์ด์ „ํŠธ ์‹คํ–‰์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ SQL Server ์—์ด์ „ํŠธ ์ธ์Šคํ„ด์Šค ์‹œ์ž‘, ์ค‘์ง€, ๋‹ค์‹œ ์‹œ์ž‘์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  4. ์Šค๋ƒ…์ƒท ๊ฒฉ๋ฆฌ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    SQL Server ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฑํ•„ํ•  ๋•Œ๋Š” ์Šค๋ƒ…์ƒท ์ผ๊ด€์„ฑ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ ์„ค๋ช…ํ•˜๋Š” ์„ค์ •์„ ์ ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ฐฑํ•„ ํ”„๋กœ์„ธ์Šค ์ค‘์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ํŠน๋ณ„ํžˆ ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์—†๋Š” ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์ค‘๋ณต ๋˜๋Š” ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์Šค๋ƒ…์ƒท ๊ฒฉ๋ฆฌ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ๋ฐฑํ•„ ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘ ์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ž„์‹œ ๋ณด๊ธฐ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ”์„ ๋™์‹œ์— ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ๋ณต์‚ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์Šค๋ƒ…์ƒท ๊ฒฉ๋ฆฌ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ์„ฑ๋Šฅ์— ์•ฝ๊ฐ„ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์œผ๋‚˜ ์•ˆ์ •์ ์ธ ๋ฐ์ดํ„ฐ ์ถ”์ถœ์„ ์œ„ํ•ด ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.

    ์Šค๋ƒ…์ƒท ๊ฒฉ๋ฆฌ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

    1. SQL Server ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
    2. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    ALTER DATABASE DATABASE_NAME SET ALLOW_SNAPSHOT_ISOLATION ON;
    

    DATABASE_NAME์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  5. Datastream ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    1. ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

      USE DATABASE_NAME;
      
    2. Datastream์—์„œ ์—ฐ๊ฒฐ ํ”„๋กœํ•„์„ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•  ๋กœ๊ทธ์ธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

      CREATE LOGIN YOUR_LOGIN WITH PASSWORD = 'PASSWORD';
      
    3. ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

      CREATE USER USER_NAME FOR LOGIN YOUR_LOGIN;
      
    4. ์‚ฌ์šฉ์ž์—๊ฒŒ db_datareader ์—ญํ• ์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

      EXEC sp_addrolemember 'db_datareader', 'USER_NAME';
      
    5. ์‚ฌ์šฉ์ž์—๊ฒŒ VIEW DATABASE STATE ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

      GRANT VIEW DATABASE STATE TO USER_NAME;
      
    6. ์ด ์‚ฌ์šฉ์ž๋ฅผ master ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

      USE master;
      CREATE USER USER_NAME FOR LOGIN YOUR_LOGIN;
      

ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ CDC ๋ฉ”์„œ๋“œ์— ํ•„์š”ํ•œ ์ถ”๊ฐ€ ๋‹จ๊ณ„

์ด ์„น์…˜์—์„œ ์„ค๋ช…ํ•˜๋Š” ๋‹จ๊ณ„๋Š” ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ CDC ๋ฉ”์„œ๋“œ์— ์‚ฌ์šฉํ•˜๋„๋ก ์†Œ์Šค SQL Server ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  1. ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ db_owner ๋ฐ db_denydatawriter ์—ญํ• ์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

    USE DATABASE_NAME;
    EXEC sp_addrolemember 'db_owner', 'USER_NAME';
    EXEC sp_addrolemember 'db_denydatawriter', 'USER_NAME';
    
  2. sys.fn_dblog ํ•จ์ˆ˜์— SELECT ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

    USE master;
    GRANT SELECT ON sys.fn_dblog TO USER_NAME;
    
  3. ์‚ฌ์šฉ์ž๋ฅผ msdb ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ถ”๊ฐ€ํ•˜๊ณ  ๋‹ค์Œ ๊ถŒํ•œ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

    USE msdb;
    CREATE USER USER_NAME FOR LOGIN YOUR_LOGIN;
    GRANT SELECT ON dbo.sysjobs TO USER_NAME;
    
  4. master ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์Œ ๊ถŒํ•œ์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

      USE master;
      GRANT VIEW SERVER STATE TO YOUR_LOGIN;
    
  5. ์†Œ์Šค์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ ์šฉํ•  ๋ณด๊ด€ ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    USE [DATABASE_NAME]
    EXEC sys.sp_cdc_change_job @job_type = 'capture' , @pollinginterval = 86399
    EXEC sp_cdc_stop_job 'capture'
    EXEC sp_cdc_start_job 'capture'
    

    @pollinginterval ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ดˆ ๋‹จ์œ„๋กœ ์ธก์ •๋˜๋ฉฐ ๊ถŒ์žฅ ๊ฐ’์€ 86399๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ๋Š” 86,399์ดˆ(1์ผ) ๋™์•ˆ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. sp_cdc_start_job 'capture ํ”„๋กœ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์„ค์ •์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

  6. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‹คํ–‰ ์ค‘์ธ ์ •๋ฆฌ ๋˜๋Š” ์บก์ฒ˜ ์ž‘์—…์ด ์žˆ์œผ๋ฉด ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ ์บก์ฒ˜ ๊ด€๋ฆฌ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  7. ๋กœ๊ทธ ์ž˜๋ฆผ ๋ฐฉ์ง€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    CDC ๋ฆฌ๋”๊ฐ€ ๋กœ๊ทธ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„์„ ํ™•๋ณดํ•˜๋Š” ๋™์‹œ์— ๋กœ๊ทธ ์ž๋ฅด๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜์—ฌ ์ €์žฅ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋ ค๋ฉด ๋กœ๊ทธ ์ž˜๋ฆผ ๋ฐฉ์ง€๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    1. SQL Server ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
    2. ๋กœ๊ทธ ์ž˜๋ฆผ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ง€์ •ํ•œ ๊ธฐ๊ฐ„ ๋™์•ˆ ํ™œ์„ฑ ํŠธ๋žœ์žญ์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์ €์žฅ ํ”„๋Ÿฌ์‹œ์ €๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

      CREATE PROCEDURE dbo.DatastreamLogTruncationSafeguard @transaction_logs_retention_time INT
      AS
      BEGIN
      
      DECLARE @transactionLog TABLE (beginLSN BINARY(10), endLSN BINARY(10))
      INSERT @transactionLog EXEC sp_repltrans
      
      DECLARE @currentDateTime DATETIME = GETDATE()
      DECLARE @cutoffDateTime DATETIME = DATEADD(MINUTE, -@transaction_logs_retention_time, @currentDateTime)
      
      DECLARE @firstValidLSN BINARY(10) = NULL
      DECLARE @lastValidLSN BINARY(10) = NULL
      DECLARE @firstTxnTime DATETIME = NULL
      DECLARE @lastTxnTime DATETIME = NULL
      
      SELECT TOP 1
          @lastTxnTime = t.logStartTime,
          @lastValidLSN = t.beginLSN
      FROM (
        SELECT
          beginLSN AS beginLSN,
          (SELECT TOP 1 [begin time]
          FROM fn_dblog(stuff(stuff(CONVERT(CHAR(24), beginLSN, 1), 19, 0, ':'), 11, 0, ':'), DEFAULT)) AS logStartTime
        FROM @transactionLog
      ) t
      ORDER BY t.beginLSN DESC
      
      -- If all transactions are before cutoff, clear everything
      IF (@lastTxnTime < @cutoffDateTime)
      BEGIN
          EXEC sp_repldone NULL, NULL, 0, 0, 1
      END
      ELSE
      BEGIN
          -- Find the earliest transaction
          SELECT TOP 1
            @firstTxnTime = t.logStartTime,
            @firstValidLSN = ISNULL(@firstValidLSN, t.beginLSN)
          FROM (
            SELECT
              beginLSN AS beginLSN,
              (SELECT TOP 1 [begin time]
              FROM fn_dblog(stuff(stuff(CONVERT(CHAR(24), beginLSN, 1), 19, 0, ':'), 11, 0, ':'), DEFAULT)) AS logStartTime
            FROM @transactionLog
          ) t
          ORDER BY t.beginLSN ASC
      
          IF (@firstTxnTime < @cutoffDateTime)
          BEGIN
              -- Identify the earliest and latest LSNs within VLogs before cutoff
              SELECT
                @firstValidLSN = SUBSTRING(MAX(t.lsnMarkers), 1, 10),
                @lastValidLSN = SUBSTRING(MAX(t.lsnMarkers), 11, 10)
              FROM (
                SELECT MIN(beginLSN + endLSN) AS lsnMarkers
                FROM @transactionLog
                GROUP BY SUBSTRING(beginLSN, 1, 4)
              ) t
              WHERE (
                SELECT TOP 1 [begin time]
                FROM fn_dblog(stuff(stuff(CONVERT(CHAR(24), t.lsnMarkers, 1), 19, 0, ':'), 11, 0, ':'), DEFAULT)
                WHERE Operation = 'LOP_BEGIN_XACT'
              ) < @cutoffDateTime
      
              EXEC sp_repldone @firstValidLSN, @lastValidLSN, 0, 0, 0
          END
        END
      END;
      
    3. ๋‹ค๋ฅธ ์ €์žฅ ํ”„๋Ÿฌ์‹œ์ €๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์ง€์ •๋œ ์ฃผ๊ธฐ์— ๋”ฐ๋ผ ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“  ์ €์žฅ ํ”„๋Ÿฌ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ž‘์—…์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

      CREATE PROCEDURE [dbo].[SetUpDatastreamJob] @transaction_logs_retention_time INT
      AS
      BEGIN
      
      DECLARE @database_name VARCHAR(MAX)
        SET @database_name =  (SELECT DB_NAME());;
      
        DECLARE @command_str VARCHAR(MAX);
        SET @command_str = CONCAT('Use ', @database_name,'; exec dbo.DatastreamLogTruncationSafeguard @transaction_logs_retention_time = ' + CAST(@transaction_logs_retention_time AS VARCHAR(10)));
      
        DECLARE @job_name VARCHAR(MAX);
      SET @job_name =
        CONCAT(@database_name, '_', 'DatastreamLogTruncationSafeguardJob1')
          DECLARE @current_time INT
        = CAST(FORMAT(GETDATE(), 'HHmmss') AS INT);
      
        -- Schedule the procedure to run after every 5 minutes.
        IF NOT EXISTS (
          SELECT * FROM msdb.dbo.sysjobs
          WHERE name = @job_name
        )
        BEGIN
          EXEC msdb.dbo.sp_add_job
          @job_name = @job_name,
          @enabled = 1,
          @description = N'Execute the procedure every 5 minutes.' ;
      
          EXEC msdb.dbo.sp_add_jobstep
          @job_name =  @job_name,
          @step_name = N'Execute_DatastreamLogTruncationSafeguard',
          @subsystem = N'TSQL',
          @command = @command_str;
      
            DECLARE @schedule_name_1 VARCHAR(MAX);
          SET @schedule_name_1 = CONCAT(@database_name, '_', 'DatastreamEveryFiveMinutesSchedule')
      
          EXEC msdb.dbo.sp_add_schedule
          @schedule_name = @schedule_name_1,
          @freq_type = 4,  -- daily start
          @freq_subday_type = 4,  -- every X minutes daily
          @freq_interval = 1,
          @freq_subday_interval = 5,
          @active_start_time = @current_time;
      
          EXEC msdb.dbo.sp_attach_schedule
          @job_name = @job_name,
          @schedule_name = @schedule_name_1 ;
      
          -- Add a schedule that runs the stored procedure on the SQL Server Agent startup.
          DECLARE @schedule_name_agent_startup VARCHAR(MAX);
          SET @schedule_name_agent_startup = CONCAT(@database_name, '_', 'DatastreamSqlServerAgentStartupSchedule')
      
          EXEC msdb.dbo.sp_add_schedule
          @schedule_name = @schedule_name_agent_startup,
          @freq_type = 64,  -- start on SQL Server Agent startup
          @active_start_time = @current_time;
      
          EXEC msdb.dbo.sp_attach_schedule
          @job_name = @job_name,
          @schedule_name = @schedule_name_agent_startup ;
      
          EXEC msdb.dbo.sp_add_jobserver
          @job_name = @job_name,
          @server_name = @@servername ;
        END
      END;
      
    4. Datastream ์ž‘์—…์„ ๋งŒ๋“œ๋Š” ์ €์žฅ ํ”„๋Ÿฌ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

      DECLARE @transaction_logs_retention_time INT = (INT)
      EXEC [dbo].[SetUpDatastreamJob] @transaction_logs_retention_time
      

      INT๋ฅผ ๋กœ๊ทธ๋ฅผ ๋ณด๊ด€ํ•˜๋ ค๋Š” ์‹œ๊ฐ„(๋ถ„)์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      • 60 ๊ฐ’์€ ๋ณด๊ด€ ๊ธฐ๊ฐ„์„ 1์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
      • 24 * 60 ๊ฐ’์€ ๋ณด๊ด€ ๊ธฐ๊ฐ„์„ 1์ผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
      • 3 * 24 * 60 ๊ฐ’์€ ๋ณด๊ด€ ๊ธฐ๊ฐ„์„ 3์ผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„

  • Datastream์˜ SQL Server ์†Œ์Šค ์ž‘๋™ ๋ฐฉ๋ฒ• ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ