MS SQL Server: ื’ื™ื‘ื•ื™ ืขืœ ืกื˜ืจื•ืื™ื“ื™ื

ืœึทื—ึฒื›ื•ึนืช! ืœึทื—ึฒื›ื•ึนืช! ื ื›ื•ืŸ, ื–ื” ืœื ืขื•ื“ ืžืืžืจ ืขืœ ืกื•ื’ื™ ื’ื™ื‘ื•ื™ื™ื ืฉืœ SQL Server. ืื ื™ ืืคื™ืœื• ืœื ืื“ื‘ืจ ืขืœ ื”ื”ื‘ื“ืœื™ื ื‘ื™ืŸ ืžื•ื“ืœื™ื ืœืฉื—ื–ื•ืจ ื•ื›ื™ืฆื“ ืœื”ืชืžื•ื“ื“ ืขื ื‘ื•ืœ ืขืฅ ืžื’ื•ื“ืœ.

ืื•ืœื™ (ืจืง ืื•ืœื™), ืœืื—ืจ ืงืจื™ืืช ื”ืคื•ืกื˜ ื”ื–ื”, ืชื•ื›ืœ ืœื•ื•ื“ื ืฉื”ื’ื™ื‘ื•ื™ ืฉื”ื•ืกืจ ืžืžืš ื‘ืืžืฆืขื™ื ืกื˜ื ื“ืจื˜ื™ื™ื ื™ื•ืกืจ ืžื—ืจ ื‘ืœื™ืœื”, ื•ื‘ื›ืŸ, ืคื™ 1.5 ืžื”ืจ ื™ื•ืชืจ. ื•ืจืง ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉืืชื” ืžืฉืชืžืฉ ืงืฆืช ื™ื•ืชืจ ื‘ืคืจืžื˜ืจื™ื ืฉืœ BACKUP DATABASE.

ืื ืชื•ื›ืŸ ื”ืคื•ืกื˜ ื”ื™ื” ื‘ืจื•ืจ ืœืš, ืื ื™ ืžืฆื˜ืขืจ. ืงืจืืชื™ ืืช ื›ืœ ืžื” ืฉื’ื•ื’ืœ ื”ื’ื™ืข ืืœื™ื• ืขื‘ื•ืจ ื”ื‘ื™ื˜ื•ื™ "ื’ื™ื‘ื•ื™ ืฉืจืช sql habr", ื•ื‘ืืฃ ืžืืžืจ ืื—ื“ ืœื ืžืฆืืชื™ ืื–ื›ื•ืจ ืœืขื•ื‘ื“ื” ืฉืืคืฉืจ ืœื”ืฉืคื™ืข ืื™ื›ืฉื”ื• ืขืœ ื–ืžืŸ ื”ื’ื™ื‘ื•ื™ ื‘ืืžืฆืขื•ืช ืคืจืžื˜ืจื™ื.

ืžื™ื“ ืืคื ื” ืืช ืชืฉื•ืžืช ืœื‘ืš ืœื”ืขืจืชื• ืฉืœ ืืœื›ืกื ื“ืจ ื’ืœื“ืฆ'ื ืงื• (@mssqlhelp):

ืœืขื•ืœื ืืœ ืชืฉื ื” ืืช ื”ืคืจืžื˜ืจื™ื BUFFERCOUNT, BLOCKSIZE, MAXTRANSFERSIZE ื‘ืžื”ืœืš ื”ื™ื™ืฆื•ืจ. ื”ื ื ื•ืขื“ื• ืจืง ืœื›ืชื™ื‘ืช ืžืืžืจื™ื ื›ืืœื”. ื‘ืคื•ืขืœ ืชื™ืคื˜ืจื• ืžื‘ืขื™ื•ืช ื–ื™ื›ืจื•ืŸ ืชื•ืš ื–ืžืŸ ืงืฆืจ.

ื–ื” ื™ื”ื™ื”, ื›ืžื•ื‘ืŸ, ืžื’ื ื™ื‘ ืœื”ื™ื•ืช ื”ื—ื›ื ื‘ื™ื•ืชืจ ื•ืœืคืจืกื ืชื•ื›ืŸ ื‘ืœืขื“ื™, ืื‘ืœ, ืœืžืจื‘ื” ื”ืฆืขืจ, ื–ื” ืœื ื”ืžืงืจื”. ื™ืฉ ืžืืžืจื™ื/ืคื•ืกื˜ื™ื ื‘ืฉืคื” ื”ืื ื’ืœื™ืช ื•ื’ื ื‘ืจื•ืกื™ืช (ืื ื™ ืชืžื™ื“ ืžื‘ื•ืœื‘ืœ ืื™ืš ืœืงืจื•ื ืœื”ื ื ื›ื•ืŸ) ื”ืžื•ืงื“ืฉื™ื ืœื ื•ืฉื ื”ื–ื”. ื”ื ื” ื›ืžื” ืžืืœื” ืฉื ืชืงืœืชื™ ื‘ื”ื: ื–ืžืŸ, ะดะฒะฐ, ืฉืœื•ืฉ (ื‘-sql.ru).

ืื–, ืžืœื›ืชื—ื™ืœื”, ืืฆืจืฃ ืชื—ื‘ื™ืจ BACKUP ืžืขื˜ ืžื•ืคืฉื˜ ืžืžื ื• MSDN (ืื’ื‘, ื›ืชื‘ืชื™ ืœืžืขืœื” ืขืœ BACKUP DATABASE, ืื‘ืœ ื›ืœ ื–ื” ืชืงืฃ ื’ื ืœื’ื™ื‘ื•ื™ ื™ื•ืžืŸ ืขืกืงืื•ืช ื•ื’ื ืœื’ื™ื‘ื•ื™ ื“ื™ืคืจื ืฆื™ืืœื™, ืื‘ืœ ืื•ืœื™ ืขื ื”ืฉืคืขื” ืคื—ื•ืช ื‘ืจื•ืจื”):

BACKUP DATABASE { database_name | @database_name_var }
  TO <backup_device> [ ,...n ]
  <...>
  [ WITH { <...>
           | <general_WITH_options> [ ,...n ] } ]
[;]

<general_WITH_options> [ ,...n ]::=
<...>
--Media Set Options
 <...>
 | BLOCKSIZE = { blocksize | @blocksize_variable }

--Data Transfer Options
   BUFFERCOUNT = { buffercount | @buffercount_variable }
 | MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }
<...>

<โ€ฆ> - ื–ื” ืื•ืžืจ ืฉื”ื™ื” ืฉื ืžืฉื”ื•, ืื‘ืœ ื”ืกืจืชื™ ืื•ืชื• ื›ื™ ืขื›ืฉื™ื• ื–ื” ืœื ืจืœื•ื•ื ื˜ื™ ืœื ื•ืฉื.

ืื™ืš ืืชื” ื‘ื“ืจืš ื›ืœืœ ืœื•ืงื— ื’ื™ื‘ื•ื™? ืื™ืš ื”ื "ืžืœืžื“ื™ื" ืื™ืš ืœืงื—ืช ื’ื™ื‘ื•ื™ื™ื ื‘ืžื™ืœื™ืืจื“ื™ ืžืืžืจื™ื? ื‘ืื•ืคืŸ ื›ืœืœื™, ืื ืื ื™ ืฆืจื™ืš ืœืขืฉื•ืช ื’ื™ื‘ื•ื™ ื—ื“ ืคืขืžื™ ืฉืœ ืžืกื“ ื ืชื•ื ื™ื ืœื ื’ื“ื•ืœ ื‘ืžื™ื•ื—ื“, ืื ื™ ืื›ืชื•ื‘ ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ืžืฉื”ื• ื›ื–ื”:

BACKUP DATABASE smth
TO DISK = 'D:Backupsmth.bak'
WITH STATS = 10, CHECKSUM, COMPRESSION, COPY_ONLY;
--ะปะฐะดะฝะพ, CHECKSUM ั ะฝะฐะฟะธัะฐะป ั‚ะพะปัŒะบะพ ั‡ั‚ะพะฑั‹ ะบะฐะทะฐั‚ัŒัั ัƒะผะฝะตะต

ื•ื‘ืื•ืคืŸ ื›ืœืœื™, ื›ื ืจืื” 75-90% ืžื›ืœ ื”ืคืจืžื˜ืจื™ื ื”ืžื•ื–ื›ืจื™ื ื‘ื“ืจืš ื›ืœืœ ื‘ืžืืžืจื™ื ืขืœ ื’ื™ื‘ื•ื™ื™ื ืžืคื•ืจื˜ื™ื ื›ืืŸ. ื•ื‘ื›ืŸ, ื™ืฉ ื’ื INIT, SKIP. ื”ืื ื‘ื™ืงืจืช ื‘-MSDN? ืจืื™ืชื ืฉื™ืฉ ืืคืฉืจื•ื™ื•ืช ืœืžืกืš ืื—ื“ ื•ื—ืฆื™? ืจืื™ืชื™ ื’ื...

ื‘ื˜ื— ื›ื‘ืจ ื”ื‘ื ืชื ืฉื‘ื”ืžืฉืš ื ื“ื‘ืจ ืขืœ ืฉืœื•ืฉืช ื”ืคืจืžื˜ืจื™ื ืฉื ืฉืืจื• ื‘ื‘ืœื•ืง ื”ืงื•ื“ ื”ืจืืฉื•ืŸ - BLOCKSIZE, BUFFERCOUNT ื•-MAXTRANSFERSIZE. ื”ื ื” ื”ืชื™ืื•ืจื™ื ืฉืœื”ื ืž-MSDN:

BLOCKSIZE = { ื’ื•ื“ืœ ื—ืกื™ืžื•ืช | @ blocksize_variable } - ืžืฆื™ื™ืŸ ืืช ื’ื•ื“ืœ ื”ื‘ืœื•ืง ื”ืคื™ื–ื™ ื‘ื‘ืชื™ื. ื”ื’ื“ืœื™ื ื”ื ืชืžื›ื™ื ื”ื 512, 1024, 2048, 4096, 8192, 16, 384 ื•-32 ื‘ืชื™ื (768 KB). ืขืจืš ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื•ื 65 ืขื‘ื•ืจ ื”ืชืงื ื™ ื˜ื™ื™ืค ื•-536 ืขื‘ื•ืจ ืžื›ืฉื™ืจื™ื ืื—ืจื™ื. ื‘ื“ืจืš ื›ืœืœ ืคืจืžื˜ืจ ื–ื” ืื™ื ื• ื ื—ื•ืฅ ืžื›ื™ื•ื•ืŸ ืฉื”ืฆื”ืจืช BACKUP ื‘ื•ื—ืจืช ืื•ื˜ื•ืžื˜ื™ืช ืืช ื’ื•ื“ืœ ื”ื‘ืœื•ืง ื”ืžืชืื™ื ืขื‘ื•ืจ ื”ื”ืชืงืŸ. ื”ื’ื“ืจืช ื’ื•ื“ืœ ื”ื‘ืœื•ืง ืขื•ืงืคืช ื‘ืื•ืคืŸ ืžืคื•ืจืฉ ืืช ื‘ื—ื™ืจืช ื’ื•ื“ืœ ื”ื‘ืœื•ืง ื”ืื•ื˜ื•ืžื˜ื™ืช.

BUFFERCOUNT = { ืกืคื™ืจืช ื—ื™ืฅ | @ buffercount_variable } - ืžื’ื“ื™ืจ ืืช ื”ืžืกืคืจ ื”ื›ื•ืœืœ ืฉืœ ืžืื’ืจื™ ืงืœื˜/ืคืœื˜ ืฉื™ืฉืžืฉื• ืขื‘ื•ืจ ืคืขื•ืœืช ื”ื’ื™ื‘ื•ื™. ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ื›ืœ ืขืจืš ืฉืœื ื—ื™ื•ื‘ื™, ืืš ืžืกืคืจ ืจื‘ ืฉืœ ืžืื’ืจื™ื ืขืœื•ืœ ืœื’ืจื•ื ืœืฉื’ื™ืื” ืžื—ื•ืฅ ืœื–ื™ื›ืจื•ืŸ ืขืงื‘ ืฉื˜ื— ื›ืชื•ื‘ื•ืช ื•ื™ืจื˜ื•ืืœื™ ืžื•ื’ื–ื ื‘ืชื”ืœื™ืš Sqlservr.exe.

ื›ืžื•ืช ื”ื—ืœืœ ื”ื›ื•ืœืœืช ื”ืžืฉืžืฉืช ืžืื’ืจื™ื ื ืงื‘ืขืช ืขืœ ื™ื“ื™ ื”ื ื•ืกื—ื” ื”ื‘ืื”: BUFFERCOUNT * MAXTRANSFERSIZE.

MAXTRANSFERSIZE = { maxtransfersize | @ maxtransfersize_variable } ืžืฆื™ื™ืŸ ืืช ื’ื•ื“ืœ ืžื ื•ืช ื”ื ืชื•ื ื™ื ื”ื’ื“ื•ืœ ื‘ื™ื•ืชืจ, ื‘ื‘ืชื™ื, ืœื”ื—ืœืคื” ื‘ื™ืŸ SQL Server ืœืžื“ื™ื” ืฉืœ ืขืจื›ืช ื”ื’ื™ื‘ื•ื™. ืชื•ืžื›ื™ื ื‘ื›ืคื•ืœื•ืช ืฉืœ 65 ื‘ืชื™ื (536 ืงื™ืœื•-ื‘ื™ื™ื˜) ืขื“ 64 ื‘ืชื™ื (4 ืžื’ื”-ื‘ื™ื™ื˜).

ืื ื™ ื ืฉื‘ืข - ืงืจืืชื™ ืืช ื–ื” ื‘ืขื‘ืจ, ืื‘ืœ ืœื ืขืœื” ื‘ื“ืขืชื™ ื›ืžื” ื”ืฉืคืขื” ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืœื”ื ืขืœ ื”ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช. ื™ืชืจื” ืžื›ืš, ื›ื ืจืื”, ืื ื™ ืฆืจื™ืš ืœืขืฉื•ืช ืกื•ื’ ืฉืœ "ื™ืฆื™ืื”" ื•ืœื”ื•ื“ื•ืช ืฉื’ื ืขื›ืฉื™ื• ืื ื™ ืœื ืœื’ืžืจื™ ืžื‘ื™ืŸ ืžื” ื‘ื“ื™ื•ืง ื”ื ืขื•ืฉื™ื. ืื ื™ ื›ื ืจืื” ืฆืจื™ืš ืœืงืจื•ื ืขื•ื“ ืขืœ ืงืœื˜/ืคืœื˜ ืžืื•ื—ืกืŸ ื•ืขื‘ื•ื“ื” ืขื ื›ื•ื ืŸ ืงืฉื™ื—. ืžืชื™ืฉื”ื• ืื ื™ ืืขืฉื” ืืช ื–ื”, ืื‘ืœ ื‘ื™ื ืชื™ื™ื ืื ื™ ื™ื›ื•ืœ ืคืฉื•ื˜ ืœื›ืชื•ื‘ ืกืงืจื™ืคื˜ ืฉื™ื‘ื“ื•ืง ืื™ืš ื”ืขืจื›ื™ื ื”ืืœื” ืžืฉืคื™ืขื™ื ืขืœ ื”ืžื”ื™ืจื•ืช ืฉื‘ื” ื”ื’ื™ื‘ื•ื™ ืžืชื‘ืฆืข.

ื”ื›ื ืชื™ ืžืกื“ ื ืชื•ื ื™ื ืงื˜ืŸ, ื‘ื’ื•ื“ืœ ืฉืœ ื›-10 ื’'ื™ื’ื”-ื‘ื™ื™ื˜, ืฉืžืชื™ ืื•ืชื• ืขืœ ื”-SSD, ื•ืฉืžืชื™ ืืช ื”ืกืคืจื™ื™ื” ืœื’ื™ื‘ื•ื™ื™ื ื‘-HDD.

ืื ื™ ื™ื•ืฆืจ ื˜ื‘ืœื” ื–ืžื ื™ืช ืœืื—ืกื•ืŸ ื”ืชื•ืฆืื•ืช (ืื™ืŸ ืœื™ ืื•ืชื” ื–ืžื ื™ืช, ืื– ืื ื™ ื™ื›ื•ืœ ืœื—ืคื•ืจ ื‘ืชื•ืฆืื•ืช ื‘ื™ืชืจ ืคื™ืจื•ื˜, ืื‘ืœ ืืชื” ืžื—ืœื™ื˜ ื‘ืขืฆืžืš):

DROP TABLE IF EXISTS ##bt_results; 

CREATE TABLE ##bt_results (
    id              int IDENTITY (1, 1) PRIMARY KEY,
    start_date      datetime NOT NULL,
    finish_date     datetime NOT NULL,
    backup_size     bigint NOT NULL,
    compressed_size bigint,
    block_size      int,
    buffer_count    int,
    transfer_size   int
);

ื”ืขื™ืงืจื•ืŸ ืฉืœ ื”ืกืงืจื™ืคื˜ ื”ื•ื ืคืฉื•ื˜ - ืœื•ืœืื•ืช ืžืงื•ื ื ื•ืช, ืฉื›ืœ ืื—ืช ืžื”ืŸ ืžืฉื ื” ืืช ื”ืขืจืš ืฉืœ ืคืจืžื˜ืจ ืื—ื“, ื”ื›ื ืก ืืช ื”ืคืจืžื˜ืจื™ื ื”ืœืœื• ืœืคืงื•ื“ืช BACKUP, ืฉืžื•ืจ ืืช ื”ืจืฉื•ืžื” ื”ืื—ืจื•ื ื” ืขื ื”ื™ืกื˜ื•ืจื™ื” ืž-msdb.dbo.backupset, ืžื—ื™ืงืช ืงื•ื‘ืฅ ื”ื’ื™ื‘ื•ื™ ื•ื”ืื™ื˜ืจืฆื™ื” ื”ื‘ืื” . ืžื›ื™ื•ื•ืŸ ืฉื ืชื•ื ื™ ื‘ื™ืฆื•ืข ื”ื’ื™ื‘ื•ื™ ื ืœืงื—ื™ื ืžืขืจืš ื”ื’ื™ื‘ื•ื™, ื”ื“ื™ื•ืง ืงืฆืช ืื•ื‘ื“ (ืื™ืŸ ืฉื‘ืจื™ืจื™ ืฉื ื™ื•ืช), ืื‘ืœ ืื ื—ื ื• ื ืฉืจื•ื“ ืืช ื–ื”.

ืจืืฉื™ืช ืขืœื™ืš ืœื”ืคืขื™ืœ ืืช xp_cmdshell ื›ื“ื™ ืœืžื—ื•ืง ื’ื™ื‘ื•ื™ื™ื (ื•ืื– ืืœ ืชืฉื›ื— ืœื”ืฉื‘ื™ืช ืืช ื–ื” ืื ืืชื” ืœื ืฆืจื™ืš ืืช ื–ื”):

EXEC sp_configure 'show advanced options', 1;  
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
EXEC sp_configure 'show advanced options', 0;  
GO

ื•ื‘ื›ืŸ ืœืžืขืฉื”:

DECLARE @tmplt AS nvarchar(max) = N'
BACKUP DATABASE [bt]
TO DISK = ''D:SQLServerbackupbt.bak''
WITH 
    COMPRESSION,
    BLOCKSIZE = {bs},
    BUFFERCOUNT = {bc},
    MAXTRANSFERSIZE = {ts}';

DECLARE @sql AS nvarchar(max);

/* BLOCKSIZE values */
DECLARE @bs     int = 4096, 
        @max_bs int = 65536;

/* BUFFERCOUNT values */
DECLARE @bc     int = 7,
        @min_bc int = 7,
        @max_bc int = 800;

/* MAXTRANSFERSIZE values */
DECLARE @ts     int = 524288,   --512KB, default = 1024KB
        @min_ts int = 524288,
        @max_ts int = 4194304;  --4MB

SELECT TOP 1 
    @bs = COALESCE (block_size, 4096), 
    @bc = COALESCE (buffer_count, 7), 
    @ts = COALESCE (transfer_size, 524288)
FROM ##bt_results
ORDER BY id DESC;

WHILE (@bs <= @max_bs)
BEGIN
    WHILE (@bc <= @max_bc)
    BEGIN       
        WHILE (@ts <= @max_ts)
        BEGIN
            SET @sql = REPLACE (REPLACE (REPLACE(@tmplt, N'{bs}', CAST(@bs AS nvarchar(50))), N'{bc}', CAST (@bc AS nvarchar(50))), N'{ts}', CAST (@ts AS nvarchar(50)));

            EXEC (@sql);

            INSERT INTO ##bt_results (start_date, finish_date, backup_size, compressed_size, block_size, buffer_count, transfer_size)
            SELECT TOP 1 backup_start_date, backup_finish_date, backup_size, compressed_backup_size,  @bs, @bc, @ts 
            FROM msdb.dbo.backupset
            ORDER BY backup_set_id DESC;

            EXEC xp_cmdshell 'del "D:SQLServerbackupbt.bak"', no_output;

            SET @ts += @ts;
        END
        
        SET @bc += @bc;
        SET @ts = @min_ts;

        WAITFOR DELAY '00:00:05';
    END

    SET @bs += @bs;
    SET @bc = @min_bc;
    SET @ts = @min_ts;
END

ืื ืืชื” ืคืชืื•ื ืฆืจื™ืš ื”ื‘ื”ืจื” ืขืœ ืžื” ืฉืงื•ืจื” ื›ืืŸ, ื›ืชื‘ื• ื‘ืชื’ื•ื‘ื•ืช ืื• ื‘-PM. ืœืขืช ืขืชื”, ืืกืคืจ ืœื›ื ืจืง ืขืœ ื”ืคืจืžื˜ืจื™ื ืฉืฉืžืชื™ ื‘-BACKUP DATABASE.

ืขื‘ื•ืจ BLOCKSIZE ื™ืฉ ืœื ื• ืจืฉื™ืžื” "ืกื’ื•ืจื”" ืฉืœ ืขืจื›ื™ื, ื•ืœื ื‘ื™ืฆืขืชื™ ื’ื™ื‘ื•ื™ ืขื BLOCKSIZE < 4KB. MAXTRANSFERSIZE ื›ืœ ืžืกืคืจ ืฉื”ื•ื ื›ืคื•ืœื” ืฉืœ 64KB - ืž-64KB ืœ-4MB. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื‘ืžืขืจื›ืช ืฉืœื™ ื”ื™ื 1024KB, ืœืงื—ืชื™ 512 - 1024 - 2048 - 4096.

ื–ื” ื”ื™ื” ืงืฉื” ื™ื•ืชืจ ืขื BUFFERCOUNT - ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ื›ืœ ืžืกืคืจ ื—ื™ื•ื‘ื™, ืื‘ืœ ื”ืงื™ืฉื•ืจ ืื•ืžืจ ืื™ืš ื–ื” ืžื—ื•ืฉื‘ ื‘-BACKUP DATABASE ื•ืžื“ื•ืข ืขืจื›ื™ื ื’ื“ื•ืœื™ื ืžืกื•ื›ื ื™ื?. ื–ื” ื’ื ืื•ืžืจ ืื™ืš ืžืงื‘ืœื™ื ืžื™ื“ืข ืขืœ ืื™ื–ื” BUFFERCOUNT ื”ื’ื™ื‘ื•ื™ ื ืขืฉื” ื‘ืคื•ืขืœ - ืžื‘ื—ื™ื ืชื™ ื–ื” 7. ืœื ื”ื™ื” ื˜ืขื ืœืฆืžืฆื ืื•ืชื•, ื•ื”ื’ื‘ื•ืœ ื”ืขืœื™ื•ืŸ ื”ืชื’ืœื” ื‘ื ื™ืกื•ื™ - ืขื BUFFERCOUNT = 896 ื•-MAXTRANSFERSIZE = 4194304 ื”ื’ื™ื‘ื•ื™ ื ืคืœ ืขื ืฉื’ื™ืื” (ืขืœื™ื” ื ื›ืชื‘ ื‘ืงื™ืฉื•ืจ ืœืžืขืœื”):

Msg 3013, Level 16, State 1, Line 7 BACKUP DATABASE ืžืกืชื™ื™ื ื‘ืื•ืคืŸ ื—ืจื™ื’.

Msg 701, Level 17, State 123, Line 7 ืื™ืŸ ืžืกืคื™ืง ื–ื™ื›ืจื•ืŸ ืžืขืจื›ืช ื‘ืžืื’ืจ ื”ืžืฉืื‘ื™ื 'ื‘ืจื™ืจืช ืžื—ื“ืœ' ื›ื“ื™ ืœื”ืคืขื™ืœ ืฉืื™ืœืชื” ื–ื•.

ืœืฉื ื”ืฉื•ื•ืื”, ืชื—ื™ืœื” ืืจืื” ืืช ื”ืชื•ืฆืื•ืช ืฉืœ ื”ืคืขืœืช ื’ื™ื‘ื•ื™ ืžื‘ืœื™ ืœืฆื™ื™ืŸ ืคืจืžื˜ืจื™ื ื›ืœืœ:

BACKUP DATABASE [bt]
TO DISK = 'D:SQLServerbackupbt.bak'
WITH COMPRESSION;

ื•ื‘ื›ืŸ, ื’ื™ื‘ื•ื™ ื•ื’ื™ื‘ื•ื™:

ืขื™ื‘ื“ื• 1070072 ื“ืคื™ื ืขื‘ื•ืจ ืžืกื“ ื”ื ืชื•ื ื™ื 'bt', ืงื•ื‘ืฅ 'bt' ื‘ืงื•ื‘ืฅ 1.

ืขื™ื‘ื“ื• 2 ื“ืคื™ื ืขื‘ื•ืจ ืžืกื“ ื”ื ืชื•ื ื™ื 'bt', ื”ืงื•ื‘ืฅ 'bt_log' ื‘ืงื•ื‘ืฅ 1.

BACKUP DATABASE ืขื™ื‘ื“ ื‘ื”ืฆืœื—ื” 1070074 ืขืžื•ื“ื™ื ืชื•ืš 53.171 ืฉื ื™ื•ืช (157.227 MB/sec).

ื”ืชืกืจื™ื˜ ืขืฆืžื•, ื‘ื“ื™ืงืช ื”ืคืจืžื˜ืจื™ื, ืขื‘ื“ ืชื•ืš ื›ืžื” ืฉืขื•ืช, ื›ืœ ื”ืžื“ื™ื“ื•ืช ื”ื™ื• ื‘ืคื ื™ื ื’ื™ืœื™ื•ืŸ ืืœืงื˜ืจื•ื ื™ ืฉืœ ื’ื•ื’ืœ. ื•ื”ื ื” ืžื‘ื—ืจ ืชื•ืฆืื•ืช ืขื ืฉืœื•ืฉืช ื–ืžื ื™ ื”ื‘ื™ืฆื•ืข ื”ื˜ื•ื‘ื™ื ื‘ื™ื•ืชืจ (ื ื™ืกื™ืชื™ ืœืขืฉื•ืช ื’ืจืฃ ื™ืคื”, ืื‘ืœ ื‘ืคื•ืกื˜ ืืฆื˜ืจืš ืœื”ืกืชืคืง ื‘ื˜ื‘ืœื”, ื•ื‘ืชื’ื•ื‘ื•ืช @mixsture ื”ื•ืกื™ืฃ ื’ืจืคื™ืงื” ืžื’ื ื™ื‘ื” ืžืื•ื“).

SELECT TOP 7 WITH TIES 
    compressed_size, 
    block_size, 
    buffer_count, 
    transfer_size,
    DATEDIFF(SECOND, start_date, finish_date) AS backup_time_sec
FROM ##bt_results
ORDER BY backup_time_sec ASC;

MS SQL Server: ื’ื™ื‘ื•ื™ ืขืœ ืกื˜ืจื•ืื™ื“ื™ื

ืฉื™ืžื• ืœื‘, ื”ืขืจื” ื—ืฉื•ื‘ื” ืžืื•ื“ ืžืืช @mixsture ืฉืœ ืคืจืฉื ื•ืช:

ืื ื• ื™ื›ื•ืœื™ื ืœื•ืžืจ ื‘ื‘ื™ื˜ื—ื•ืŸ ืฉื”ืงืฉืจ ื‘ื™ืŸ ื”ืคืจืžื˜ืจื™ื ื•ืžื”ื™ืจื•ืช ื”ื’ื™ื‘ื•ื™ ื‘ื˜ื•ื•ื—ื™ ื”ืขืจื›ื™ื ื”ืœืœื• ื”ื•ื ืืงืจืื™, ืื™ืŸ ื“ืคื•ืก. ืื‘ืœ ื”ื”ืชืจื—ืงื•ืช ืžื”ืคืจืžื˜ืจื™ื ื”ืžื•ื‘ื ื™ื ื›ืžื•ื‘ืŸ ื”ืฉืคื™ืขื” ืœื˜ื•ื‘ื” ืขืœ ื”ืชื•ืฆืื”

ื”ึธื”ึตืŸ. ืจืง ืขืœ ื™ื“ื™ ื ื™ื”ื•ืœ ื”ืคืจืžื˜ืจื™ื ื”ืกื˜ื ื“ืจื˜ื™ื™ื ืฉืœ BACKUP ื”ื™ื” ืจื•ื•ื— ืคื™ 2 ื‘ื–ืžืŸ ื”ืกืจืช ื”ื’ื™ื‘ื•ื™: 26 ืฉื ื™ื•ืช, ืœืขื•ืžืช 53 ื‘ื”ืชื—ืœื”. ื–ื” ืœื ืจืข, ื ื›ื•ืŸ? ืื‘ืœ ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืจืื•ืช ืžื” ืงื•ืจื” ืขื ื”ืฉื™ืงื•ื. ืžื” ืื ืขื›ืฉื™ื• ืœื•ืงื— ืคื™ 4 ื™ื•ืชืจ ืœื”ืชืื•ืฉืฉ?

ืจืืฉื™ืช, ื‘ื•ืื• ื ืžื“ื•ื“ ื›ืžื” ื–ืžืŸ ืœื•ืงื— ืœืฉื—ื–ืจ ื’ื™ื‘ื•ื™ ืขื ื”ื’ื“ืจื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ:

RESTORE DATABASE [bt]
FROM DISK = 'D:SQLServerbackupbt.bak'
WITH REPLACE, RECOVERY;

ื•ื‘ื›ืŸ, ืืชื” ื‘ืขืฆืžืš ื™ื•ื“ืข ืฉื”ื“ืจื›ื™ื ืงื™ื™ืžื•ืช, ื”ื—ืœืคื” ืื™ื ื” ื”ื—ืœืคื”, ื”ื—ืœืžื” ืื™ื ื” ื”ื—ืœืžื”. ื•ืื ื™ ืขื•ืฉื” ืืช ื–ื” ื›ื›ื”:

ืขื™ื‘ื“ื• 1070072 ื“ืคื™ื ืขื‘ื•ืจ ืžืกื“ ื”ื ืชื•ื ื™ื 'bt', ืงื•ื‘ืฅ 'bt' ื‘ืงื•ื‘ืฅ 1.

ืขื™ื‘ื“ื• 2 ื“ืคื™ื ืขื‘ื•ืจ ืžืกื“ ื”ื ืชื•ื ื™ื 'bt', ื”ืงื•ื‘ืฅ 'bt_log' ื‘ืงื•ื‘ืฅ 1.

RESTORE DATABASE ืขื™ื‘ื“ ื‘ื”ืฆืœื—ื” 1070074 ื“ืคื™ื ืชื•ืš 40.752 ืฉื ื™ื•ืช (205.141 MB/sec).

ื›ืขืช ืื ืกื” ืœืฉื—ื–ืจ ื’ื™ื‘ื•ื™ื™ื ืฉืฆื•ืœืžื• ืขื BLOCKSIZE, BUFFERCOUNT ื•-MAXTRANSFERSIZE ืฉื”ืฉืชื ื•.

BLOCKSIZE = 16384, BUFFERCOUNT = 224, MAXTRANSFERSIZE = 4194304

RESTORE DATABASE ืขื™ื‘ื“ ื‘ื”ืฆืœื—ื” 1070074 ื“ืคื™ื ืชื•ืš 32.283 ืฉื ื™ื•ืช (258.958 MB/sec).

BLOCKSIZE = 4096, BUFFERCOUNT = 448, MAXTRANSFERSIZE = 4194304

RESTORE DATABASE ืขื™ื‘ื“ ื‘ื”ืฆืœื—ื” 1070074 ื“ืคื™ื ืชื•ืš 32.682 ืฉื ื™ื•ืช (255.796 MB/sec).

BLOCKSIZE = 16384, BUFFERCOUNT = 448, MAXTRANSFERSIZE = 2097152

RESTORE DATABASE ืขื™ื‘ื“ ื‘ื”ืฆืœื—ื” 1070074 ื“ืคื™ื ืชื•ืš 32.091 ืฉื ื™ื•ืช (260.507 MB/sec).

BLOCKSIZE = 4096, BUFFERCOUNT = 56, MAXTRANSFERSIZE = 4194304

RESTORE DATABASE ืขื™ื‘ื“ ื‘ื”ืฆืœื—ื” 1070074 ื“ืคื™ื ืชื•ืš 32.401 ืฉื ื™ื•ืช (258.015 MB/sec).

ื”ืฆื”ืจืช RESTORE DATABASE ืื™ื ื” ืžืฉืชื ื” ื‘ืžื”ืœืš ื”ืฉื—ื–ื•ืจ; ืคืจืžื˜ืจื™ื ืืœื” ืื™ื ื ืžืฆื•ื™ื ื™ื ื‘ื”; SQL Server ืขืฆืžื• ืงื•ื‘ืข ืื•ืชื ืžื”ื’ื™ื‘ื•ื™. ื•ื‘ืจื•ืจ ืฉื’ื ืขื ื”ืชืื•ืฉืฉื•ืช ื™ื›ื•ืœ ืœื”ื™ื•ืช ืจื•ื•ื— - ื›ืžืขื˜ 20% ืžื”ืจ ื™ื•ืชืจ (ืœืžืขืŸ ื”ืืžืช, ืœื ื”ืฉืงืขืชื™ ื–ืžืŸ ืจื‘ ื‘ื”ืชืื•ืฉืฉื•ืช, ืขื‘ืจืชื™ ื›ืžื” ืžื”ื’ื™ื‘ื•ื™ื™ื ื”"ืžื”ื™ืจื™ื" ื‘ื™ื•ืชืจ ื•ื•ื™ื“ืืชื™ ืฉืื™ืŸ ื”ื™ื“ืจื“ืจื•ืช).

ืœื™ืชืจ ื‘ื˜ื—ื•ืŸ, ื”ืจืฉื• ืœื™ ืœื”ื‘ื”ื™ืจ ืฉืœื ืžื“ื•ื‘ืจ ื‘ืคืจืžื˜ืจื™ื ืื•ืคื˜ื™ืžืœื™ื™ื ืขื‘ื•ืจ ื›ื•ืœื. ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืืช ื”ืคืจืžื˜ืจื™ื ื”ืื•ืคื˜ื™ืžืœื™ื™ื ืขื‘ื•ืจ ืขืฆืžืš ืจืง ืขืœ ื™ื“ื™ ื‘ื“ื™ืงื”. ืงื™ื‘ืœืชื™ ืืช ื”ืชื•ืฆืื•ืช ื”ืืœื”, ืืชื” ืชืงื‘ืœ ืชื•ืฆืื•ืช ืฉื•ื ื•ืช. ืื‘ืœ ืืชื” ืจื•ืื” ืฉืืชื” ื™ื›ื•ืœ "ืœื›ื•ื•ืŸ" ืืช ื”ื’ื™ื‘ื•ื™ื™ื ืฉืœืš ื•ื”ื ื™ื›ื•ืœื™ื ืœืžืขืฉื” ืœื”ื™ื•ื•ืฆืจ ื•ืœืคืจื•ืก ืžื”ืจ ื™ื•ืชืจ.

ืื ื™ ื’ื ืžืžืœื™ืฅ ืœืš ื‘ื—ื•ื ืœืงืจื•ื ืืช ื”ืชื™ืขื•ื“ ื‘ืžืœื•ืื•, ื›ื™ ื™ื™ืชื›ื ื• ื ื™ื•ืื ืกื™ื ืกืคืฆื™ืคื™ื™ื ืœืžืขืจื›ืช ืฉืœืš.

ืžืื– ืฉื”ืชื—ืœืชื™ ืœื›ืชื•ื‘ ืขืœ ื’ื™ื‘ื•ื™ื™ื, ืื ื™ ืจื•ืฆื” ืžื™ื“ ืœื›ืชื•ื‘ ืขืœ ืขื•ื“ "ืื•ืคื˜ื™ืžื™ื–ืฆื™ื”" ืื—ืช, ืฉื”ื™ื ื™ื•ืชืจ ื ืคื•ืฆื” ืžืคืจืžื˜ืจื™ื ืฉืœ "ื›ื•ื•ื ืŸ" (ืœืžื™ื˜ื‘ ื”ื‘ื ืชื™, ื”ื™ื ืžืฉืžืฉืช ืœืคื—ื•ืช ื›ืžื” ื›ืœื™ ื’ื™ื‘ื•ื™, ืื•ืœื™ ื™ื—ื“ ืขื ื”ืคืจืžื˜ืจื™ื ืฉืชื•ืืจ ืงื•ื“ื ืœื›ืŸ), ืื‘ืœ ื–ื” ืขื“ื™ื™ืŸ ืœื ืชื•ืืจ ื’ื ืขืœ Habrรฉ.

ืื ื ืกืชื›ืœ ืขืœ ื”ืฉื•ืจื” ื”ืฉื ื™ื™ื” ื‘ืชื™ืขื•ื“, ืžืžืฉ ืžืชื—ืช ืœ-BACKUP DATABASE, ืฉื ื ืจืื”:

TO <backup_device> [ ,...n ]

ืžื” ืœื“ืขืชืš ื™ืงืจื” ืื ืชืฆื™ื™ืŸ ืžืกืคืจ ื”ืชืงื ื™ ื’ื™ื‘ื•ื™? ื”ืชื—ื‘ื™ืจ ืžืืคืฉืจ ื–ืืช. ื•ื“ื‘ืจ ืžืขื ื™ื™ืŸ ืžืื•ื“ ื™ืงืจื” - ื”ื’ื™ื‘ื•ื™ ืคืฉื•ื˜ "ื™ืชืคื–ืจ" ืขืœ ืคื ื™ ืžืกืคืจ ืžื›ืฉื™ืจื™ื. ื”ึธื”ึตืŸ. ื›ืœ "ืžื›ืฉื™ืจ" ื‘ื ืคืจื“ ื™ื”ื™ื” ื—ืกืจ ืชื•ืขืœืช, ืื™ื‘ื“ ืื—ื“, ืื™ื‘ื“ ืืช ื›ืœ ื”ื’ื™ื‘ื•ื™. ืื‘ืœ ืื™ืš ืžืจื™ื—ื” ื›ื–ื• ืชืฉืคื™ืข ืขืœ ืžื”ื™ืจื•ืช ื”ื’ื™ื‘ื•ื™?

ื‘ื•ืื• ื ื ืกื” ืœื‘ืฆืข ื’ื™ื‘ื•ื™ ื‘ืฉื ื™ "ืžื›ืฉื™ืจื™ื" ื”ืžืžื•ืงืžื™ื ื–ื” ืœืฆื“ ื–ื” ื‘ืื•ืชื” ืชื™ืงื™ื™ื”:

BACKUP DATABASE [bt]
TO 
    DISK = 'D:SQLServerbackupbt1.bak',
    DISK = 'D:SQLServerbackupbt2.bak'   
WITH COMPRESSION;

ืื‘ื•ืช ื”ืขื•ืœื, ืœืžื” ื–ื” ื ืขืฉื”?

ืขื™ื‘ื“ื• 1070072 ื“ืคื™ื ืขื‘ื•ืจ ืžืกื“ ื”ื ืชื•ื ื™ื 'bt', ืงื•ื‘ืฅ 'bt' ื‘ืงื•ื‘ืฅ 1.

ืขื™ื‘ื“ื• 2 ืขืžื•ื“ื™ื ืขื‘ื•ืจ ืžืกื“ ื”ื ืชื•ื ื™ื 'bt', ืงื•ื‘ืฅ 'bt'log' ื‘ืงื•ื‘ืฅ 1.

BACKUP DATABASE ืขื™ื‘ื“ ื‘ื”ืฆืœื—ื” 1070074 ืขืžื•ื“ื™ื ืชื•ืš 40.092 ืฉื ื™ื•ืช (208.519 MB/sec).

ื”ืื ื”ื’ื™ื‘ื•ื™ ื ืขืฉื” ืžื”ื™ืจ ื™ื•ืชืจ ื‘-25% ืกืชื ื›ืš? ืžื” ืื ื ื•ืกื™ืฃ ืขื•ื“ ื›ืžื” ืžื›ืฉื™ืจื™ื?

BACKUP DATABASE [bt]
TO 
    DISK = 'D:SQLServerbackupbt1.bak',
    DISK = 'D:SQLServerbackupbt2.bak',
    DISK = 'D:SQLServerbackupbt3.bak',
    DISK = 'D:SQLServerbackupbt4.bak'
WITH COMPRESSION;

BACKUP DATABASE ืขื™ื‘ื“ ื‘ื”ืฆืœื—ื” 1070074 ืขืžื•ื“ื™ื ืชื•ืš 34.234 ืฉื ื™ื•ืช (244.200 MB/sec).

ื‘ืกืš ื”ื›ืœ ื”ืจื•ื•ื— ื”ื•ื ื›-35% ืžื–ืžืŸ ืœืงื™ื—ืช ื’ื™ื‘ื•ื™ ืจืง ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉื”ื’ื™ื‘ื•ื™ ื ื›ืชื‘ ืœ-4 ืงื‘ืฆื™ื ื‘ื“ื™ืกืง ืื—ื“ ื‘ื• ื–ืžื ื™ืช. ื‘ื“ืงืชื™ ืžืกืคืจ ื’ื“ื•ืœ ื™ื•ืชืจ - ืื™ืŸ ืจื•ื•ื— ื‘ืžื—ืฉื‘ ื”ื ื™ื™ื“ ืฉืœื™, ื‘ืื•ืคืŸ ืื•ืคื˜ื™ืžืœื™ - 4 ืžื›ืฉื™ืจื™ื. ื‘ืฉื‘ื™ืœืš - ืื ื™ ืœื ื™ื•ื“ืข, ืืชื” ืฆืจื™ืš ืœื‘ื“ื•ืง. ื•ื‘ื›ืŸ, ืื’ื‘, ืื ื™ืฉ ืœืš ืืช ื”ืžื›ืฉื™ืจื™ื ื”ืืœื” - ืืœื” ื‘ืืžืช ื“ื™ืกืงื™ื ืฉื•ื ื™ื, ื›ืœ ื”ื›ื‘ื•ื“, ื”ืจื•ื•ื— ืฆืจื™ืš ืœื”ื™ื•ืช ืืคื™ืœื• ื™ื•ืชืจ ืžืฉืžืขื•ืชื™.

ืขื›ืฉื™ื• ื‘ื•ืื• ื ื“ื‘ืจ ืขืœ ืื™ืš ืœื”ื—ื–ื™ืจ ืืช ื”ืื•ืฉืจ ื”ื–ื”. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ืชืฆื˜ืจืš ืœืฉื ื•ืช ืืช ืคืงื•ื“ืช ื”ืฉื—ื–ื•ืจ ื•ืœืคืจื˜ ืืช ื›ืœ ื”ืžื›ืฉื™ืจื™ื:

RESTORE DATABASE [bt]
FROM 
    DISK = 'D:SQLServerbackupbt1.bak',
    DISK = 'D:SQLServerbackupbt2.bak',
    DISK = 'D:SQLServerbackupbt3.bak',
    DISK = 'D:SQLServerbackupbt4.bak'
WITH REPLACE, RECOVERY;

RESTORE DATABASE ืขื™ื‘ื“ ื‘ื”ืฆืœื—ื” 1070074 ื“ืคื™ื ืชื•ืš 38.027 ืฉื ื™ื•ืช (219.842 MB/sec).

ืงืฆืช ื™ื•ืชืจ ืžื”ืจ, ืื‘ืœ ืื™ืคืฉื”ื• ืงืจื•ื‘, ืœื ืžืฉืžืขื•ืชื™. ื‘ืื•ืคืŸ ื›ืœืœื™, ื”ื’ื™ื‘ื•ื™ ืžื•ืกืจ ืžื”ืจ ื™ื•ืชืจ ื•ืžืฉื•ื—ื–ืจ ื‘ืื•ืชื• ืื•ืคืŸ - ื”ืฆืœื—ื”? ืžื‘ื—ื™ื ืชื™, ื–ื• ื“ื™ ื”ืฆืœื—ื”. ื–ึถื” ื”ื•ื ื—ืฉื•ื‘, ืื– ืื ื™ ื—ื•ื–ืจ - ืื ืืชื” ืื ืืชื” ืžืื‘ื“ ืœืคื—ื•ืช ืื—ื“ ืžื”ืงื‘ืฆื™ื ื”ืืœื”, ืืชื” ืžืื‘ื“ ืืช ื›ืœ ื”ื’ื™ื‘ื•ื™.

ืื ืชืกืชื›ืœ ื‘ื™ื•ืžืŸ ืขืœ ืžื™ื“ืข ื”ื’ื™ื‘ื•ื™ ื”ืžื•ืฆื’ ื‘ืืžืฆืขื•ืช Trace Flags 3213 ื•-3605, ืชื‘ื—ื™ืŸ ื›ื™ ื‘ืขืช ื’ื™ื‘ื•ื™ ืœืžืกืคืจ ืžื›ืฉื™ืจื™ื, ืœืคื—ื•ืช ืžืกืคืจ ื”-BUFFERCOUNT ืขื•ืœื”. ื›ื ืจืื”, ืืชื” ื™ื›ื•ืœ ืœื ืกื•ืช ืœื‘ื—ื•ืจ ืคืจืžื˜ืจื™ื ืื•ืคื˜ื™ืžืœื™ื™ื ื™ื•ืชืจ ืขื‘ื•ืจ BUFFERCOUNT, BLOCKSIZE, MAXTRANSFERSIZE, ืื‘ืœ ืœื ื”ืฆืœื—ืชื™ ืžื™ื“, ื•ื”ืชืขืฆืœืชื™ ืœื‘ืฆืข ืฉื•ื‘ ื‘ื“ื™ืงื•ืช ื›ืืœื”, ืื‘ืœ ืœืžืกืคืจ ืฉื•ื ื” ืฉืœ ืงื‘ืฆื™ื. ื•ื—ื‘ืœ ืขืœ ื”ื’ืœื’ืœื™ื. ืื ืืชื” ืจื•ืฆื” ืœืืจื’ืŸ ื‘ื“ื™ืงื•ืช ื›ืืœื” ื‘ื‘ื™ืช, ื–ื” ืœื ืงืฉื” ืœืขืฉื•ืช ืžื—ื“ืฉ ืืช ื”ืชืกืจื™ื˜.

ืœื‘ืกื•ืฃ, ื‘ื•ืื• ื ื“ื‘ืจ ืขืœ ื”ืžื—ื™ืจ. ืื ื”ื’ื™ื‘ื•ื™ ืžื•ืกืจ ื‘ืžืงื‘ื™ืœ ืœืขื‘ื•ื“ืช ื”ืžืฉืชืžืฉื™ื, ืืชื” ืฆืจื™ืš ืœื ืงื•ื˜ ื‘ื’ื™ืฉื” ืื—ืจืื™ืช ืžืื•ื“ ืœื‘ื“ื™ืงื”, ื›ื™ ืื ื”ื’ื™ื‘ื•ื™ ื™ื•ืกืจ ืžื”ืจ ื™ื•ืชืจ, ื”ื“ื™ืกืงื™ื ืžืชืืžืฆื™ื ื™ื•ืชืจ, ื”ืขื•ืžืก ืขืœ ื”ืžืขื‘ื“ ื’ื“ืœ (ืขื“ื™ื™ืŸ ืฆืจื™ืš ืœื“ื—ื•ืก ื–ื” ืชื•ืš ื›ื“ื™ ืชื ื•ืขื”), ื•ื‘ื”ืชืื ืœื›ืš, ื”ื”ื™ืขื ื•ืช ื”ื›ืœืœื™ืช ืฉืœ ื”ืžืขืจื›ืช ืคื•ื—ืชืช.

ืกืชื ื‘ืฆื—ื•ืง, ืื‘ืœ ืื ื™ ืžื‘ื™ืŸ ื”ื™ื˜ื‘ ืฉืœื ื’ื™ืœื™ืชื™ ืฉื•ื ื’ื™ืœื•ื™. ืžื” ืฉื›ืชื•ื‘ ืœืžืขืœื” ื”ื•ื ืคืฉื•ื˜ ื”ื“ื’ืžื” ืฉืœ ืื™ืš ืืชื” ื™ื›ื•ืœ ืœื‘ื—ื•ืจ ืืช ื”ืคืจืžื˜ืจื™ื ื”ืื•ืคื˜ื™ืžืœื™ื™ื ืœืœืงื™ื—ืช ื’ื™ื‘ื•ื™ื™ื.

ื–ื›ืจื• ืฉื›ืœ ืžื” ืฉืืชื ืขื•ืฉื™ื ื ืขืฉื” ืขืœ ืื—ืจื™ื•ืชื›ื ื•ืขืœ ืื—ืจื™ื•ืชื›ื ื‘ืœื‘ื“. ื‘ื“ื•ืง ืืช ื”ื’ื™ื‘ื•ื™ื™ื ืฉืœืš ื•ืืœ ืชืฉื›ื— ืืช DBCC CHECKDB.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”