(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\test20171214.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\test20171214.bak' WITH FILE = 1
, MOVE N'test' TO N'D:\database\test.mdf'
, MOVE N'test_log' TO N'D:\database\test_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

posted @ 2019-06-20 12:22  郭大侠1  阅读(229)  评论(0编辑  收藏  举报