你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

迁移:SQL Server 到 Azure Arc 启用SQL 托管实例

本方案将逐步引导你通过两种不同的备份和还原方法,将数据库从 SQL Server 实例迁移到 Azure Arc 中的 Azure SQL 托管实例。

使用 Azure Blob 存储

使用 Azure Blob 存储迁移到 Azure Arc 启用的 SQL 托管实例。

此方法使用 Azure Blob 存储作为临时存储位置,你可将数据库备份到该位置,然后从中还原。

先决条件

步骤 1:预配 Azure Blob 存储

  1. 按照创建 Azure Blob 存储帐户中所述的步骤操作
  2. 启动 Azure 存储资源管理器
  3. 登录到 Azure 以访问在上一步骤中创建的 Blob 存储
  4. 右键单击 Blob 存储帐户,并选择“创建 Blob 容器”以创建要将备份文件存储到的新容器

步骤 2:获取存储 Blob 凭据

  1. 在 Azure 存储资源管理器中,右键单击刚刚创建的 Blob 容器,并选择“获取共享访问签名”

  2. 选择“读取”、“写入”和“列出”

  3. 选择“创建”

    请记下此屏幕中的 URI 和查询字符串。 在后面的步骤中需要用到这些信息。 单击“复制”按钮将这些信息保存到记事本/OneNote 等程序中

  4. 关闭“共享访问签名”窗口

步骤 3:将数据库文件备份到 Azure Blob 存储

在此步骤中,我们将连接到源 SQL Server,并创建要迁移到 SQL 托管实例 - Azure Arc 的数据库的备份文件。

  1. 启动 Azure Data Studio

  2. 连接到 SQL Server 实例,其中包含你要迁移到 SQL 托管实例 - Azure Arc 的数据库

  3. 右键单击该数据库并选择“新建查询”

  4. 使用在前面步骤中记下的共享访问签名中的信息替换 <...> 指示的占位符,按以下格式准备查询。 替换值后,运行该查询。

    IF NOT EXISTS  
    (SELECT * FROM sys.credentials
    WHERE name = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>')  
    CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>]
      WITH IDENTITY = 'SHARED ACCESS SIGNATURE',  
       SECRET = '<SAS_TOKEN>';  
    
  5. 同样,请按如下所示准备 BACKUP DATABASE 命令,以在 Blob 容器中创建备份文件。 替换值后,运行该查询。

    BACKUP DATABASE <database name> TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<file name>.bak'
    
  6. 打开 Azure 存储资源管理器,验证在上一步骤中创建的备份文件是否显示在 Blob 容器中

通过以下资源详细了解如何备份到 URL:

步骤 4:将数据库从 Azure Blob 存储还原到 SQL 托管实例 - Azure Arc

  1. 在 Azure Data Studio 中,登录并连接到 SQL 托管实例 - Azure Arc。

  2. 展开“系统数据库”,右键单击“master”数据库并选择“新建查询”

  3. 在查询编辑器窗口中,准备并运行在上一步骤中所用的同一查询以创建凭据。

    IF NOT EXISTS  
    (SELECT * FROM sys.credentials
    WHERE name = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>')  
    CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>]
      WITH IDENTITY = 'SHARED ACCESS SIGNATURE',  
      SECRET = '<SAS_TOKEN>';  
    
  4. 准备并运行以下命令,以验证备份文件是否可读且完好无损。

    RESTORE FILELISTONLY FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<file name>.bak'
    
  5. 按如下所示准备并运行 BACKUP DATABASE 命令,将备份文件还原到 SQL 托管实例 - Azure Arc 上的数据库

    RESTORE DATABASE <database name> FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<file name>.bak'
    WITH MOVE 'Test' to '/var/opt/mssql/data/<file name>.mdf'
    ,MOVE 'Test_log' to '/var/opt/mssql/data/<file name>.ldf'
    ,RECOVERY;  
    GO
    

方法 2:使用 kubectl 将备份文件复制到 Azure SQL 托管实例 - Azure Arc Pod 中

此方法说明如何获取通过任一方法创建的备份文件,然后将其复制到 Azure SQL 托管实例 Pod 中的本地存储,以便可以像在 Windows 或 Linux 上的典型文件系统中那样,从该文件进行还原。 此方案使用命令 kubectl cp 将文件从某个位置复制到 Pod 的文件系统中。

先决条件

  • 安装并配置 kubectl,使其指向部署了 Azure Arc 数据服务的 Kubernetes 群集
  • 安装好 Azure Data Studio 或 SQL Server 管理服务器等工具,并将其连接到要在其中创建备份文件的 SQL Server;或者,准备好一个已在本地文件系统上创建的现有 .bak 文件。

步骤 1:备份数据库(如果尚未这样做)

就像在磁盘中进行任何典型的 SQL Server 备份一样,将 SQL Server 数据库备份到本地文件路径:

BACKUP DATABASE Test
TO DISK = 'C:\Backupfiles\test.bak'
WITH FORMAT, MEDIANAME = 'Test' ;
GO

步骤 2:将备份文件复制到 Pod 的文件系统中

找到部署了 SQL 实例的 Pod 的名称。 该名称通常类似于 pod/<sqlinstancename>-0

运行以下命令获取所有 Pod 的列表:

kubectl get pods -n <namespace of data controller>

示例:

将备份文件从本地存储复制到群集中的 SQL Pod。

kubectl cp <source file location> <pod name>:var/opt/mssql/data/<file name> -n <namespace name> -c arc-sqlmi

#Example:
kubectl cp C:\Backupfiles\test.bak sqlinstance1-0:var/opt/mssql/data/test.bak -n arc -c arc-sqlmi

步骤 3:还原数据库

准备并运行 RESTORE 命令,将备份文件还原到 Azure SQL 托管实例 - Azure Arc

RESTORE DATABASE test FROM DISK = '/var/opt/mssql/data/<file name>.bak'
WITH MOVE '<database name>' to '/var/opt/mssql/data/<file name>.mdf'  
,MOVE '<database name>' to '/var/opt/mssql/data/<file name>_log.ldf'  
,RECOVERY;  
GO

示例:

RESTORE DATABASE test FROM DISK = '/var/opt/mssql/data/test.bak'
WITH MOVE 'test' to '/var/opt/mssql/data/test.mdf'  
,MOVE 'test' to '/var/opt/mssql/data/test_log.ldf'  
,RECOVERY;  
GO

详细了解 Azure Arc 启用的 SQL 托管实例的特性和功能

首先创建数据控制器

创建 Azure Arc 启用的 SQL 托管实例