Поделиться через


Ошибка 3156 при восстановлении базы данных с оптимизированной для памяти файловой группой в SQL Server

В этой статье описывается обходное решение ошибки 3156, которая возникает при попытке восстановить базу данных с оптимизированной для памяти файловой группой в SQL Server.

Применяется к: SQL Server

Симптомы

При попытке восстановить базу данных с оптимизированной для памяти файловой группой в SQL Server вы получите следующее сообщение об ошибке:

Msg 3156, Level 16, State 6, Line 1
<Файл базы данных> не может быть восстановлен в файле Driver<>:\<Folder Path>\<Database Folder.> Укажите допустимое расположение для файла с помощью предложения WITH MOVE.

Причина

В процессе восстановления базы данных SQL Server ядро СУБД создаст папку для оптимизированной для памяти файловой группы. Эта проблема возникает, если папка уже имеет то же имя в том же пути к папке, а папка используется SQL Server или другими процессами.

Обходное решение

При восстановлении базы данных используйте другое имя папки или другой путь к папке.

Пример скрипта

  • Пример сценария создания базы данных с файловой группой

    USE [master];
    GO
    CREATE DATABASE Contoso
    ON PRIMARY
      ( NAME = 'Contoso_Primary',
        FILENAME=
           'C:\SQLserver\Contoso\Contoso_data.mdf',
        SIZE=4MB,
        MAXSIZE=10MB,
        FILEGROWTH=1MB),
    FILEGROUP Contoso_FG1
      ( NAME = 'Contoso_FG1',
        FILENAME =
           'C:\SQLserver\Contoso\Contoso_FG1.ndf',
        SIZE = 1MB,
        MAXSIZE=10MB,
        FILEGROWTH=1MB)
    
    ALTER DATABASE Contoso 
    ADD FILEGROUP [Contoso_FG1] CONTAINS MEMORY_OPTIMIZED_DATA 
    GO
    
  • Пример сценария восстановления базы данных

    USE [master]
    GO
    RESTORE DATABASE [Contoso] FROM  DISK = N'C:\backup\compress\Contoso\Contoso.bak' WITH FILE = 1,
    MOVE N'Contoso_data' TO N'C:\SQLserver\Contoso\Contoso_data.mdf',
    MOVE N'Contoso_log' TO N'C:\SQLServer\Contoso\Contoso_log.ldf',
    MOVE N'<Database File>' TO N'<Driver>:\<Folder Path>\<Database Folder>',
    Replace,
    NOUNLOAD, 
    STATS = 5
    GO
    

    Примечание.

    <Database Folder> Если этот параметр не используется, Replace ключевое слово в скрипте обеспечит завершение процесса восстановления без ошибок.

См. также

MSSQLSERVER_3156