系统视图sys.databases的collation_name 列为 NULL的问题

某开发人员遇到新建数据库无法访问的问题,原因是sys.databases视图中collation_name列值为NULL。通过SQL Server Profiler定位到问题,发现可能原因是数据库OFFLINE或设置为'AUTO_CLOSE'。调整数据库属性,关闭auto_close选项后,问题得到解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


今天接到一位开发同事报告说无法打开数据库列表。错误包括称:某个新建的DB没权限访问。但是其他的新建DB是没有包同样的问题,都可以正常使用。

根据情况我操作了一遍果然如此。思考了一下,未弄清什么回事。没有办法,启用法宝sql server profilter抓取sql。

 

拿到sql 以后发现,该数据库多出一下语句:

use [db_name]
SELECT dtb.collation_name AS [Collation], CAST(DATABASEPROPERTYEX(dtb.name, 'Version') AS int) AS [Version]
, dtb.compatibility_level AS [CompatibilityLevel] 
FROM master.sys.databases AS dtb where name = db_name()


 

通过这个语句的前一SQL语句发现原来,sys.databases系统视图中的collation_name 列的值为 NULL。

查看sql server 2008 帮助文档发现:(以下为摘自帮助文档)

sys.databases (Transact-SQL)

Microsoft SQL Server 实例中的每个数据库都对应一行。

如果数据库没有处于 ONLINE 状态,或者将 AUTO_CLOSE 设置为 ON 并且数据库关闭,则某些列的值可能为 NULL。如果数据库处于 OFFLINE 状态,则低权限的用户无法看到对应行。若要在数据库处于 OFFLINE 状态的情况下查看对应行,用户必须至少具有 ALTER ANY DATABASE 服务器级权限或master 数据库中的 CREATE DATABASE 权限。

选项说明默认值

AUTO_CLOSE

当设置为 ON 时,数据库将在最后一个用户退出后完全关闭,它占用的资源也将释放。当用户尝试再次使用该数据库时,该数据库将自动重新打开。

当设置为 OFF 时,最后一个用户退出后数据库仍保持打开。

无论使用什么操作系统,当使用 SQL Server 2000 Desktop Engine 或 SQL Server Express 时,对于所有数据库均为 True,而使用所有其他版本时,对于所有数据库均为 False。

(帮助文档结束)

就是说改列为空有两可能。

1、数据库 OFFLIN。

2、数据库设为“AUTO_CLOSE().

打开数据库的属性面板-》OPTION。其中的 set auto_closed 为"true”。问题答题清晰。连到该数据库库后问题解决。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值