sybase 删了部分库记录引起offline的修复记录
时间:2009-06-20 来源:ulj
134.207.88.15
Sybase系统表相关
Posted by dbsos on 五月 18, 2009
其他
1. 只有在master数据库中才能有的系统表
系统表名 表中的内容
Sysconfigures 一行记录了用户可设置的配置参数
Syscurconfigs 有关SQL Server当前正使用的配置参数情况
Sysdatabases 一行记录了SQL Server中的一个数据库
Sysdevices 一行记录了数据库的每一磁带转储设备,磁盘转储设备,数据库设备和磁盘分区
设备和磁盘分区
Syslocks 有关动态锁的情况
Syslogins 一行记录了每一有效的SQL Server的用户帐号
Sysmessages 一行记录了每一系统错误或警告
Sysprocesses 有关Server进程的情况
Sysremotelogins 一行记录了一个远程用户
Sysservers 一行记录了一个远程SQL Server 2. Sysusages 一行记录了分配给一个数据库的每一个磁盘分析 系统表名 表中的内容
Sysalternates 一行记录了SQL Server用户在当前数据库中的标识
syscoumns 一行记录了一个表或视图的每一列,一个存储过程的每一参数
syscomments 一行或多行记录了每一视图、规则、缺省值、触发器和存储过程
sysdepends 一行记录了由一个过程、视图或触发器所参照的每一过程,视图或表
Syskeys 一行记录了每一主码,外码或公用码
Syslogs
sysobjects 一行记录了每一表、视图、存储过程、日志、规则、缺省值、触发器和临时表(仅在tempdb中)
sysprocedures 一行记录了每一视图、规则、缺省、触发器和过程
syprotects 记录用户的权限信息
sysegments 一行记录了每一片段(命名的的磁盘分片汇集)
systypes 一行记录了每一由系统提供的和用户定义的数据类型
sysusers 一行记录了一个数据库的合法用户,或用户组 下面是某次删了表的库记录的恢复过程,这个ZTECDMA共有5个data(三个在同一设备上data02,前两个300M,后一个200M,另一个在data03 1000M,data04 300M)和5个log在log1上每个50M
1> select * from sysusages where dbid=db_id('ZTECDMA')
2> go
dbid segmap lstart size vstart pad unreservedpgs
crdate
------ ----------- ----------- ----------- ----------- ------ -------------
--------------------------
11 3 0 38400 168540160 NULL 0
四月 20 2009 2:50PM
11 4 38400 6400 184677376 NULL 6375
四月 20 2009 2:50PM
11 3 44800 38400 167925760 NULL 0
五月 6 2009 11:45AM
11 3 83200 25600 168693760 NULL 0
五月 6 2009 11:45AM
11 4 108800 6400 184574976 NULL 6375
五月 6 2009 11:46AM
11 4 115200 6400 184702976 NULL 6375
五月 6 2009 11:46AM
11 3 121600 128000 201326592 NULL 0
六月 19 2009 8:40AM
11 3 249600 38400 218103808 NULL 38250
六月 20 2009 12:23AM
11 4 288000 6400 184728576 NULL 6375
六月 20 2009 12:23AM
重起后出错(可能好像原因删错了一个有数据的lstart=83200 , 不过我把所有删的的都恢复先)
查看库状态(我的是320,log时显0:00000:00001:2009/06/20 02:15:28.96 server Error: 926, Severity: 14, State: 1
00:00000:00001:2009/06/20 02:15:28.96 server Database 'ZTECDMA' cannot be opened. An earlier attempt at recovery marked it 'suspect'. Check the SQL Server errorlog for information as to the cause.
00:00000:00001:2009/06/20 02:15:28.97 server Continuing recovery with the next database.) select name,status from sysdatabases
听说status列0和4是正常的,其它不正常
下面这张表,比较直观说明了这些数字代表的意义。对于320这个状态,是256和64两个状态的和,对于一般大家说得12,就是设置了'select'和'trunc'这两个数据选项之后相加的值。
Decimal Hex Status
1 0x01 Upgrade started on this database
2 0x02 Upgrade has been successful
4 0x04 select into/bulkcopy Can be set by user
8 0x08 trunc log on chkpt
16 0x10 no chkpt on recovery
32 0x20 Database created with for load option,
or crashed while loading database,
instructs recovery not to proceed
64 0x04 Recovery started for all databases to be recovered
256 0x100 database suspect
Not recovered
Cannot be opened or used
Can be dropped only with dbcc dbrepair
512 0x200 ddl in tran
1024 0x400 read only
2048 0x800 dbo use only
4096 0x1000 single user
8192 0x2000 allow nulls by default
删除记录 (9 rows affected)
1> sp_configure 'allow updates',1
2> go
Parameter Name Default Memory Used Config Value
Run Value Unit Type
------------------------------ ----------- ----------- ------------
----------- -------------------- ----------
allow updates to system tables 0 0 1
1 switch dynamic (1 row affected)
Configuration option changed. The SQL Server need not be rebooted since the
option is dynamic.
Resulting configuration value and memory use have not changed from previous
values: new configuration value 1, previous value 1.
(return status = 0)
1> begin tran
2> go
1> delete from sysusages where dbid=db_id('ZTECDMA') and lstart=288000
2> go
(1 row affected)
1> delete from sysusages where dbid=db_id('ZTECDMA') and lstart=249600
2> go
(1 row affected)
1> delete from sysusages where dbid=db_id('ZTECDMA') and lstart=121600
2> go
(1 row affected)
1> delete from sysusages where dbid=db_id('ZTECDMA') and lstart=108800
2> go
(1 row affected)
1> delete from sysusages where dbid=db_id('ZTECDMA') and lstart=83200
2> go
(1 row affected)
1> commit tran
2> go
1> sp_configure 'allow update',0
2> go
恢复记录
insert into sysusages (dbid,segmap,lstart,size,vstart,pad,unreservedpgs,crdate) values (11,3,83200,25600,168693760,NULL,0,"2009-5-6 11:45:39.776" )
insert into sysusages (dbid,segmap,lstart,size,vstart,pad,unreservedpgs,crdate) values (11,4,108800,6400,184574976,NULL,6375,"2009-5-6 11:46:35.746" ) insert into sysusages (dbid,segmap,lstart,size,vstart,pad,unreservedpgs,crdate) values (11,3,121600,128000,201326592,NULL,0,"2009-6-19 8:40:35.746" )
insert into sysusages (dbid,segmap,lstart,size,vstart,pad,unreservedpgs,crdate) values (11,3,249600,38400,218103808,NULL,38250,"2009-6-20 2:13:35.746" ) insert into sysusages (dbid,segmap,lstart,size,vstart,pad,unreservedpgs,crdate) values (11,4,288000 ,6400,184728576,NULL,6275,"2009-6-20 2:13:35.746" )
然后进行下面的更新操作(参考直面改库名)
(sp_configure "allow updates", 1 reconfigure with override
update master..sysdatabases set status =-32768 Where name="ZTECDMA"
shutdown with nowait
update master..sysdatabases set status=0 Where name="ZTECDMA"
sp_configure "allow updates", 1
reconfigure with override
shutdown with nowait )
可能你的数据库 被置疑 了
检查硬件、系统有无问题 然后:
解决数据库被标记为“suspect”的方法
现象: Error 926
Severity Level 14
Error Message Text Database 'xx' cannot be opened - it has been marked SUSPECT by recover Explanation 当你使用Transact_SQL命令这个数据库的数据时,出现这个信息,这是一个严重的错误,如果你要使用这个数据库的数据,必须改正这个错误。Action 用ISQL登录到SQL Server,须用SA帐号 1>sp_configure "allow updates", 1
2>go
2>reconfigure with override
2>go
1>update master..sysdatabases
2>set status =-32768
3>Where name="database_name" database_name是 你 的 数 据 库 名
4>go
1>shutdown with nowait
2>go 这时重新启动SQL Server,再有SA帐号注册到SQL Server。 1>update master..sysdatabases
2>set status=0
3>Where name="database_name" database_name 是 你 的 数 据 库 名
4>go
1>sp_configure "allow updates" ,1
2>go
1>reconfigure with override
2>go 如果你的数据库原来有dboption,你需要重新设置这些option。 以下参考一
sybase数据库offline修改(2009-01-14 11:33:37)标签:sybase 数据库 杂谈 分类:数据库
isql连接数据库时,
1> use hkschdb
2> go
出现提示sybase Database 'hkschdb' is currently offline.
解决办法:
isql连接数据库,以sa用户登陆.
1>sp_configure "allow updates",
1
2>go
1>reconfigure with
override
2>go
1>use master
2>go
1>update
master..sysdatabases
2>set status=-32768
3>where name='hkschdb'
4>go
1>shutdown with nowait 2>go 重新启动后,isql连接数据库,以sa用户登录。
1>use master
2>go
1>update master..sysdatabases
2>set status=0
3>where name='hkschdb'
4>go
1>online database hkschdb
2>go
1>sp_configure "allow updates", 1
2>go
1>reconfigure with override 以下参考二
下面的另一种之前试过但无效(可能没恢复sysausages)
2004-3-12 11:26 caosohu
怎样修复OFFLINE的数据库 不好意思,上面贴子写错了!
sp_configure 'allow updates to system tables',1
go
重新启动ASE
update sysdatabase set status=-32768 where name='dbname'
go
重新启动ASE
update sysdatabase set status=8 where name='dbname'
go
sp_configure 'allow updates to system tables',0
go
重新启动ASE。
Posted by dbsos on 五月 18, 2009
其他
1. 只有在master数据库中才能有的系统表
系统表名 表中的内容
Sysconfigures 一行记录了用户可设置的配置参数
Syscurconfigs 有关SQL Server当前正使用的配置参数情况
Sysdatabases 一行记录了SQL Server中的一个数据库
Sysdevices 一行记录了数据库的每一磁带转储设备,磁盘转储设备,数据库设备和磁盘分区
设备和磁盘分区
Syslocks 有关动态锁的情况
Syslogins 一行记录了每一有效的SQL Server的用户帐号
Sysmessages 一行记录了每一系统错误或警告
Sysprocesses 有关Server进程的情况
Sysremotelogins 一行记录了一个远程用户
Sysservers 一行记录了一个远程SQL Server 2. Sysusages 一行记录了分配给一个数据库的每一个磁盘分析 系统表名 表中的内容
Sysalternates 一行记录了SQL Server用户在当前数据库中的标识
syscoumns 一行记录了一个表或视图的每一列,一个存储过程的每一参数
syscomments 一行或多行记录了每一视图、规则、缺省值、触发器和存储过程
sysdepends 一行记录了由一个过程、视图或触发器所参照的每一过程,视图或表
Syskeys 一行记录了每一主码,外码或公用码
Syslogs
sysobjects 一行记录了每一表、视图、存储过程、日志、规则、缺省值、触发器和临时表(仅在tempdb中)
sysprocedures 一行记录了每一视图、规则、缺省、触发器和过程
syprotects 记录用户的权限信息
sysegments 一行记录了每一片段(命名的的磁盘分片汇集)
systypes 一行记录了每一由系统提供的和用户定义的数据类型
sysusers 一行记录了一个数据库的合法用户,或用户组 下面是某次删了表的库记录的恢复过程,这个ZTECDMA共有5个data(三个在同一设备上data02,前两个300M,后一个200M,另一个在data03 1000M,data04 300M)和5个log在log1上每个50M
1> select * from sysusages where dbid=db_id('ZTECDMA')
2> go
dbid segmap lstart size vstart pad unreservedpgs
crdate
------ ----------- ----------- ----------- ----------- ------ -------------
--------------------------
11 3 0 38400 168540160 NULL 0
四月 20 2009 2:50PM
11 4 38400 6400 184677376 NULL 6375
四月 20 2009 2:50PM
11 3 44800 38400 167925760 NULL 0
五月 6 2009 11:45AM
11 3 83200 25600 168693760 NULL 0
五月 6 2009 11:45AM
11 4 108800 6400 184574976 NULL 6375
五月 6 2009 11:46AM
11 4 115200 6400 184702976 NULL 6375
五月 6 2009 11:46AM
11 3 121600 128000 201326592 NULL 0
六月 19 2009 8:40AM
11 3 249600 38400 218103808 NULL 38250
六月 20 2009 12:23AM
11 4 288000 6400 184728576 NULL 6375
六月 20 2009 12:23AM
重起后出错(可能好像原因删错了一个有数据的lstart=83200 , 不过我把所有删的的都恢复先)
查看库状态(我的是320,log时显0:00000:00001:2009/06/20 02:15:28.96 server Error: 926, Severity: 14, State: 1
00:00000:00001:2009/06/20 02:15:28.96 server Database 'ZTECDMA' cannot be opened. An earlier attempt at recovery marked it 'suspect'. Check the SQL Server errorlog for information as to the cause.
00:00000:00001:2009/06/20 02:15:28.97 server Continuing recovery with the next database.) select name,status from sysdatabases
听说status列0和4是正常的,其它不正常
下面这张表,比较直观说明了这些数字代表的意义。对于320这个状态,是256和64两个状态的和,对于一般大家说得12,就是设置了'select'和'trunc'这两个数据选项之后相加的值。
Decimal Hex Status
1 0x01 Upgrade started on this database
2 0x02 Upgrade has been successful
4 0x04 select into/bulkcopy Can be set by user
8 0x08 trunc log on chkpt
16 0x10 no chkpt on recovery
32 0x20 Database created with for load option,
or crashed while loading database,
instructs recovery not to proceed
64 0x04 Recovery started for all databases to be recovered
256 0x100 database suspect
Not recovered
Cannot be opened or used
Can be dropped only with dbcc dbrepair
512 0x200 ddl in tran
1024 0x400 read only
2048 0x800 dbo use only
4096 0x1000 single user
8192 0x2000 allow nulls by default
删除记录 (9 rows affected)
1> sp_configure 'allow updates',1
2> go
Parameter Name Default Memory Used Config Value
Run Value Unit Type
------------------------------ ----------- ----------- ------------
----------- -------------------- ----------
allow updates to system tables 0 0 1
1 switch dynamic (1 row affected)
Configuration option changed. The SQL Server need not be rebooted since the
option is dynamic.
Resulting configuration value and memory use have not changed from previous
values: new configuration value 1, previous value 1.
(return status = 0)
1> begin tran
2> go
1> delete from sysusages where dbid=db_id('ZTECDMA') and lstart=288000
2> go
(1 row affected)
1> delete from sysusages where dbid=db_id('ZTECDMA') and lstart=249600
2> go
(1 row affected)
1> delete from sysusages where dbid=db_id('ZTECDMA') and lstart=121600
2> go
(1 row affected)
1> delete from sysusages where dbid=db_id('ZTECDMA') and lstart=108800
2> go
(1 row affected)
1> delete from sysusages where dbid=db_id('ZTECDMA') and lstart=83200
2> go
(1 row affected)
1> commit tran
2> go
1> sp_configure 'allow update',0
2> go
恢复记录
insert into sysusages (dbid,segmap,lstart,size,vstart,pad,unreservedpgs,crdate) values (11,3,83200,25600,168693760,NULL,0,"2009-5-6 11:45:39.776" )
insert into sysusages (dbid,segmap,lstart,size,vstart,pad,unreservedpgs,crdate) values (11,4,108800,6400,184574976,NULL,6375,"2009-5-6 11:46:35.746" ) insert into sysusages (dbid,segmap,lstart,size,vstart,pad,unreservedpgs,crdate) values (11,3,121600,128000,201326592,NULL,0,"2009-6-19 8:40:35.746" )
insert into sysusages (dbid,segmap,lstart,size,vstart,pad,unreservedpgs,crdate) values (11,3,249600,38400,218103808,NULL,38250,"2009-6-20 2:13:35.746" ) insert into sysusages (dbid,segmap,lstart,size,vstart,pad,unreservedpgs,crdate) values (11,4,288000 ,6400,184728576,NULL,6275,"2009-6-20 2:13:35.746" )
然后进行下面的更新操作(参考直面改库名)
(sp_configure "allow updates", 1 reconfigure with override
update master..sysdatabases set status =-32768 Where name="ZTECDMA"
shutdown with nowait
update master..sysdatabases set status=0 Where name="ZTECDMA"
sp_configure "allow updates", 1
reconfigure with override
shutdown with nowait )
可能你的数据库 被置疑 了
检查硬件、系统有无问题 然后:
解决数据库被标记为“suspect”的方法
现象: Error 926
Severity Level 14
Error Message Text Database 'xx' cannot be opened - it has been marked SUSPECT by recover Explanation 当你使用Transact_SQL命令这个数据库的数据时,出现这个信息,这是一个严重的错误,如果你要使用这个数据库的数据,必须改正这个错误。Action 用ISQL登录到SQL Server,须用SA帐号 1>sp_configure "allow updates", 1
2>go
2>reconfigure with override
2>go
1>update master..sysdatabases
2>set status =-32768
3>Where name="database_name" database_name是 你 的 数 据 库 名
4>go
1>shutdown with nowait
2>go 这时重新启动SQL Server,再有SA帐号注册到SQL Server。 1>update master..sysdatabases
2>set status=0
3>Where name="database_name" database_name 是 你 的 数 据 库 名
4>go
1>sp_configure "allow updates" ,1
2>go
1>reconfigure with override
2>go 如果你的数据库原来有dboption,你需要重新设置这些option。 以下参考一
sybase数据库offline修改(2009-01-14 11:33:37)标签:sybase 数据库 杂谈 分类:数据库
isql连接数据库时,
1> use hkschdb
2> go
出现提示sybase Database 'hkschdb' is currently offline.
解决办法:
isql连接数据库,以sa用户登陆.
1>sp_configure "allow updates",
1
2>go
1>reconfigure with
override
2>go
1>use master
2>go
1>update
master..sysdatabases
2>set status=-32768
3>where name='hkschdb'
4>go
1>shutdown with nowait 2>go 重新启动后,isql连接数据库,以sa用户登录。
1>use master
2>go
1>update master..sysdatabases
2>set status=0
3>where name='hkschdb'
4>go
1>online database hkschdb
2>go
1>sp_configure "allow updates", 1
2>go
1>reconfigure with override 以下参考二
下面的另一种之前试过但无效(可能没恢复sysausages)
2004-3-12 11:26 caosohu
怎样修复OFFLINE的数据库 不好意思,上面贴子写错了!
sp_configure 'allow updates to system tables',1
go
重新启动ASE
update sysdatabase set status=-32768 where name='dbname'
go
重新启动ASE
update sysdatabase set status=8 where name='dbname'
go
sp_configure 'allow updates to system tables',0
go
重新启动ASE。
相关阅读 更多 +