将已有数据库设置为包含数据库错误的解决方法

将已有数据库设置为包含数据库错误的解决方法

 
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

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'

 

posted @ 2013-11-24 22:37  桦仔  阅读(406)  评论(0编辑  收藏  举报