将已有数据库设置为包含数据库错误的解决方法
将已有数据库设置为包含数据库错误的解决方法
http://blogs.msdn.com/b/apgcdsd/archive/2012/07/03/sql-server-2012-contained-database.aspx
http://blog.csdn.net/burgess_liu/article/details/7477470
用redgate公司的SQL SEARCH找出以前引用到Chinese_PRC_CI_AS排序规则的相关对象,以后逐个逐个删除
1. 将数据库的字符集 Chinese_PRC_CI_AS修改为Latin1_General_100_CI_AS_KS_WS_SC
2、允许数据库实例打开包含选项
http://blog.csdn.net/burgess_liu/article/details/7477470
1 USE [master] 2 GO
用redgate公司的SQL SEARCH找出以前引用到Chinese_PRC_CI_AS排序规则的相关对象,以后逐个逐个删除
1. 将数据库的字符集 Chinese_PRC_CI_AS修改为Latin1_General_100_CI_AS_KS_WS_SC
1 ALTER DATABASE [pratice] COLLATE Latin1_General_100_CI_AS_KS_WS_SC 2 GO
因为是自己家里的测试数据库,如果是实际生产环境,一定要逐个逐个对象修改排序规则,不能删除这些对象
例如,修改一张表某个字段的排序规则
1 ALTER TABLE tb ALTER COLUMN col2 VARCHAR ( 10) COLLATE Latin1_General_100_CI_AS_KS_WS_SC 2 GO
不改排序规则就会报以下错误
2、允许数据库实例打开包含选项
1 EXEC [sys].[sp_configure] @configname = 'contained database authentication', -- varchar(35) 2 @configvalue = 1 -- int 3 RECONFIGURE WITH override
3、设置兼容性级别,以防止是低于SQL2012版本的数据库
1 ALTER DATABASE [pratice] SET COMPATIBILITY_LEVEL = 110 2 GO
4、使用T_SQL将数据库转换为部分包含的数据库,一定要切断与数据库的所有连接才能更改数据库选项
1 USE [master] 2 GO 3 ALTER DATABASE [pratice] SET CONTAINMENT = PARTIAL 4 GO
这时候不能有连接,连接到数据库,否则报错
5、将现有的数据库用户改为包含数据库用户
1 USE [pratice] 2 GO 3 DECLARE @username SYSNAME; 4 DECLARE user_cursor CURSOR 5 FOR 6 SELECT dp.name 7 FROM sys.database_principals AS dp 8 JOIN sys.server_principals AS sp ON dp.sid = sp.sid 9 WHERE dp.authentication_type = 1 10 AND sp.is_disabled = 0; 11 OPEN user_cursor 12 FETCH NEXT FROM user_cursor INTO @username 13 WHILE @@FETCH_STATUS = 0 14 BEGIN 15 EXECUTE sp_migrate_user_to_contained @username = @username, 16 @rename = N'keep_name', @disablelogin = N'disable_login'; 17 FETCH NEXT FROM user_cursor INTO @username 18 END 19 CLOSE user_cursor; 20 DEALLOCATE user_cursor;
6、查看当前数据库的用户有哪些
1 USE [pratice] 2 GO 3 SELECT dp.name 4 FROM sys.database_principals dp 5 JOIN sys.server_principals sp ON dp.sid = sp.sid 6 WHERE dp.authentication_type = 1 7 AND sp.is_disabled = 0
7、将数据库用户迁移为包含数据库用户,使用sp_migrate_user_to_contained存储过程
1 EXEC sp_migrate_user_to_contained @username = N'NonContainedUser', 2 @rename = N'keep_name', @disable_login = N'disable_login'