MicrosoftSQLServer数据库修改排序规则
最近因为测试环境 MSSQL 服务器排序规则区分⼤⼩写,导致实⽤到临时表(tempdb)的数据、临时对象都区分了⼤⼩写。所以重建了系统数据库并更改了排序规则,这⾥再次总结⼀下。
开始之前,先确认排序规则(或⼤⼩写是否敏感)
1
1.
--查看服务器排序规则(安装时指定的排序规则)
2.
SELECT SERVERPROPERTY(
'COLLATION')
AS ServerCollation
3.
,DATABASEPROPERTYEX(
'tempdb',
'COLLATION')
AS TempdbCollation
4.
,DATABASEPROPERTYEX(DB_NAME(), 'COLLATION')
AS CurrentDBCollation
5.
--查看数据库排序规则
6.
SELECT
name, collation_name
FROM sys.databases
7.
8.
此环境实例中,服务器排序规则为 Chinese_PRC_BIN ,当前数据库排序规则为 Chinese_PRC_CI_AS。若当前数据库创建的所有对象和执⾏脚本时,如果⽤到了变量、临时对象等,⼤⼩写不⼀致则出现问题。⼆进制(_BIN)排序规则是区分⼤⼩写的,参考 。
安装实例时指定的排序规则,就是 master 数据库的排序规则,同时 model 和 msdb 的排序规则也保持⼀致,⽽ tempdb 和⽤户数据库的排序规则都是参照 model 数据库⼀样的。系统数据库是不能直接更改排序规则的,因此只能重建系统数据库,且让系统数据库的排序规则都⼀致。
重建实例排序规则和系统数据库排序规则:
1. 备份系统数据库!必要的,失败了或者以后要使⽤当前环境时,还可以回退!
2. 记住所有数据库及⽂件路径,保持到 excel 中。如果记得住所有数据库位置的话就不⽤了。
3. 导出服务器配置(sp_configure)到 excel。因为重建系统数据库后配置会被初始化。
sqlserver备份表语句
4. 导出账号信息到 txt。数据库重建,账户信息都会丢失,除了备份也要单独备份账号。()
5. 导出链接服务器⽣产脚本到 txt ,如果有的话。
6. 导出代理作业到 txt 。
--当前数据库是否⼤⼩写敏感
9.
SELECT
CASE
WHEN  N
'A'=N
'a'
THEN  N
'不敏感'
ELSE  N
'敏感'
END
select  DB_NAME(database_id) as  name ,physical_name from  sys.master_files
1
7. (如果还有其他配置,如审核、邮件配置、策略等,都保存出来,后续再重建)
8. 分离所有⽤户数据库。
1
1.
select
'ALTER DATABASE ['+
name+
'] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE'+
char(
10)+
'go'+
char(
10)
2.
+
'EXEC master.dbo.sp_detach_db @dbname = N'''+
name+
''''+
char(
10)+
'go'+
char(
10)
3.
from sys.databases
9. 停⽌所有数据库相关服务。
10. 重建数据库并制定新的排序规则。打开命令⾏,进⼊安装⽬录。
11. 启动 SQL Server 引擎服务,其他暂不启动。
12. 创建登录账户(之前导出的脚本)
13.  附加所有⽤户数据库。
14. 创建代理作业、链接服务器、更配置等!
完成!~
如果重建系统数据库后,还原 master 数据库,那么服务器排序规则和 master 数据库排序规则都还原和以前⼀样,所以不能还原,除⾮恢复到以前的环境。
如果还原 msdb 或 model ,该数据库排序规则也会还原,所以系统数据库备份都不要还原,重建系统数据库之后只能重新配置。更改⽤户数据库排序规则:
from  sys.databases
where
name
not
in (
'master',
'model',
'msdb',
'tempdb')
cd  D:\Software\en_sql_server_2008_r2_enterprise_x86_x64_ia64_dvd_520517setup /QUIET /ACTION=REBUILDDATABASE /instancename=mssqlserver /SQLSYSADMINACCOUNTS=服务器账号 /sapwd=密码 /sqlcollation=Chinese_PR
1
2ALTER  DATABASE  test  COLLATE  Chinese_PRC_CI_AS
1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。