sybase数据库经验总结.docx
- 文档编号:24650482
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:24
- 大小:26.12KB
sybase数据库经验总结.docx
《sybase数据库经验总结.docx》由会员分享,可在线阅读,更多相关《sybase数据库经验总结.docx(24页珍藏版)》请在冰豆网上搜索。
sybase数据库经验总结
Sybase数据库维护经验总结
1、在sybase中如何重新设置用户的口令为空:
使用sa登录Server:
isql-Usa-Psa_password-Sserver_name
记录当前版本号(以当前版本号12000为例):
sp_configure"upgradeversion"
go
修改当前值为492:
sp_configure"upgradeversion",492
go
将某用户口令设置为NULL(以sa为例,当前口令为"123456"):
sp_password'123456',NULL,sa
go
重新设置当前版本号:
sp_configure"upgradeversion",12000
go
2、如何启动和关闭server的服务:
一:
启动ASEServer
UNIX:
以sybase用户登录
11.x版本:
cd$SYBASE/install
12.x版本:
cd$SYBASE_ASE/install
startserver-fRUN_SYBASE(启动SQLSERVER)
startserver-fRUN_SYBASE_back(启动BACKSERVER)
startserver-fRUN_SYBASE_mon(启动MONITORSERVER)
NT:
通过SybaseCentral
通过ControlPanal
ControlPanal/Service/SybaseSQLServer->Start(启动SQLSERVER)
ControlPanal/Service/SybaseBCKServer->Start(启动BACKSERVER)
ControlPanal/Service/SybaseMONServer->Start(启动MONITORSERVER)
二:
关闭ASEServer
UNIX:
以sybase用户登录
isql-Usa-P
shutdownSYB_BACKUP
go
shutdown
go
isql-Usa-P-SSYBASE_mon
sms_shutdown
go
NT:
通过SybaseCentral
通过ControlPanal
ControlPanal/Service/SybaseSQLServer->Stop(启动SQLSERVER)
ControlPanal/Service/SybaseBCKServer->Stop(启动BACKSERVER)
ControlPanal/Service/SybaseMONServer->Stop(启动MONITORSERVER)
3、如何查找数据库启动的失败原因:
在实际环境中,数据库Server无法启动的原因很多,下面仅列出了几种常见的情况,供您参考。
首先,应检查Server的日志文件。
不同版本缺省的日志文件如下(其中
UNIX:
11.0*:
$SYBASE/install/errorlog
11.5*或11.9*:
$SYBASE/install/
12.0*:
$SYBASE_ASE/install/
NT:
11.0*11.5*或11.9*:
$SYBASE\install\errorlog
12.0*:
$SYBASE\ASE-12_0\install\errorlog
CASE1:
basis_dlock:
file'/sybase/master.dat'alreadyinusebyaSQLServer
kernelkdconfig:
unabletoreadprimarymasterdevice
kernelkiconfig:
readofconfigblockfailed
检查server是否已经启动(showserver,ps-usybase或NTservice)
CASE2:
dopen:
open'/sybase/master.dat'failed,permissiondenied
kernelkdconfig:
unabletoreadprimarymasterdevice
kernelkiconfig:
readofconfigblockfailed
检查master设备文件的所有者及权限
CASE3:
ninit:
Allmasternetworklistenershavefailed.Shuttingdown
检查networkip及port配置(netstat-a)
CASE4:
kernel:
kscsinit:
connectivitylibraryerror.Operation:
cs_ctx_alloc().
检查操作系统参数是否已经修改并重新启动操作系统(参见安装手册)
若操作系统异常宕机,ASE未启动而$SYBASE/
4、日常备份数据库:
SYBASE数据库的备份主要是通过dump命令来实现的,分为数据库备份和日志备份。
简单语法格式如下:
dumpdatabasedatabase_nametodevice_name
dumptransactiondatabase_nametodevice_name
如果使用磁带设备做备份,还要使用capacity、int选项。
应该多长时间备份一次数据库呢?
这决定于发生系统故障时(例如磁盘故障)应用系统允许丢失多长时间的数据。
如果允许丢失一个小时的数据,那么可以考虑每天至少备份一次数据库,并每个小时至少备份一次日志。
备份数据库之前,应对数据库做dbcc检查,确保备份的数据库是完好的数据库。
如果数据库有损坏,备份时可能不会报错,但将来可能无法装载(load)。
通常情况下,只有发生严重故障需要恢复时才进行装载数据库,但是SYBASE建议偶尔对备份的数据库装载到一个测试环境上,以保证备份工作过程正常并熟悉备份和装载工作过程。
Master数据库的备份也不能忽略。
每次master数据库的内容有变动时,应及时备份master数据库,例如增加login,增加设备,增加用户数据库等。
举例:
Unix平台后备courtdb数据库
启动ASE和BACKUPSERVER
isql-Usa-Pxxxxxx-SSYBASE
dumpdatabasecourtdbto"/sybase/dump/courtdb_db.990705"
go
5、如何备份数据量大于2G的数据库:
当在后备数据量大于2GB的数据库时,可能会遇到以下错误:
I/Oerror:
operatingsystemerror,serverdevice/backup/data.code27messages
filetoolarge.
这是由于后备文件的大小超出了操作系统的用户最大文件限制。
而有些操作系统不支持大于2GB的文件,这时可以使用BackupServer将一个数据库后备到多个文件中。
1>dumpdatabasecourtdbto"/usr/sybase/courtdb_dump.1"
2>stripeon"/usr/sybase/courtdb_dump.2"
3>stripeon"/usr/sybase/courtdb_dump.3"
4>go
这种方法还可以提高后备及恢复的速度,但注意恢复也必须用相应多的设备。
例如:
1>loaddatabasecourtdbfrom"/usr/sybase/courtdb_dump.1"
2>stripeon"/usr/sybase/courtdb_dump.2"
3>stripeon"/usr/sybase/courtdb_dump.3"
4>go
6、如何得到bcp文件:
本文适应于isql11.*,可通过isql-v得到版本
编辑一个文本文件select.sql,内容如下:
setnocounton
usecourtdb
go
select"bcpcourtdb.."+name+"out"+name+".bcp-Usa-P-cfromsysobjectswheretype="U"
go
如果是unix,执行:
isql-Usa-P-b-iselect.sql-obcpout
chmod+xbcpout
如果是Windows,执行:
isql-Usa-P-b-iselect.sql-obcpout.bat
将select.sql中的out换为in,重复以上步骤即可得到bcpin的命令文件
虽然表上没有索引,服务器执行快速BCP,BCP往表里加载数据仍有可能使日志表溢出,这是因为BCP需要记录页面空间分配日志。
如果表上没有索引,并且数据库选项“selectinto/bulkcopy”被置成true,服务器就不给新加载的记录记日志。
另外,如果表上有索引和触发器,那么BCP是慢速的。
不能,SQLServer11不能与系统10的BackupServer一起工作,但系统11的BackupServer可以和SQLServer10兼容。
另外,不同版本的BakcupServer相互兼容,甚至可以在不同版本的BackupServer之间做远程备份。
6、不能截断日志该怎么办:
有两种情况,可能出现这个问题。
一是应用系统给SQLServer发送了一个用户自定义事务,一直未提交,这个最早活跃事务阻碍系统截断日志。
二是客户端向SQLServer发送了一个修改数量大的事务,清日志时,该事务还正在执行之中,此事务所涉及的日志只能等到事务结束后,才能被截掉。
对于第一种情况,只要督促用户退出应用或者提交事务,系统管理员便可清掉日志。
因为给SQLServer发送Dumptransactionwithno-log或者withtruncate-only,它截掉事务日志的非活跃部分。
所谓非活跃部分是指服务器检查点之间的所有已提交或回退的事务。
而从最早的未提交的事务到最近的日志记录之间的事务日志记录被称为活跃的。
从此可以看明,打开的事务能致使日志上涨,因为在最早活跃事务之后的日志不能被截除。
对于第二种情况,道理也同上。
只是在处理它时,需慎重从事。
如果这个大事务已运行较长时间,应尽量想法扩大数据库日志空间,保证该事务正常结束。
若该事务被强行回滚,SQLServer需要做大量的处理工作,往往是正向执行时间的几倍,系统恢复时间长,可能会影响正常使用的时间。
当客户端退出注册或者突然死机,SQLServer应回滚客户端送来的,但未提交的事务。
对于Unix和VMS客户端,其操作系统会通知SQLServer它的连接已丢失,SQLServer然后回退未提交的数据库事务。
客户端,如果TCPIPKeepalive被设置成允许状态,它定期地检查网络端口是否存活,一旦网络连接断开,SQLServer就被通知到,它便回退未提交事务。
但是,如果Keepalive被关闭,SQLServer将等待客户端的联络。
服务器线索便无期限地处于发送或者接收睡眠状态。
那么,未提交事务直到下次重新启动服务器时,才能被回退。
SQLServer提供用户T-SQL语言,来编写在服务器端运行的程序,主要是编写存贮过程和触发器。
在T-SQL语言中,不提供直接调用外部函数的机制,其主要原因是如果用户外部函数出错或者失败,可能会导致SQLServer死机,数据库系统崩溃。
这样SQLServer运行不稳定,系统安全性差。
而对于PC在系统11之前的SQLServer各版中,每张表只能有65535个分配页面。
现在,SQLServer11就没有这种情况,只有表所在数据库大小的限制,而数据库大小只受硬盘资源的限制。
实际上,表大小几乎没有限制。
如何手动修改interfaces:
在一些HP和SUN的机器上,interfaces文件中关于SERVER的信息是以16进制的形式存储的,必须要通过实用程序dsedit才能进行修改。
实际上,我们只要了解了这些16进制数据的格式,也可以直接通过vi来更改interfaces文件。
下面以e3000为例,介绍一下interfaces文件的结构和格式:
用vi打开/opt/sybase/interfaces,可以看到这些信息:
E3000
mastertlitcp/dev/tcp\x00021a0a9e4d51f80000000000000000
querytlitcp/dev/tcp\x00021a0a9e4d51f80000000000000000
其中:
/x0002:
保留字,不必修改
1a01:
16进制端口号,高位在左边,转换成10进制为:
6666
9e4d51f8:
16进制主机地址,
转换成10进制为:
9e--158
4d--77
51--81
f8--248
即为:
158.77.81.248
可以修改的信息其实主要就是主机地址和端口号,所以,如果需要,只要按照以上格式修改其中信息即可。
需要修改interfaces文件;更改RUN_server_name文件名,并修改其内容,例如:
-s(UNIX)、/SERVER(OpenVMS)后面所跟的参数(server名称);更改配置文件名;更改errorlog文件名(如果需要);如果server名称加在了表sysservers中,需要更改'srvname'、'srvnetname'列,可使用sp_dropserver、sp_addserver存储过程来实现。
在OpenVMS系统中还要修改RUN_server_name文件中DSLISTEN的逻辑名称,以及在使用startserver过程中/SERVER后面所跟的参数。
然后,重启SQL/ASEServer。
确认DSQUERY、DSLISTEN环境变量已经更改为所需内容。
另外,如果SQL/ASEServer是被设置为远程服务器,还要修改与此server相关的系统表sysservers中的字段以及interfaces文件。
理论上例如配置文件、RUN脚本、errorlog文件不需要指定server名称(但是通常习惯指定server名称)。
在RUNstartup脚本中要指定server名称。
您可以根据以下提纲完成此项任务:
如果server名称加在了表sysservers中,用sp_dropserver删除。
Shutdownserver
编辑interfaces文件
更改RUN_server_name文件名,并修改其内容,-s(UNIX)、/SERVER(OpenVMS)后面所跟的参数(server名称)
更改errorlog文件名(如果需要)
修改DSQUERY、DSLISTEN环境变量(如果需要)
更改配置文件名(server_name.cfg、server_name.bak、server_name.nnn),在SYBASE安装路径下
Startserver
使用sp_addserver重新添加server(如果需要)
如果server是作为远程server使用的,还需要删除并重新添加。
在nt上如何卸载sybase
关闭AdaptiveServer.
将AdaptiveServer在WindowsNTServices中由自动改为手动
重新启动WindowsNTserver
运运行regedt32修改注册表,删除以下内容:
\\HKEY_LOCAL_MACHINE\SOFTWARE\SYBASE\Server\
\\HKEY_LOCAL_MACHINE\SOFTWARE\SYBASE\Server\
\\HKEY_LOCAL_MACHINE\SOFTWARE\SYBASE\Server\
\\HKEY_LOCAL_MACHINE\SOFTWARE\SYBASE\Server\
到注册表的如下结构下:
\\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Environment
删除DSLISTEN,DSQUERY,SYBASE,并修改LIB,INCLUDE,PATH删除SYBASE有关目录
删除如下注册键值:
\\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
SYBSQL_
SYBXPS_
SYBBCK_
SYBMON_
SYBHIS_
重新启动WindowsNTserver
使用Start|ControlPanel|Settings|Services确认SYBASE已经卸载
删除SYBASEServer所用数据库设备文件及SYBASE系统文件
如何检查sybase数据库的一致性
数据库一致性检查(dbcc)提供了一些命令用于检查数据库的逻辑和物理一致性。
Dbcc主要有两个功能:
使用checkstorage或checktable及checkdb在页一级和行一级检查页链及数据指针。
使用checkstorage,checkalloc,或checkverify,tablealloc,及indexalloc检查页分配。
在下列情况中需要使用dbcc命令:
作为数据库日常维护工作的一部分,数据库内部结构的完整性决定于sa或dbo定期地运行dbcc检查。
在系统报错以后,确定数据库是否有损坏。
在备份数据库之前,确保备份的完整性。
如果怀疑数据库有损坏时,例如,使用某个表时报出表损坏的信息,可以使用dbcc确定数据库中其他表是否也有损坏。
下面是dbcc的简单用法:
dbccchecktable(table_name)
检查指定的表,检查索引和数据页是否正确链接,索引是否正确排序,所有指针是否一致,每页的数据信息是否合理,页偏移是否合理。
dbcccheckdb(database_name)
对指定数据库的所有表做和checktable一样的检查。
dbcccheckalloc(database_name,fix|nofix)
检查指定数据库,是否所有页面被正确分配,是否被分配的页面没被使用。
当使用"fix"选项时,在检查数据库的同时会自动修复有问题的页面。
(若数据库数据量很大,则该过程会持续很长时间。
)
dbcctablealloc(table_name,fix|nofix)
检查指定的表,是否所有页面被正确分配,是否被分配的页面没被使用。
是checkalloc的缩小版本,对指定的表做完整性检查。
当使用"fix"选项时,在检查数据表的同时会自动修复数据表中有问题的页面。
关于上述命令的其它选项及详细使用方法和checkstorage,checkverify,indexalloc的详细使用方法,请参阅有关命令手册。
举例1:
Unix平台检查courtdb数据库的一致性
单用户模式启动Server:
$SYBASE/installstartserver-fRUN_server_name-m
vidbcc_db.sql
usemaster
go
sp_dboptioncourtdb,"singleuser",true
go
usecourtdb
go
checkpoint
go
dbcccheckdb(courtdb)
go
dbcccheckalloc(courtdb,fix)
go
dbcccheckcatalog(courtdb)
go
usemaster
go
sp_dboptioncourtdb,"singleuser",false
go
usecourtdb
go
checkpoint
go
quit
go
isql-Usa-Pxxxxxx-SSYBASE
grepMsgdbcc_db.out
举例2:
Unix平台检查courtdb数据库中titles表的一致性
vidbcc_table.sql
usecourtdb
go
dbccchecktable(titles)
go
dbcctablealloc(titles)
go
isql-Usa-Pxxxxxx-SSYBASE
grepMsgdbcc_table.out
如何删除已经坏的数据库:
当使用dropdatabase无法删除数据库时,使用本文所示方法可以删除。
(1)使用isql以sa注册SQLserver
(2)设置允许修改系统表
1>sp_configure"allowupdates",1
2>go
(3)把要删除的用户数据库置为"suspect"状态
1>usemaster
2>go
1>begintran
2>go
1>updatesysdatabasessetstatus=256
2>wherename="courtdb"
3>go
如果得到(1rowaffected),则
1>commit
2>go
否则
1>rollback
2>go
(4)重启server,并用isql以sa注册。
(5)删除数据库
1>dbccdbrepair(courtdb,dropdb)
2>go
(6)恢复允许修改系统表
1>sp_configure"allowupdates",0
2>go
(7)结束
如何终止数据库的恢复过程:
当某一正常运行的大
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sybase 数据库 经验总结