【问题标题】:Azure SQL Database: Clean or restore database via SQL scriptAzure SQL 数据库:通过 SQL 脚本清理或还原数据库
【发布时间】:2018-11-23 11:36:42
【问题描述】:

我们有一个 Windows 本地计划任务,需要迁移到 Azure Paas。

任务的范围是每天恢复同一数据库的干净版本以提高站点的性能。

任务操作是使用以下脚本运行批处理文件。

SQLCMD -E -S server-name -Q "use master; alter database myDatabase set 
single_user with rollback immediate; alter database myDatabase set 
multi_user; RESTORE DATABASE myDatabase FROM DISK='C:\Dir\myDatabase.bak'; 
USE myDatabase; CREATE USER myUser FOR LOGIN myUser; USE myDatabase; ALTER 
ROLE db_owner ADD MEMBER myUser"

要求是通过 Visual Studio 创建 Azure C# WebJob 项目并将其发布为 Azure WebJob 来实现类似的功能。
应该只保留数据库的架构,没有数据或日志。

    using (SqlConnection connection = new SqlConnection(ConfigurationManager.AppSettings["AzureDBConnString"]))
    {
        connection.Open();

        var queryString_RestoreMyDatabase = @"?????"; // what to add here?

        using (SqlCommand cmd_RestoreMyDatabase = new SqlCommand(queryString_RestoreMyDatabase, connection))
        {
            cmd_RestoreMyDatabase.ExecuteNonQuery();
        }
    }

以上可能吗?我们可以为queryString_RestoreMyDatabase使用哪些SQL命令来实现这篇文章的标题?

【问题讨论】:

    标签: c# azure azure-sql-database


    【解决方案1】:

    您可以复制数据库,而不是 RESTORE:

    -- Execute on the-- Execute on the master database.
    -- Start copying.
    CREATE DATABASE Database2 AS COPY OF Database1;
    

    Copy an transactionally consistent copy of an Azure SQL database

    要使用现有数据库的副本替换数据库,您可以从以下内容开始:

    if  exists (select state from sys.databases where name = 'test_new')
    begin
      drop database test_new;
    end
    
    create database test_new as copy of test_template;
    while (0 != coalesce((select state from sys.databases where name = 'test_new'),-1 ))
    begin
      waitfor delay '0:0:10'
    end
    
    alter database test modify name = test_old;
    alter database test_new modify name = test;
    drop database test_old;
    print 'completed sucessfully'
    

    【讨论】:

    • 谢谢大卫,替换现有数据库怎么样,这是否需要创建一个不存在的具有不同名称的新数据库以及代码中对当前数据库的引用呢?
    • 谢谢你,大卫,你的时间,它有效。注意到脚本大约需要 6 分钟才能完成,假设这是正常的?考虑需要创建一个新的数据库?
    • 你知道在 Azure 中每天运行一次的成本是多少。在这里提出了一个新问题:stackoverflow.com/questions/54460615/…
    猜你喜欢
    • 1970-01-01
    • 2011-12-12
    • 2018-07-03
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多