使用以下查询:
SELECT Name, Status FROM dbo.sysdatabases
WHERE name IN ( 'db_name' )
Run Code Online (Sandbox Code Playgroud)
在某些情况下,我得到状态 = 24,有时是 1024,有时是 65544
我看到,即使状态为 24,我也可以从 SQL Management Studio 打开并检查数据库的内容,但不能从检查状态至少为 1024 的旧应用程序中检查。
当我要求 DBA 解决这个问题时,他们运行了一些魔法脚本,状态上升到 65544 并且一切正常,我希望这些状态有一些名称,而不仅仅是像 24、1024、65544 这样的数字。
我已经检查过这个链接:sysdatabases
其中包含此表:
状态位,其中一些可以由用户使用 ALTER DATABASE 设置(只读、离线、单用户等):
1 = 自动关闭;用 ALTER DATABASE 设置。
4 = 选择进入/批量复制;使用 ALTER DATABASE RECOVERY 设置。
8 = 截断。登录chkpt;使用 ALTER DATABASE RECOVERY 设置。
16 = 撕页检测,通过 ALTER DATABASE 设置。
32 = 加载。
64 = 预恢复。
128 = 恢复。
256 = 未恢复。
512 = 离线;用 ALTER DATABASE 设置。
1024 = 只读;用 ALTER DATABASE 设置。
2048 = dbo 只使用;使用 ALTER DATABASE RESTRICTED_USER 设置。
4096 = 单用户;用 ALTER DATABASE 设置。
32768 = 紧急模式。
4194304 = 自动收缩,使用 ALTER DATABASE 设置。
1073741824 = 完全关闭。
但我在那里没有看到 24 和 65544 :(
其他是记录标志的组合,例如 24 是 16 和 8。
这是一种模拟可选参数的方法,在例如 C iirc 中使用,数字1, 2, 4, 8
等的结构是这样的,因为它们对应于以任何唯一方式组合创建唯一数字的二进制值。接受它们的函数然后使用位掩码来提取每个单独的数字。例如,如果您将值 6 发送给一个函数,那么我们知道这是 4 和 2 的组合,要使用位掩码找出这一点,我们会这样做:
0110 // 6
AND 0010 // 2
== 0010
0110 // 6
AND 0100 // 4
== 0100
Run Code Online (Sandbox Code Playgroud)
两个语句都将被评估为true
,因此我们已经找到了各个值。
注意:在现实世界中,我们将遍历从 1、2、4、8、16 等到整数的最大值(或参数设置的任何数据类型)的所有值。
归档时间: |
|
查看次数: |
3249 次 |
最近记录: |