SQL Server 2016 сокращается во время миграции

введите здесь описание изображенияУ нас есть сервер DWH, работающий на SQL Server 2016, который мы планируем перенести другой сервер. Но у нас есть некоторые базы данных размером около 2T, но эти базы данных в реальном размере около 400G, я имею в виду, что если я уменьшу эту базу данных, они будут около 400G. Как вы знаете, на серверах DWH всегда есть дроп и создание объектов.

Я ищу сжатие при резервном копировании и восстановлении на новый сервер, но не вижу Ms SQL SERVER. Есть ли способ перейти на новый сервер с базами данных реального размера?


person GeorgeWidgi    schedule 01.12.2017    source источник


Ответы (1)


Вы можете сжать базу данных перед резервным копированием.

DECLARE @string     NVARCHAR(4000), 
        @Strt       INT ,
        @END        INT ,
        @DBName     NVARCHAR(255),
        @Log_Size   DECIMAL(18,5),
        @Log_Name   NVARCHAR(25),
        @String_sql NVARCHAR(MAX)

CREATE TABLE #t (srno INT IDENTITY(1,1),filename NVARCHAR(255),DBNAME NVARCHAR(50))  
CREATE TABLE #Tmp_logfile (fileName NVARCHAR(25),file_size DECIMAL(12,5),log_Name NVARCHAR(25))

--  file_id =2 Log File & file_id =1 MDf File NAme
    INSERT INTO #Tmp_logfile (fileName,file_size,log_Name)
    SELECT a.NAME , CONVERT(DECIMAL(12,5),ROUND(b.size/128.000,5)),b.name 
    FROM SYS.DATABASES  a 
    INNER JOIN  SYS.MASTER_FILES b ON a.database_id=b.database_id
    WHERE a.database_id > 4 AND b.file_id =2 


    INSERT INTO #t
    SELECT 
            'USE [' + d.name + N']' + CHAR(13) + CHAR(10) 
            + 'DBCC SHRINKFILE (N''' + mf.name + N''' , 20)'  
            + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) as fileName,d.name
            FROM 
            sys.master_files mf 
            JOIN sys.databases d 
            ON mf.database_id = d.database_id 
            WHERE d.database_id > 4 AND mf.file_id=2;



      SET @Strt=1
      SELECT @END= Max(Srno)FROM #t

      EXEC sp_msforeachdb '
                IF ''?'' not in (''master'',''model'',''msdb'',''tempdb'')
                begin
                    exec (''ALTER DATABASE [?] SET RECOVERY SIMPLE;'')
                    print ''?''
                end'


      While @Strt<=@END
        BEGIN

            SELECT  @string= FileName,@DBName= DBNAME FROM #t WHERE srno= @Strt
            SELECT  @Log_Size= file_size FROM #Tmp_logfile WHERE fileName=  @DBName

            IF @Log_Size > 5000 BEGIN   -- Limit The Log Size After which Log file to be Shrink for EG I Had Select 5 GB

                    PRINT (@string)
                    EXECUTE (@string)
            END
            SET @Strt=@Strt+1

        END       ---- SHRINKING Log File END Here

        EXEC sp_msforeachdb '
                IF ''?'' not in (''master'',''model'',''msdb'',''tempdb'')
                begin
                    exec (''ALTER DATABASE [?] SET RECOVERY FULL;'')
                    print ''?''
                end'

DROP TABLE #t
DROP TABLE #Tmp_logfile
person Alfaiz Ahmed    schedule 01.12.2017
comment
Но ручная усадка займет слишком много времени. Мне нужно что-то другое. Есть ли возможность получить сжатую резервную копию базы данных? Или сжатое восстановление? Я не могу уменьшить вручную, это занимает много времени. Я пробовал до того, как прошло 3 дня, он был обработан только на 50%. - person GeorgeWidgi; 01.12.2017
comment
Каков текущий размер журнала вашей базы данных - person Alfaiz Ahmed; 01.12.2017
comment
вам нужно сделать резервную копию файла в ZIP или RAR FIle. - person Alfaiz Ahmed; 01.12.2017
comment
база данных работает в простом режиме, размер журнала составляет около 25 ГБ. Я говорю о файлах данных. Если мы сократим файл данных, мы получим 600G. Я хочу вернуть этот выделенный пустой размер. - person GeorgeWidgi; 01.12.2017
comment
zip или rar могут быть и тем и другим, не имеет значения. - person GeorgeWidgi; 01.12.2017
comment
какой у вас INtial_siz(MB)Можете ли вы проверить это в файле - person Alfaiz Ahmed; 01.12.2017
comment
Исходный размер 1.063.625, а также я добавил картинку в сообщение. Если я уменьшу, сколько места я заработаю на картинке. - person GeorgeWidgi; 01.12.2017
comment
Только не это, это сжатие ФАЙЛА базы данных. не хочу ли я ЗНАТЬ, ЕСТЬ INtial_siz(MB). Вы получите это IN DB_NAME ››Properties››File ››INtial_siz(MB) - person Alfaiz Ahmed; 01.12.2017
comment
Да, я понял, но мой начальный размер 1.063.625 в dbname››properties››file››initial size. - person GeorgeWidgi; 01.12.2017
comment
Попробуйте это для сжатия MDF_File SELECT * FROM Sys.databases SELECT * FROM SYS.master_files WHERE file_id=1 USE [Test] DBCC SHRINKFILE (N'MDF File Name', 404805) - person Alfaiz Ahmed; 01.12.2017
comment
что делает этот запрос? - person GeorgeWidgi; 01.12.2017
comment
уменьшит файл данных вашего файла. ПРИМЕЧАНИЕ. Перед сжатием вы должны сделать резервную копию БД, чтобы избежать возникновения каких-либо проблем. - person Alfaiz Ahmed; 01.12.2017
comment
да, как я понял, это не так, когда резервное копирование автоматически сжимает файл, верно? спасибо за скрипт и помощь Ахмеду - person GeorgeWidgi; 01.12.2017
comment
@GeorgeWidgi Есть способ, ЕСЛИ вы пройдете сценарий, вы обязательно его найдете. Убедитесь, что когда-либо вы запускаете сценарий резервного копирования непосредственно перед запуском сжимающего файла. Это решит вашу проблему. Спасибо. - person Alfaiz Ahmed; 01.12.2017