zoukankan      html  css  js  c++  java
  • (5.1.1)引擎管理——包含数据库解决迁移造成孤立用户问题

    关键字:包含数据库,部分包含数据库,迁移数据库,孤立用户解决办法

    前提:2012以上才可以用

    限制

    部分包含数据库不允许以下功能。

    • 部分包含数据库不能使用复制、更改数据捕获或更改跟踪。

    • 编号过程

    • 绑定到架构的对象,且依赖于可更改排序规则的内置功能

    • 绑定因排序规则更改而导致的变化,包括对对象、列、符号或类型的引用。

    • 复制、变更数据捕获和更改跟踪。

    概念:参考(MSDN:包含数据库迁移包含数据库

    部分包含数据库
      部分包含数据库是一种包含数据库,可允许存在跨越数据库边界的某些功能。 SQL Server 包括确定何时跨越包含边界的功能。
    包含的用户
    包含数据库有两种用户类型。
    具有密码的包含数据库用户
      具有密码的包含数据库用户由数据库进行身份验证。
    Windows 主体
      授权的 Windows 用户和授权的 Windows 组的成员可直接连接到数据库,而无需登录 master 数据库。 数据库信任 Windows身份验证。

    查看数据库的包含状态: 
    database_uncontained_usage
    sys.dm_db_uncontained_entities (Transact-SQL)

    好处:
    (1)数据库迁移,避免孤立用户
      在移动数据库时会发生的问题之一是:在数据库从一个实例移到另一个实例时,某些重要信息可能无法使用。 
    例如,登录信息存储在实例中,而不是存储于数据库中。 
    如果将非包含数据库从 SQL Server的一个实例移到另一个实例,则这些信息会留在原地。造成孤立用户问题。

    (2)
    使用 AlwaysOn 的包含数据库用户的好处,避免孤立用户
      通过创建包含用户,可使用户直接连接到包含数据库。 
      这在高可用性和灾难恢复方案中(例如在 AlwaysOn 解决方案中)是非常重要的功能。 
      如果用户是包含用户,则在故障转移时,用户无需在承载辅助副本的实例上创建登录名,就能够连接到辅助副本。 这会给用户带来直接的好处。

    (3)数据库管理,可以直接在数据库操作
      通过在数据库中维护数据库设置,而非在 master 数据库中进行维护,使每个数据库所有者都可以更好地控制其数据库,而不必向数据库所有者授予 sysadmin 权限。

     

    
    

    一、如何开启并创建相关的数据库用户

    1.1 修改实例配置,  用代码或界面操作

    EXEC sys.sp_configure N'contained database authentication', N'1'
    GO
    RECONFIGURE WITH OVERRIDE
    GO

       


    1.2 修改数据库 ( 希望变成包含数据库的DB ) 配置,  用代码或界面操作:

    USE [master]
    GO
    ALTER DATABASE [test] SET CONTAINMENT = PARTIAL WITH NO_WAIT
    GO

       


    1.3 为测试库创建带密码的用户, 代码或界面操作:

    USE [test]
    GO
    CREATE USER [test] WITH PASSWORD=N'test'
    GO
    
    
    
    USE [test]
    GO
    ALTER ROLE [db_owner] ADD MEMBER [test]
    GO

     


    二、如何连接?

       

      

    三、如何备份后还原到其它实例上?

    先备份:
    
    BACKUP DATABASE test TO DISK=N'd:database_bak	est20171214.bak' WITH COMPRESSION,STATS=50
    
    再还原, 注:其它实例必须也开启包含数据库配置!
    EXEC sys.sp_configure N'contained database authentication', N'1'
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    
    USE [master]
    RESTORE DATABASE [test] FROM 
    DISK = N'E:database_bak	est20171214.bak' WITH FILE = 1
    , MOVE N'test' TO N'D:database	est.mdf'
    , MOVE N'test_log' TO N'D:database	est_log.ldf', NOUNLOAD, STATS = 50
    GO

    四、还原之后, 马上可以用 1.3 创建的用户, 用步骤 (二) 的方法访问迁移到新实例上的这个包含数据库了!

     

    参考文章: 

    ---------------------
    实操原文:CSDN -》吉普赛的歌 :https://blog.csdn.net/yenange/article/details/78803551 
    包含数据库概念:https://docs.microsoft.com/zh-cn/sql/relational-databases/databases/contained-databases?view=sql-server-2014

    迁移包含数据库:https://docs.microsoft.com/zh-cn/sql/relational-databases/databases/migrate-to-a-partially-contained-database?view=sql-server-2014

  • 相关阅读:
    Java实现 洛谷 P1060 开心的金明
    (Java实现) 洛谷 P1605 迷宫
    (Java实现) 洛谷 P1605 迷宫
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
    Java实现 洛谷 P1064 金明的预算方案
    (Java实现) 洛谷 P1031 均分纸牌
    QT树莓派交叉编译环开发环境搭建(附多个exe工具下载链接)
    武则天红人对唐睿宗的桃色报复(如此缺少城府,注定了要在宫廷中过早地出局)
  • 原文地址:https://www.cnblogs.com/gered/p/11057997.html
Copyright © 2011-2022 走看看