tsql 以单词形式查找数据库的状态
我想了解 SQL Server 场中每个数据库的状态。我正在使用:
select name,
case status
when 32 then 'loading'
when 128 then 'recovering'
when 512 then 'offline'
when 4096 then 'single user'
when 64 then 'pre recovery'
when 256 then 'not recovered'
else 'Normal'
end
from sysdatabases
where name not in('master','msdb','model','tempdb','reportserver','reportservertempdb','pubs','distribution','northwind')
但一位朋友告诉我 Status 可以是 2 的组合,例如 32+128 = 32128。 如何使用此图查找数据库状态?
I want to know status of every database across a SQL Server farm. I was using:
select name,
case status
when 32 then 'loading'
when 128 then 'recovering'
when 512 then 'offline'
when 4096 then 'single user'
when 64 then 'pre recovery'
when 256 then 'not recovered'
else 'Normal'
end
from sysdatabases
where name not in('master','msdb','model','tempdb','reportserver','reportservertempdb','pubs','distribution','northwind')
But a friend told me that Status could be combination of 2 e.g. 32+128 = 32128.
How can I find database status using this figure?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
状态号由状态字段值的“on”位组成。因此,状态可以是 2 个状态的组合(例如 32 + 128),但您可以通过检查状态值中特定位的值来获取各个状态。
您可以执行以下操作:
请参阅 sqlserver 中 sysdatabases 的不同状态位 用于检查特定值的示例脚本。
编辑:
MSDN 库有这个 说明 sysdatabases 的 status 和 status2 字段中各个位的值
The status number is made up of the "on" bits of the status field value. So, status can be a combination of 2 states (eg 32 + 128) but you can get the individual states by checking the values of specific bits in the status value.
You could do something like this:
See different status bits of sysdatabases in sqlserver for an example script that checks for specific values.
EDIT:
MSDN library has this to say about the values of the various bits in the status and status2 fields of sysdatabases
所有状态编号均以 10 为基数(十进制,我们常用的编号系统)显示。
但是,您会注意到所有数字都是 2 的倍数,因为
它们代表一个位位置(基数 2、0 或 1)。
512 十进制 = 200 十六进制 = 0010 0000 0000 二进制
1024 十进制 = 400 十六进制 = 0100 0000 0000
二进制是按位与运算符。逻辑表为:
如您所见,如果将两个位进行 AND 运算,则两个位都必须为 1
结果为 1。AND ( & ) 运算符用于屏蔽所有其他位
确定是否设置了特定位。
因此,如果将状态值与 512 相与,则如果该位是,结果将为 512
放。否则,它将为零。
由于 512 是第 10 位(从右到左计数),因此 status &第512章
状态值中的位为 0100 0000 0000。如果状态值中的第 10 位为 1
status 值,结果将为 1,表示开启 OFFLINE 选项
开(设置)。
要有效地使用状态列,您至少需要一个基本的
二进制和十六进制数字系统的知识。其实是一样的
原则适用于任何基数(您只是一种表示大数字中每个数字的方法)
基地)。
曼乔特
这将帮助您开始:
以下sql:
All of the status numbers are shown in base 10 (decimal, our usual numbering system).
However, you will note that all of the numbers are a multiple of 2 because
they represent a bit position (base 2, 0 or 1).
512 decimal = 200 hex = 0010 0000 0000 binary
1024 decimal = 400 hex = 0100 0000 0000 binary
The & is the bitwise AND operator. The logic table is:
As you can see, if you AND two bits together, both bits must be 1 for the
result to be 1. The AND ( & ) operator is used to mask all of the other bits to
determine whether or not a particular bit is set.
So, if you AND the status value with 512, then result will be 512 if the bit is
set. Otherwise, it will be zero.
Since 512 is the 10th bit (counting right to left), status & 512 will AND all of
the bits in the status value with 0100 0000 0000. If the 10th bit is a 1 in the
status value, the result will be 1, indicating that the OFFLINE option is turned
on (set).
To use the status columns effectively, you need at a least a rudimentary
knowledge of binary and hexidecimal number systems. Actually, the same
principles apply of any base (you just a way to represent each digit for large
bases).
Manjot
This will get you started:
The following sql:
这是一个旧线程,所以也许这个答案有点晚了,但您也可以使用 sys.databases 表,该表将所有位分解为列。
This is an old thread so perhaps this answer is a bit late, but you can also use sys.databases table which has all the bits broken out into columns.
对于 Sql server 2005 或更高版本,您可以使用
For Sql server 2005 or better you can use