Sybase学习笔记

更新时间:2023-03-08 06:09:31 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

SYBASE学习笔记

SYBASE学习笔记

2005年01月 整理于安徽项目

北京易初电子技术有限公司软件中心 2005-01 - 1 -

SYBASE学习笔记

目 录

《Sybase系统管理员手册》学习笔记 .......................................................................................... 4

前三章内容 ............................................................................................................................... 4 第四章 创建数据库 ................................................................................................................. 4 第六章 权限管理 ..................................................................................................................... 5 第七章 如何调整SQL SERVER基本配置参数 ................................................................... 6 第八章 如何调整SQL SERVER高级配置参数 ................................................................... 7 第九章 配置命名缓存和大块I/O .......................................................................................... 8 Sybase数据库设备 ........................................................................................................................ 10 什么SYBASE安装完后要增加TEMPDB的空间? ................................................................. 10 如何扩展master数据库空间 ........................................................................................................ 12 Sybase 临时数据库的优化 ........................................................................................................... 13 关于tempdb的优化 ....................................................................................................................... 15 Sybase内存和缓冲区管理 ............................................................................................................ 16 使用dbcc memusage确定procedure cache size大小 .................................................................. 23 如何动手修改interfaces文件 ....................................................................................................... 23 初次建立数据库对sa的口令的修改 ........................................................................................... 24 如何更改SQL Server名称(在UNIX、OPENVMS平台上) ................................................. 24 常见的系统过程 ............................................................................................................................. 25 系统的启动和关闭 ......................................................................................................................... 25 利用脚本自动关闭sybase数据库 ................................................................................................ 26 BCP 简 要 说 明 ......................................................................................................................... 26 如何生成bcp命令文件 ................................................................................................................. 28 如何配置SQL Server 11,使得快速BCP具有更好的性能? ................................................... 28 Sybase数据库目录说明 ................................................................................................................ 28 相关功能操作说明 ......................................................................................................................... 29 如何检查数据库中数据的一致性 ................................................................................................. 31 启动时数据库不能回滚解决方法 ................................................................................................. 32 解决数据库被挂起的问题 ............................................................................................................. 34 如何终止数据库恢复过程 ............................................................................................................. 35 如何删除坏的用户数据库? ......................................................................................................... 37 如何查找数据库启动失败原因 ..................................................................................................... 37 日常数据库备份 ............................................................................................................................. 38 如何恢复master数据库 ................................................................................................................ 39 如何做Rebuild Master ................................................................................................................... 40 如何移植master设备 .................................................................................................................... 41 如何重建sybsystemprocs系统数据库 ......................................................................................... 42 如何做 rebuild log ......................................................................................................................... 43 一个简单的备份脚本示例 ............................................................................................................. 44 如何后备数据量大于2GB的数据库 ........................................................................................... 45 如何配置SQL Server来做远程备份? ........................................................................................ 45 SYBASE系统补丁的安装 ............................................................................................................ 46

北京易初电子技术有限公司软件中心 2005-01

- 2 -

SYBASE学习笔记

由SQL Server提供的系统过程功能和执行权列表 .................................................................... 46 附录:网络上的Sybase学习资源推荐 ....................................................................................... 48

北京易初电子技术有限公司软件中心 2005-01 - 3 -

SYBASE学习笔记

《Sybase系统管理员手册》学习笔记

学习书籍

《SYBASE数据库管理员手册》

e:\\book\\sybase\\sybase0001

前三章内容

1、DBA用户可以使用setuser命令,临时转换成其他用户进行系统操作 2、SQL Server的交互命令工具: isql 结束命令:go 清除命令缓冲区:reset 调用编辑器:vi( unix ) ed(dos) 退出isql:quit 或exit

3、数据库大小的估计:sp_estspace,语法(P44): sp_estspace table_name, number of rows [ , fill_factor [ , cols_to_max [ , textbin_length [ , I/Osec ]]] 4、创建设备: disk init …,删除设备:sp_dropdevice device_name,磁盘镜像: disk mirror… 5、创建数据库时,应指明数据库存放的数据库设备,若不指明,数据库将建立在缺省设备上。数据库设备初始化后,系统管理员可以使用sp_diskdefault命令把这个设备设置成缺省设备。 sp_diskdefault logical_name, { defaulton | defaultoff } 注意:

? 尽快将master数据库设备指定为非缺省设备

? 只有数据库设备可以指定为缺省设备,转储设备不能指定为缺省设备

? 多次执行sp_diskdefault可以建立多个缺省设备,缺省设备按字母顺序使用。当第

一个设备使用完时,使用第二个设备,以此类推

第四章 创建数据库

? 数据库的建立

语法: create database database_name [ on databae_device[=size] [, database_device[=size]] … ] [log on database_device=[size]] …] ? 授权创建数据库: grant create database to login_name ? 改变数据库属主 sp_changedbowner login_name

? sp_helpdb系统存储过程报告特定或所有数据库的信息 sp_helpdb [ dbname ] ? 设置数据库选项:(P48)

北京易初电子技术有限公司软件中心 2005-01

- 4 -

SYBASE学习笔记

abort tran on log full allow nulls by default dbo use only ddl in tran no chkpt on recovery no free space acctg read only select into bulkcopy single user trunc log on chk pt 语法: sp_dboption [ dbname , option_name, { true false } ] ? 监控数据库空间使用情况

sp_helpdb 报告特定或所有数据库的信息

sp_helpsegment 报告在当前数据库中的一个特定片段或所有片段的信息 sp_spaceused 报告当前数据库中某一数据库对象或全部对象的数据页数和所用空间大小。仅列出表,聚簇索引和非聚簇索引所占空间的数量 ? 扩展数据库命令alter

语法: alter database database_name [ on { default /database_device } [=size] ] [ log on database_device [=size] ] ? 数据库的创建者

授权创建数据库: grant create database to login_name 改变数据库属主: sp_changedbowner login_name

第六章 权限管理

? SQL Server注册帐户,新加帐户

用户数据库都放在sysusers表中 语法: sp_addlogin login_name , passwd [, defaultdb [ , deflanguage [ , fullname ]]] ? 修改口令

sp_password caller_passwd, new_passwd [, login_name]

? 改变口令的有效期限。n为口令有效天数,缺省为0,即口令不终止

sp_configure “systemwide password expiration” n ? 锁定或解锁用户角色

sp_locklogin [ login_name, “{lock | unlock}”] ? 数据库用户别名

sp_addalias login_name, name_in_db ? 数据库用户组

sp_addgroup grpname

? sp_helpgroup 报告在一个数据库中组的信息 ? 回收用户对SQL Server或者数据库访问的权限

sp_droplogin login_name

北京易初电子技术有限公司软件中心 2005-01

- 5 -

SYBASE学习笔记

tempdb数据库缺省放在master设备上,将临时数据库发在分离的设备上是更可取的。 1) 初始化一个用来存放临时数据库的设备 disk init

name=\

physname=\ vdevno=13, size=15360

(注意:如果将tempdb数据库放在多个设备上,需初始化多个数据库设备) 2)将临时数据库扩展到该一个设备上 alter database tempdb on tempdb_dev=30

3)打开tempdb数据库,从段上删除master设备 sp_dropsegment \ sp_dropsegment logsegment,tempdb,master

4)发出如下命令,检查default段中是否不再包含master设备 select dbid,name,segmap from sysusages,sysdevices where sysdevices.low<=syusages.size+vstart and sysdevices.high>=sysusages.size+vstart-1 and dbid=2

and(status=2 or status=3)

注:3、4步骤亦可以使用如下动作进行:

扩展后sp_helpdb tempdb看应改master设备上是data/log的 你use tempdb

sp_dropsegment 'default',tempdb,master sp_dropsegment system,tempdb,master sp_dropsegment logsegment,tempdb,master 后,

sp_helpdb tempdb

select db_name(dbid),segmap,lstart,size,vstart,pad,unreservedpgs from sysusages where dbid=2 贴出来

如果第一行中segmap为0,就ok

说明:若将临时数据库放在多个磁盘设备上,可以更好的利用并行查询特性来提高查询性能。 第二步:将临时数据库与高速缓冲进行绑定。

由于临时表的创建、使用,临时数据库会频繁地使用数据缓存,所以应为临时数据库创建高速缓存,从而可以使其常驻内存并有助于分散I/O: 1、创建命名高速缓存

sp_cacheconfig “tempdb_cache\ 2、重新启动server

3、捆绑临时数据库到tempdb_cache高速缓存 sp_bindcache “tempdb_cache\ 4、若有大的I/O,配置内存池 第三步:优化临时表

北京易初电子技术有限公司软件中心 2005-01

- 11 -

SYBASE学习笔记

大多数临时表的使用是简单的,很少需要优化。但需要对临时表进行复杂的访问则 应通过使用多个过程或批处理来把表的创建和索引分开。以下两种技术可以改善临时表的优化

slash; 在临时表上创建索引 1) 临时表必须存在

2) 统计页必须存在(即不能在空表上创建索引)

slash; 把对临时表的复杂的使用分散到多个批处理或过程中,以便为优化器提供信息 下面的这个过程需要进行优化: create proc base_proc as

select * into #huge_result from auths

select * from article, #huge_result where article.author_code= #huge_result.author_code and sex=\ 使用两个过程可以得到更好的性能 1)create proc base_proc as

select *

into #huge_result from auths

exec select_proc

2) create proc select_proc as

select * from article,#huge_result

where article.author_code=#huge_result.author_code and sex=\

说明:在同一个存储过程或批处理中,创建并使用一个表时,查询优化器无法决定这个表的大小。

结论:通过本实验我们知道,临时数据库经过优化可以极大的提高系统性能。实际工作中,必须考虑具体应用的情况,需长时间经验的积累。

如何扩展master数据库空间

http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_zj_00014.htm

master数据库只能扩展在master设备上.那么当master设备已经没有足够的空间可使用时,请按以下步骤操作:

(此操作过程是以UNIX操作系统为例.SYBASE安装路径为/sybase) 1.备份master数据库

启动backup server,进入isql环境执行:

1>dump database master to '/sybase/master.dump' 2>go

shut down SQL/ASE Server 1>shutdown 2>go

2.创建新的足够大的master设备

$buildmaster -d -ssize(size以2K为单位)

北京易初电子技术有限公司软件中心 2005-01

- 12 -

SYBASE学习笔记

例:$buildmaster-d/sybase/data/master.dat -s102400 3.修改RUN_servername文件

编辑RUN_server_name文件,-d参数指向新建的设备名。 4.单用户模式重启server

$startserver -f RUN_servername -m 5.执行installmaster脚本

6.由备份文件装载master数据库

1>load database master from '/sybase/master.dump' 2>go

7.修改sysdevices信息

sp_configure 'allow updates', 1 go

begin tran go

update sysdevices set high = 102399 , phyname = 'e:\\sybase\\data\\master_test.dat' where name = 'master' go

(102399=200*512-1 master设备大小为200M) commit tran go

8.扩展master数据库

1>alter database master on master设备名称=size(此值以M为单位) 2>go

例:alter database master on master=10

将master数据库在master设备上扩展10M

Sybase 临时数据库的优化

缺省情况下,tempdb数据库是放置在master设备上,容量为2M,而临时数据库是活动最为平凡的数据库常常被用来排序、创建临时表、重格式化等操作,所以tempdb的优化应该受到特别的关注。本篇文章目的在于使你掌握临时数据库的优化策略以及临时表的优化使用。本文中,你将以调整临时库的位置开始,有步骤的完成临时数据库的优化,并在此过程中了解到优化临时数据库和临时表的一些方法和规则。

实验环境的要求:你应具有系统管理员的权限,系统中有auths和article表。 步骤:

第一步:调整临时库的位置

tempdb数据库缺省放在master设备上,将临时数据库发在分离的设备上是更可取的。 1) 初始化一个用来存放临时数据库的设备 disk init

name=\

physname=\vdevno=13, size=15360

北京易初电子技术有限公司软件中心 2005-01

- 13 -

SYBASE学习笔记

(注意:如果将tempdb数据库放在多个设备上,需初始化多个数据库设备) 2)将临时数据库扩展到该一个设备上

alter database tempdb on tempdb_dev=30

3)打开tempdb数据库,从段上删除master设备 sp_dropsegment \sp_dropsegment logsegment,tempdb,master

4)发出如下命令,检查default段中是否不再包含master设备 select dbid,name,segmap from sysusages,sysdevices where sysdevices.low<=syusages.size+vstart and sysdevices.high>=sysusages.size+vstart-1 and dbid=2

and(status=2 or status=3) 说明:若将临时数据库放在多个磁盘设备上,可以更好的利用并行查询特性来提高查询性能。 第二步:将临时数据库与高速缓冲进行绑定。

由于临时表的创建、使用,临时数据库会频繁地使用数据缓存,所以应为临时数据库创建高速缓存,从而可以使其常驻内存并有助于分散I/O: 1、创建命名高速缓存

sp_cacheconfig “tempdb_cache”,”10m”,”mixed” 2、重新启动server

3、捆绑临时数据库到tempdb_cache高速缓存 sp_bindcache “tempdb_cache”, tempdb 4、若有大的I/O,配置内存池 第三步:优化临时表

大多数临时表的使用是简单的,很少需要优化。但需要对临时表进行复杂的访问则 应通过使用多个过程或批处理来把表的创建和索引分开。以下两种技术可以改善临时表的优化

slash; 在临时表上创建索引 1) 临时表必须存在

2) 统计页必须存在(即不能在空表上创建索引)

slash; 把对临时表的复杂的使用分散到多个批处理或过程中,以便为优化器提供信息

下面的这个过程需要进行优化: create proc base_proc as

select * into #huge_result from auths

select * from article, #huge_result where article.author_code= #huge_result.author_code and sex=”0” 使用两个过程可以得到更好的性能 1)create proc base_proc as

select *

into #huge_result from auths

exec select_proc

北京易初电子技术有限公司软件中心 2005-01

- 14 -

SYBASE学习笔记

2) create proc select_proc as

select * from article,#huge_result

where article.author_code=#huge_result.author_code and sex=”0”

说明:在同一个存储过程或批处理中,创建并使用一个表时,查询优化器无法决定这个表的大小。

结论:通过本实验我们知道,临时数据库经过优化可以极大的提高系统性能。实际工作中,必须考虑具体应用的情况,需长时间经验的积累。

关于tempdb的优化

http://www.sybase.com.cn/cn/content/support/tempdb.htm

缺省情况下,tempdb数据库是放置在master设备上,容量为2M,而临时数据库是活动最为平凡的数据库常常被用来排序、创建临时表、重格式化等操作,所以tempdb的优化应该受到特别的关注。

第一步:将临时数据库与高速缓冲进行绑定。

由于临时表的创建、使用,临时数据库会频繁地使用数据缓存,所以应为临时数据库创建高速缓存,从而可以使其常驻内存并有助于分散I/O: 1、创建命名高速缓存

sp_cacheconfig “tempdb_cache”,”10m”,”mixed” 2、重新启动server

3、捆绑临时数据库到tempdb_cache高速缓存 sp_bindcache “tempdb_cache”, tempdb 4、若有大的I/O,配置内存池 第二步:优化临时表

大多数临时表的使用是简单的,很少需要优化。但需要对临时表进行复杂的访问则、 应通过使用多个过程或批处理来把表的创建和索引分开。以下两种技术可以改善临时表的优化

1、在临时表上创建索引 1)临时表必须存在

2)统计页必须存在(即不能在空表上创建索引)

2、把对临时表的复杂的使用分散到多个批处理或过程中,以便为优化器提供信息 下面的这个过程需要进行优化: create proc base_proc as

select * into #huge_result from auths

select * from article, #huge_result where article.author_code= #huge_result.author_code and sex=”0” 使用两个过程可以得到更好的性能 1)

create proc base_proc as

select *

into #huge_result

北京易初电子技术有限公司软件中心 2005-01

- 15 -

SYBASE学习笔记

from auths

exec select_proc 2)

create proc select_proc as

select * from article,#huge_result

where article.author_code=#huge_result.author_code and sex=”0”

说明:在同一个存储过程或批处理中,创建并使用一个表时,查询优化器无法决定这个表的大小。

Sybase内存和缓冲区管理

为SQL SERVER提供的可用内存越多,SQL SERVER就有越多的资源使用于缓冲区,即可减少服务器从磁盘读取数据以获取静态信息或编译过程计划的次数。调整SQL SERVER所占内存可通过在服务器配置文件中设置total memory参数进行,该参数的值指定了SQL SERVER在启动时所需的内存总量,如若该值为10000页,则SQL SERVER在启动时就将试图获得10000*2K=19.5M的内存,若不能满足则启动失败。

注意,若操作系统在进程的整个生命周期中支持动态内存分配,则可在SQL SERVER启动后为其分配额外的内存。

SQL SERVER启动时将内存分配给SQL SERVER可执行代码,SQL SERVER使用的静态内存,用户可配置参数占用的内存及不驻留在缓存上的数据结构,剩余的内存分配给两种SQL SERVER缓冲区即:数据缓冲区和过程缓冲区。两缓冲区的大小对整个系统的性能影响很大,在一个开发系统上可能要增加过多端程缓冲区的专用内存,而在一生产系统上则需减少过程缓冲区大小以便获得更大的数据缓冲区。 1。 确定缓冲区大小

在total memory配置的总空间中,首先要除去可爱执行代码所占空间,其大小因平台和版本不同而异,可使用sp_configure查询executable codesize参数的值得知,一般为3-4MB;其次需除去内部结构所占空间,内部结构分成内核结构和服务器结构,亦可将此部分内存看成静态开销和用户配置参数占用两个部分,前者大小不受用户可配置参数的影响,一般为2-3MB,而后者即用户可配置参数的大小则取决于配置参数的类型及其值的大小,包括number of user connections, number of open databases,number of devices,number of open objects,number of locks等,要得到这些用户配置参数使用内存大小的精确估计,可调用不带选项的sp_configure以显示所有参数和每个参数使用的内存量,其和即是用户配置参数所占用内存。

除去上述占用,剩余内存将以procedure cache percent配置参数的值按比例分配给过程缓冲区和数据缓冲区,例若值为20,即表示剩余内存的20%分配给过程缓冲区而80%分配给数据缓冲区。

确定缓冲区大小的另一种方法是检查SQL SERVE启动时写入SQL SERVER错误日志的内存信息,其中准确地说明了分配给过程缓冲区和数据缓冲区的数据量,以及多少个过程或其他编译对象能同时驻留在缓冲区中,如相关信息为: server:Number of proc buffers assocated:556

server:Number of blocks left for proc headers:629

server:Memory allocated for the default data cache:4144kb

北京易初电子技术有限公司软件中心 2005-01

- 16 -

SYBASE学习笔记

前两行为过程缓冲区信息,过程缓冲区总大小是分配给过程缓冲区的内存(第一行)及分配给过程头(即存放编译对象如存储过程的地方,根据被存储对象的大小,可能需要一个或多个过程头)的内存(第二行)之和,可存储在过程缓冲区中的编译对象受到此二者中较小者的限制。上述信息中,第一行指明了分配给过程缓冲区的缓冲区数量为556,每个缓冲区大小为76B,故过程缓冲区大小即为42256B,合21页;第二行则指明了分配给过程头的空间为629页,由此可以得出,过程缓冲区总大小为629+21=650页,合1.27M。

信息中第三行则指明了分配给默认数据库缓冲区的空间大小。此外,若配置了命名缓冲区,则相关信息还将包含每个命名缓冲区的信息,再加上这些命名缓冲区所占内存大小即得到总的数据缓冲区大小。欲知数据缓冲区大小还可通过sp_helpcache过程得到每个缓冲区和捆绑到这些缓冲区中的对象以及与不同缓冲区大小相关的开销的详细信息。 2。 缓冲区管理

数据缓冲区保存SQL SERVER当前使用和最近使用过的数据页,索引页和日志页.初装SQL SERVER时,会产生一个默认的数据缓冲区.SQL SERVER允许系统管理员把数据缓冲区分成独立的命名数据缓冲区,然后可把数据库或数据库对象捆绑到这些命名缓冲区上,以对缓冲区空间进行更合理的组织,控制数据库,表和索引在内存的驻留.另外,系统管理员还可在缓冲区内创建缓冲池,用于执行大块的磁盘I/O,改善数据查询性能,减少磁盘I/O.有关数据库缓冲区的指令有:

sp_cacheconfig 创建或删除命名缓冲区,改变缓冲区的大小或类型 sp_poolconfig 创建或删除I/O缓冲池,并改变其大小 sp_bindeache 将数据库或数据库对象捆绑到缓冲区

sp_unbindcache 从一个缓冲区中取消对指定对象或数据库的捆绑 sp_unbindcache_all 从一个缓冲区中取消所有对象的捆绑

sp_helpcache 报告有关数据缓冲区的小结信息,并显示捆绑于缓冲区的数据库和对象

sp_cachestrategy 报告有关为表,索引设置的缓冲区策略,禁止或重新允许先提或MRU策略

sp_logiosize 为日志改变默认的I/O大小

sp_spaceused 估计表和索引大小或有关数据库使用的空间量的信息 sp_estspace 估计表和索引的大小,给出表包含的行的数目 sp_help 报告表将捆绑于哪个缓冲区 sp_helpindex 报告索引将捆绑于哪个缓冲区 sp_helpdb 报告数据库将捆绑于哪个缓冲区

setshowplanon 报告有关用于查询的I/O大小和缓冲区的应用策略 setstatisticsioon 报告为查询进行的读操作数量 setprefetch on/off 允许或禁止某个会话的预先提取 (1) 查询数据库缓冲区的信息

查看默认数据缓冲区的大小,可使用指令sp_cacheconfig \显示结果如下,由两部分构成,上部分报告每个缓冲区中的内存池配置信息并总计了所有配置缓冲区的大小;下部分提供了每个缓冲区中的其他详细信息.

第一部分输出各列含义为:cache name为缓冲区名;status指示该缓冲区是否激活(值为 pend/act时表示该缓冲区刚建立,重启后将被激活;值为active时表示该缓冲区目前正处于 激活状态;值为pend/del时表示该缓冲区处于激活状态,但在服务器重启后将被删除);type 指示缓冲区是否可以存储数据(\和日志页(\只有默认缓冲区才会有 \类型,且默认的数据缓冲区类型不能改变,其他类型缓冲区也不能改为\

北京易初电子技术有限公司软件中心 2005-01

- 17 -

SYBASE学习笔记

config value显示下次SQL SERVER重启后缓冲区的大小,在此情况下,默认缓冲区不能显式 配置,故信息中其大小为0;run value显示SQL SERVER目前使用的大小,对于默认数据缓冲 区,该值将作为未显示配置到其他缓冲区中的所有数据缓冲区空间.

第二部分输出各列含义为:IO size显示缓冲池中的缓存大小,所有缓冲池缺省都分配2K 空间(有效空间大小为2K,4K,8K,16K);wash size指示缓冲池的刷洗区大小;config size和 run size显示配置大小和目前使用的大小,该两值在2K的缓冲池中是不同的(因为不能显式 配置其大小),而对于其他缓冲池,若试图在缓冲池间移动空间而一些空间又不能被释放时, 上述两值也不同.

Cache Name Status Type Config Value Run value ---------------- ------ ------ ---------------- -------------

default data cache Active Default 0.00MB 59.36MB -------------------------------

Total 0.00MB 59.36MB

=================================================================== Cache:default data cache, status:Active, Type:Default Config Size:0.00MB, Run size:59.36MB

IO Size Wash Size Config Size Run Size ------- --------- ----------- --------

2KB 512KB 0.00MB 59.36MB (2) 配置数据缓冲区

配置数据缓冲区有两种途径:一是使用过程sp_cacheconfig和sp_poolconfig进行交互 式配置,二是编辑配置文件中的total memory参数后重启使之生效. A. 交互式配置

> 创建命名缓冲区 (新创建的命名缓冲区从缺省缓冲区default data cache中分配空间) 每次执行sp_cacheconfig或sp_poolconfig时,SQL SERVER都将新的缓冲区或缓冲池信 息写入配置文件中并将文件的旧版本拷贝到一个备份文件中,给出备份文件名的信息被 送至错误日志.

创建一个新的名为pubs_cache的10M缓冲区指令如下,大小单位除M外,还可为P页,K,G, (默认为K).该指令将改变系统表并将新值写入配置文件但暂不激活缓冲区,要使其生效 须重启SQL SERVER.

sp_cacheconfig pubs_cache,\

在重启SQL SERVER使新值生效前,可先用sp_cacheconfig \查看配置信息 如下,其中的status列值为pend/act说明该缓冲区的配置是挂起的,要待重启后生效,故 Config value(配置的值)和Run value(正在使用的值)不同.

Cache Name Status Type Config Value Run value ---------------- ------ ------ ---------------- -------------

pubs_cache pend/act mixed 10.00MB 00.00MB -------------------------------

Total 10.00MB 00.00MB

重启后再允许不带缓冲区名参数的sp_cacheconfig,则信息改变如下,可见pubs_cache 已被激活,默认缓冲区从其空间中分出了10M给该缓冲区.可利用sp_cacheconfig过程设置 默认数据缓冲区的最小值,该部分空间将被锁定给默认数据缓冲区.例如设置默认数据缓 冲区大小最少不低于25M则指令为sp_cacheconfig \

北京易初电子技术有限公司软件中心 2005-01

- 18 -

SYBASE学习笔记

Cache Name Status Type Config Value Run value ---------------- ------ ------ ---------------- -------------

default data cache Active Default 0.00MB 49.28MB

pubs_cache Active mixed 10.00MB 10.00MB -------------------------------

Total 10.00MB 59.28MB

=================================================================== Cache:default data cache, status:Active, Type:Default Config Size:0.00MB, Run size:49.28MB

IO Size Wash Size Config Size Run Size ------- --------- ----------- --------

2KB 512KB 0.00MB 49.28MB

=================================================================== Cache:pubs_cache, status:Active, Type:mixed Config Size:10.00MB, Run size:10.00MB

IO Size Wash Size Config Size Run Size ------- --------- ----------- --------

2KB 512KB 0.00MB 10.00MB \\

若要保留一个只用于事务日志的缓冲区的类型,可以将缓冲区的类型设为\ 如创建\类型的pubs_log缓冲区为sp_cacheconfig pubs_log,\下示为该缓冲区在重启前的状态.

Cache Name Status Type Config Value Run value ---------------- ------ ------ ---------------- -------------

pubs_cache pend/act log only 7.00MB 0.00MB -------------------------------

Total 7.00MB 0.00MB

创建命名缓冲区后一般都须将某些对象捆绑到该缓冲区上。若建立命名缓冲区后 未将任何对象捆绑到该命名缓冲区上,则该命名缓冲区所占内存将被浪费,因为任何未指定缓冲区的对象都将缺省使用默认数据缓冲区default data cache. > 将数据缓冲区划分为缓冲池

建立数据缓冲区后,可将其划分成缓冲池,各不同的缓冲池具有不同的I/O大小,当 SQL SERVER进行大I/O操作时,可将许多页一次读入缓冲区中,故可提高I/O效率.这些 页总是被当作一个单元进行处理,它们共存于缓冲区中,作为一个单元被写到磁盘中.

缓冲池的页大小可为2K,4K,8K,16K,缓冲池的总大小不能低于512K.所有关于缓冲池 的配置都是动态的,无需重启SQL SERVER即可生效.SQL SERVER内2K页缓冲池的个数 必须保持一个合理的值,否则将会影响SQL SERVER性能,因为某些命令只能使用2K 的I/O块如disk init及某些dbcc命令。

在pubs_cache数据缓冲区中创建一个每页16K,总空间为7MB的缓冲池,指令如下.通 常,创建命名数据缓冲区时,其空间总是被默认划分为每页2K的缓冲池,创建其它页大 小的缓冲池时,该2K页缓冲池空间被部分分配给新缓冲池.下例中2K页大小的缓冲池 原共有10M空间,分配给7M给16K页的新缓冲池后,2K页缓冲池还剩3M空间. >sp_poolconfig pubs_cache,\

北京易初电子技术有限公司软件中心 2005-01

- 19 -

SYBASE学习笔记

>go

>sp_cacheconfig pubs_cache

Cache Name Status Type Config Value Run value ---------------- ------ ------ ---------------- -------------

pubs_cache Active mixed 10.00MB 10.00MB -------------------------------

Total 10.00MB 10.00MB

=================================================================== Cache:pubs_cache, status:Active, Type:mixed Config Size:10.00MB, Run size:10.00MB

IO Size Wash Size Config Size Run Size ------- --------- ----------- --------

2KB 512KB 0.00MB 3.00MB 16KB 1424KB 7.00MB 7.00MB

在默认数据缓冲区中也可创建缓冲池,如创建16K缓冲池,空间大小为8M,则指令为: sp_poolconfig \

若要为一个数据库的事务日志创建缓冲区,应配置缓冲区中大部分空间来匹配日志 I/O的大小.默认值为4K,若没有4K的可用缓冲池,SQL SERVER就为日志使用2K的I/O.

日志I/O的大小可通过系统过程sp_logiosize来改变,每个数据库的日志I/O大小会在 SQL SERVER启动后的错误日志中报告,也可通过使用数据库和执行不带参数的过程

sp_logiosize来检查一个数据库的日志I/O大小.如为pubs_log缓冲区配置4K页大小 的缓冲池指令为sp_poolconfig pubs_log,\也可在默认数据缓冲区中创

建一个4K页缓冲池,以供未被捆绑至其它缓冲区的任何数据库的事务日志来使用: sp_poolconfig \ 此外,可修改缓冲池大小,如从16K页I/O的缓冲池中取出1M空间增加到4K页I/O缓冲池中:sp_poolconifg pub_cache,\ > 缓冲区悃绑操作

系统管理员把数据缓冲区分成独立的命名数据缓冲区后,可将数据库对象捆绑到这 些缓冲区上,以控制数据库,表和索引在内存的驻留.若建立命名缓冲区后未将任何对象捆绑到该命名缓冲区上,则该命名缓冲区所占内存将被浪费,因为任何未指定缓冲区的对象都将缺省使用默认数据缓冲区default data cache.为了将任何系统表,包括事务日志syslogs捆绑至缓冲区中,数据库须处于单用户模式.对象被捆绑后立即生效而无需重启SQL SERVER.注意,进行捆绑或删除捆绑操作时,SQL SERVER需锁定相应对象,故相应对象上的其它操作可能有延迟.此外,可不删除现有的捆绑而重新捆绑对象.另外,当被捆绑对象上有脏的读活动或有打开的游标时,捆绑或删除捆绑的操作将不能进行.

1>sp_dboption pubs2,single,true 置pubs2库为单用户状态 2>use pubs2 3>checkpoint

4>go 准备进行数据库对象的捆绑。注意,捆绑对象须在对象所在的库中进行。 >sp_bindcache pubs_cache,pubs2,titles

将pubs2库中的表titles捆绑至缓冲区pubs_cache. >sp_bindcache pubs_cache,pubs2,titles.titleind

在titles上捆绑索引,并将pubs2库中的表titles捆绑至缓冲区pubs_cache.

北京易初电子技术有限公司软件中心 2005-01

- 20 -

SYBASE学习笔记

>sp_bindcache pubs_cache,pubs2,\

将pubs2库中用户hj的表sale_east捆绑至缓冲区pubs_cache. >sp_bindcache pubs_log,pubs2,syslogs

将pubs2库的事务日志syslogs捆绑至缓冲区pubs_log. >sp_bindcache pubs_cache,pubs2,au_pix,\

表的text和image列存储在一个单独的数据结构中,若将此表捆绑至缓冲区,需加 \参数.

1>sp_dboption pubs3,single,true 置pubs3库为单用户状态 2>use pubs3 3>checkpoiot 4>use master

5>go 准备进行数据库的捆绑,注意,捆绑数据库须在master库中进行。 >sp_bindcache tempdb_cache,tempdb

将数据库tempdb捆绑至缓冲区tempdb_cache。 注意,被捆绑到日志缓冲区上的对象只能是syslogs表。

可通过sp_helpcache过程查询所有或指定缓冲区及其中被捆绑对象的捆绑信息.如下 例示,其中status列报告缓冲区的捆绑是(\否(\有效.若数据库或对象被捆绑至缓冲池而该缓冲区已被删除,则捆绑信息仍保留在系统表中但缓冲区捆绑被标记无效,所有无效的捆绑对象均使用默认的数据库缓冲区.若随后用与被删除的缓冲区相同的名字创建了另一个缓冲区,则当该缓冲区通过重启SQL SERVER而被激活时,上述捆绑又将变为有效.

删除缓冲区捆绑可用两个过程:sp_unbindcache用于删除缓冲区中对一个实体的捆绑; sp_unbindcache_all则用于删除缓冲区中对所有对象的捆绑,但若捆绑至缓冲区的数据库 超过8个,或数据库的对象超过8个,就不能使用sp_unbindcache_all,此情况下,必须使用 sp_unbindcache删除单个的数据库或对象,使捆绑的数据库不超过8个.此外,当删除缓冲 区对一个对象的捆绑时,内存中所有当前的页都被从缓冲区中清除. >sp_unbindcache pubs2

删除对数据库pubs2的捆绑 >sp_unbindcache pubs2,titles

删除对pubs2库中对titles表的捆绑 >sp_unbindcache pubs2,titles,titleidind

铲除对pubs2库中titles表上titleidind索引的捆绑. > 改变命名数据缓冲区大小

可通过sp_cacheconfig指定一个新的空间以增加或减少指定缓冲区的大小,所有新增空 间都将从缺省数据缓冲区default data cache内的2K缓冲池中被加到指定缓冲区内的2K 页缓冲池中,所有减少的空间亦从指定缓冲区内的2K页缓冲池中被释放到缺省数据库缓冲 区default data cache内的2K缓冲池中. >sp_cacheconfig pubs_cache

Cache Name Status Type Config Value Run value ---------------- ------ ------ ---------------- -------------

pubs_cache Active mixed 10.00MB 10.00MB -------------------------------

Total 10.00MB 10.00MB

===================================================================

北京易初电子技术有限公司软件中心 2005-01

- 21 -

SYBASE学习笔记

Cache:pubs_cache, status:Active, Type:mixed Config Size:10.00MB, Run size:10.00MB

IO Size Wash Size Config Size Run Size ------- --------- ----------- --------

2KB 720KB 0.00MB 3.00MB 4KB 1024KB 4.00MB 4.00MB 16KB 1424KB 3.00MB 3.00MB 现以sp_cacheconfig pubs_cache,\后重启,则改变如下: >sp_cacheconfig pubs_cache

Cache Name Status Type Config Value Run value ---------------- ------ ------ ---------------- -------------

pubs_cache Active mixed 20.00MB 20.00MB -------------------------------

Total 20.00MB 20.00MB

=================================================================== Cache:pubs_cache, status:Active, Type:mixed Config Size:20.00MB, Run size:20.00MB

IO Size Wash Size Config Size Run Size ------- --------- ----------- --------

2KB 512KB 0.00MB 13.00MB 4KB 1024KB 4.00MB 4.00MB 16KB 1424KB 3.00MB 3.00MB 返回pubs_log缓冲区报告:

>sp_cacheconfig pubs_log

Cache Name Status Type Config Value Run value ---------------- ------ ------ ---------------- -------------

pubs_log Active log only 7.00MB 7.00MB -------------------------------

Total 7.00MB 7.00MB

=================================================================== Cache:pubs_log, status:Active, Type:log only Config Size:7.00MB, Run size:7.00MB

IO Size Wash Size Config Size Run Size ------- --------- ----------- --------

2KB 512KB 0.00MB 4.00MB 4KB 1024KB 3.00MB 3.00MB 再运行以指令sp_cacheconfig pubs_log,\后重启,则改变为: >sp_cacheconfig pubs_log

Cache Name Status Type Config Value Run value ---------------- ------ ------ ---------------- -------------

pubs_log Active log only 6.00MB 6.00MB -------------------------------

北京易初电子技术有限公司软件中心 2005-01

- 22 -

SYBASE学习笔记

Total 6.00MB 6.00MB

=================================================================== Cache:pubs_log, status:Active, Type:log only Config Size:6.00MB, Run size:6.00MB

IO Size Wash Size Config Size Run Size ------- --------- ----------- --------

2KB 512KB 0.00MB 3.00MB 4KB 1024KB 3.00MB 3.00MB

欲彻底删除一个数据缓冲区,将其大小复位为0可使用sp_cacheconfig pubs_log,\ 则将缓冲区状态变为\重启SQL SERVER后此改变生效.在执行该操作前,缓冲 区需保持激活状态,捆绑至缓冲区的所有对象仍使用该缓冲区执行I/O操作.若有对象捆 绑于待删除的数据缓冲区,则SQL SERVER重启后,缓冲区的捆绑被标记为无效,所有无效 缓冲区捆绑的对象都使用默认数据缓冲区.当捆绑被标记为无效时,警告信息将被输入错误日志.注意,默认数据缓冲区不能删除.

使用dbcc memusage确定procedure cache size大小

http://bbs.chinaunix.net/forum/viewtopic.php?t=148925&show_type=new --------------------------------------------------------------------------------

1.在Sybase正常运行一段时间后(各procedure&trigger已经运行或大多数已经运行一遍后)使用dbcc traceon(3604)(将信息输出到前台),dbcc memusage来观看内存分布。

2.得到输出信息分三个部分

第一部分描述的是你的配置参数的大小。

第二部分描述的是缓冲最多的几个和他的库及对象(Buffer Cache Memory, Top 10: ) 重点在第三部分. (Procedure Cache, Top 20: )这里可以看到server启动至今最消耗内存的20个procedure的情况。我们需要计算Size of plans:/Number of plans得到最大的那个就是最大的存储过程。

3.将最大存储过程消耗的内存*最大并发用户数*1.25就可得到最大的procedure cache size了。

这里有几点要注意,需要库运行一段时间才有意义,原因上面已经说明。在有需要注意的就是top 20里面包含的最大的procedure plan size可能是系统存储过程,计算不要使用系统过程的大小来估算而需要使用用户过程计算。三是这个计算的值是最大值,如果内存紧张有可能造成浪费.并且可能更改或增加查询计划使该值不适用。所以需要使用sp_sysmon来观察'Procedure Cache Management'部分的Procedure Reads from Disk ,如果数值比较大的话是太小,如果为零的话就是理想情况。

如何动手修改interfaces文件

http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_cj_00016.htm

在一些HP和SUN的机器上,interfaces文件中关于SERVER的信息是以16进制的形式存储的,必须要通过实用程序dscp才能进行修改。

实际上,我们只要了解了这些16进制数据的格式,也可以直接通过vi来更改interfaces文件。

北京易初电子技术有限公司软件中心 2005-01

- 23 -

SYBASE学习笔记

下面以e3000为例,介绍一下interfaces文件的结构和格式: 用vi打开/opt/sybase/interfaces,可以看到这些信息: E3000

master tli tcp /dev/tcp \\x00021a0a9e4d51f80000000000000000 query tli tcp /dev/tcp \\x00021a0a9e4d51f80000000000000000

其中:

/x0002 : 保留字,不必修改

1a01 : 16进制端口号,高位在左边,转换成10进制为:6666 9e4d51f8 : 16进制主机地址,

转换成10进制为: 9e -- 158 4d -- 77 51 -- 81 f8 -- 248 即为: 158.77.81.248

可以修改的信息其实主要就是主机地址和端口号,所以,如果需要,只要按照以上格式修改其中信息即可。

初次建立数据库对sa的口令的修改

sp_password old_password, new_password, login name 1> sp_password null, nextip, sa 2> go 3>

如何更改SQL Server名称(在UNIX、OPENVMS平台上)

http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_zj_00008.htm

在SYBASE产品中没有特定的函数或者存储过程用来更改SQL Server/ASE Server的名称,因此,只能手工修改某些参数或者配置来完成此任务。

需要修改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/ASE Server。确认DSQUERY、DSLISTEN环境变量已经更改为所需内容。

另外,如果SQL/ASE Server是被设置为远程服务器,还要修改与此server相关的系统表sysservers中的字段以及interfaces文件。

理论上例如配置文件、RUN脚本、errorlog文件不需要指定server 名称(但是通常习惯指定server名称)。在RUN startup脚本中要指定server名称。 您可以根据以下提纲完成此项任务:

如果server名称加在了表sysservers中,用sp_dropserver删除。 Shut down server 编辑 interfaces文件

北京易初电子技术有限公司软件中心 2005-01

- 24 -

SYBASE学习笔记

更改RUN_server_name文件名,并修改其内容,-s(UNIX)、/SERVER(OpenVMS)后面所跟的参数(server 名称)

更改errorlog文件名(如果需要)

修改DSQUERY、DSLISTEN环境变量(如果需要)

更改配置文件名(server_name.cfg、server_name.bak、server_name.nnn),在SYBASE安装路径下

Start server

使用sp_addserver重新添加server(如果需要)

如果server是作为远程server使用的,还需要删除并重新添加。

常见的系统过程

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

Sp_addgroup 在当前数据库中建立一个数据库用户组 Sp_addlogin 建立一个SQL服务器用户 Sp_adduser 在当前数据库中增加一个用户 sp_changegroup 改变数据库用户组

Sp_dboption 查询或改变数据库系统设置 Sp_dropdevice 删除设备 Sp_dropgroup 删除组 Sp_droplogin 删除帐号

Sp_help 查询数据库对象及所有数据库信息 Sp_helpdb 查询数据库信息 Sp_helpdevice 查询设备信息 Sp_helpgroup 查询组信息 Sp_helpindex 查询给定表信息 Sp_helpuser 查询用户信息 Sp_lock 查询当前加锁信息

Sp_monitor 查询SQL服务器统计信息 Sp_password 改变登录帐号口令

Sp_spaceused 查询表中的行数、数据页数及空间大小 Sp_who 查询当前用户及过程信息 Sp_syntax 查询操作语法 Sp_configure 配置系统参数

系统的启动和关闭

1、启动SQL Server

应用SQL Server安装程序(sybinit)创建SQL Server或Backup Server, 默认文件名为RUN_SYBASE 和RUN_SYB_BACKUP,放在¥SYBASE/INSTALL目录下。 Startserver 用来启动一SQL Server 或Backup Server: Startserver -f RUN_SYBASE Startserver -f RUN_SYB_BAKUP

可以通过showserver查看SQL ServerBackup Server是否已经启动,在$SYASE/INSTALL

北京易初电子技术有限公司软件中心 2005-01

- 25 -

SYBASE学习笔记

下运行showserver 查看SQL Server 是否启动 2、启动SQL Server的单用户模式

如果要恢复一已被损坏的master数据库,则必须要启动SQL Server的单用户模式。单用户模式下仅允许一个系统管理员向SQL Server注册。 Startserver -f RUN_SYBASE -m 3、关闭服务器

关闭SQL Server可以在isql中使用T-SQL命令: 关闭SQL备服务器

shutdown SYB_BACKUP 关闭SQL主服务器 shutdown [with nowait]

利用脚本自动关闭sybase数据库

如果是unix,ksh #!/bin/ksh

LOGIN=\

if [ \

echo \ exit 0 fi

echo \ {

isql -Usa -P -Syourservername > /dev/null 2>&1 <

shutdown SYB_BACKUP go

shutdown go ISQL }

BCP 简 要 说 明

http://bbs.chinaunix.net/forum/viewtopic.php?t=20273&show_type=new --------------------------------------------------------------------------------

BCP是SYBASE公司提供专门用于数据库表一级数据备份的工具。一般存放在所安装的ASE或者Open Client 的BIN目录中。12版本以前的ASE,bcp存放目录为 $SYBASE/bin,12版本(含12版本)以后存放目录为 $SYBASE/OCS-12_x/bin,其中$SYBASE为SYBASE安装目录,12_x代表12.0、12.5版本,显示为12_0或者12_5 ,可执行文件名称为bcp.EXE,参数列表如下:(可用 bcp – 得到)

usage: bcp [[database_name.]owner.]table_name[:slice_number] {in | out} datafile [-m maxerrors] [-f formatfile] [-e errfile]

北京易初电子技术有限公司软件中心 2005-01

- 26 -

SYBASE学习笔记

[-F firstrow] [-L lastrow] [-b batchsize]

[-n] [-c] [-t field_terminator] [-r row_terminator]

[-U username] [-P password] [-I interfaces_file] [-S server] [-a display_charset] [-q datafile_charset] [-z language] [-v] [-A packet size] [-J client character set]

[-T text or image size] [-E] [-g id_start_value] [-N] [-X] [-M LabelName LabelValue] [-labeled]

[-K keytab_file] [-R remote_server_principal]

[-V [security_options]] [-Z security_mechanism] [-Q]

常用数据备份格式为:

bcp dbname..tablename out c:\\temp\\filename -Usa -Ppassword –Sservername –c

其中 –U后为SYBASE登录名称,–P后为SYBASE登录口令,–S后为SYBASE服务名称,–c代表使用可见文本方式导出数据

如果为数据恢复只需要将out 替换为 in 即可。

可用如下方法生成一个可以一次导出一个数据库中所有表的数据的执行脚本。编辑一个如下文本文件 文件名称例为 bcpscript:

use dbname 选中将要导出数据的数据库 go

select 'bcp dbname..' + name + ' out c:\\temp\\' + name + ' -Usa -P -Ssybcdsrv -c' from sysobjects where type = 'U' 在sysobjects系统表中type为U的表为用户表,系统表为S。 go

用如下格式执行:

isql –Usa –Ppassword –Sservername –i bcpscript –o bcpout.bat

i参数后为输入文件,o参数后文件为输入文件执行后得到的输出文件。

执行后可以得到一个后缀名为 BAT 的批处理文件(在unix下则生成一个shell文件并更改相应的执行权限),可直接执行。即在指定的目录下导出了相应的数据文件。一个表的数据为一个文件。如在UNIX下则可不用BAT后缀。

备份得到的数据文件如果需要重新往数据库中恢复,只需要将上面操作步骤中BCP命令中的out 参数换为in参数即可。

注意:在对正式数据做操作前最好先作一些测试。

另外,如果牵涉到使用bcp进行字符集的更改,可以采用 –J charset 参数进行 。关于BCP等工具的具体使用指南,请参见SYBASE相关文档。

针对系统移植所需做的工作,应该有如下几个步骤: 1. 安装新环境的硬件环境,包括网络,硬盘状况; 2. 安装新环境的操作系统,包括Service Pack;

3. 安装相同版本的SYBASE数据库产品,包括补丁; 4. 添加数据库用户,设备等相关信息,应与老系统中一致 5. 创建新系统数据库;

6. 利用你所拥有的表脚本或者通过SYBASE CENTRAL中的生成DDL功能,将老系统中的建表脚本导出,生成数据库中的表.最好将建表脚本与建立表上约束(主键,外键等)的脚本分开,先在表上不建约束,在数据导入后,再加上.;

北京易初电子技术有限公司软件中心 2005-01

- 27 -

SYBASE学习笔记

7. BCP OUT 老系统中数据,根据上面提到的方法;

8. 运行建立其他对象的脚本,包括索引,主键,外键及存储过程,触发器,缺省等; 9. 在新系统中对需要更改的表结构做更改,或者添加新表; 10. 测试应用系统是否工作正常.

如何生成bcp命令文件

http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_cj_00008.htm (以pubs2为例)

本文适应于isql 11.*, 可通过isql -v得到版本

编辑一个文本文件select.sql,内容如下: set nocount on use pubs2 go

select \ from sysobjects where type=\ go

如果是unix, 执行:

isql -Usa -P -b -i select.sql -o bcpout chmod +x bcpout

如果是Windows, 执行:

isql -Usa -P -b -i select.sql -o bcpout.bat

将select.sql中的out换为in, 重复以上步骤即可得到bcp in的命令文件

如何配置SQL Server 11,使得快速BCP具有更好的性能?

http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_gj_00003.htm 有几种方法可以改善BCP的性能:

(1)增加扩展分配(extent allocation)。缺省情况下,预分配2到31个扩展。在一个BCP批次中,未使用的预分配扩展被释放。为了获得最佳BCP性能,设置BCP批次大小和 “number of preallocated extents”预分配扩展个数,以消除空间重新释放。使用Sp_config number of pre-allocated exetents,nn 对于系统10:buildmaster -ycpreallocext=nn

(2)对表进行分区

(3)配置OAM页面的缓冲策略,以减少对OAM(Object Allocation Map)页面的物理读。 (4)配置大I/O的缓冲池,例如16K:

Sp-poolconfig default, \使用-A标记,加大网络包大小: bcp -A 16384

Sybase数据库目录说明

? ? ?

/usr/sybase =.. 主目录 .. /install 安装程序 ../bin 执行程序

- 28 -

北京易初电子技术有限公司软件中心 2005-01

SYBASE学习笔记

? ? ? ? ? ? ? ?

../include 库函数文件 ../lib 宿主语言库 ../doc 联机文件

../scripts SQL 动态描述文件 ../help 帮助信息

../locales 语言限制文件 ../termdef 终端定义文件 ../charsets 字符集文件

相关功能操作说明

sp_addumpdevice 'disk',(logicalname),(physicalname) --定义转储设备 ex.sp_addumpdevice 'disk','nbdump_1','vol1:\\nbdump\\nbdump.dat'

dump tran (database_name) with truncate_only --删去日志 ex.dump tran tele114 with truncate_only

sp_configure (config_name),(config_value) --更改设置值 ex.sp_configure 'allow updates',1

sp_dboption 是用来打开或关闭数据库的选项 [select into/bulkcopy],只有这样数据库才能执行如select identity(int) id0,* into #temp1 from tablename这样的sql语句。查看是否打开option用sp_helpdb就可以查看。Sp_dboption只能在master 数据库中引用。是否允许列字段为空还是不为空也是用这个命令。 1> use nextipdb 2> go

3> master..sp_dboption nextipdb,\ 4> go

5> checkpoint 6> go

1> dbcc checkdb 2> go

3> dbcc checkcatalog 4> go

1、增加自定义的数据类型为sp_addtype datatypename ,\ FE: sp_addtype tid, \

2、查看某一用户是否有什么权限,sp_helprotect user_name 4、 修改用户出始登陆的数据库,命令为sp_modifylogin 5、 检索identity字段可以用syb_identity=指定值来检索,如 t_dns_rezo_gs中有且一个identity字段[rzgs_id ],则可如下检索 select count(*) from t_dns_rezo_gs where syb_indentity=1 6、 sp_dboption可设置数据库通用的一些选项。

北京易初电子技术有限公司软件中心 2005-01

- 29 -

SYBASE学习笔记

7、 当想要对表进行手工插入identity时,如果没有set identity_insert table_name on/off打开, 就要打开,如果一旦打开,每一笔记录都要手工指明identity值,而不是自动插入形式,切记。如果变回off后,则identity记数从表中最大的identity值开始记数。例最大值为10,则记数从11开始,中间就有gap出现了。

8、 identity默认精度为18位,如果达到了,就需要增加其精度。可用alter table table-name modify identity_col_name, numeric(20,0)进行修改精度。

9、 使数据库自动为新建表建立一个隐藏的identity字段为sp_dboption db_name , \identity\

为identity设置精度,由管理员操作sp_configure \精度位数 如sp_configure \

10、 在当前数据库中创建另外一个数据库的表或其他对象, create other_db_name..object_name

如: create table newdb..t_dns_gs (name varchar(255))

11、 select user_name() /user / db_name() 返回当前用户或数据库

12、 col_length(\表名\\字段名\返回指定字段的长度/ datalength(\列名\实际存储长度对varchar/期于是创建时指定的长度

13、 isNull(exp1, exp_value) 为如果exp1为null则用exp_value替代 14、 convert(转换后的类型和长度,要转换的类型值) 如:select \

1> select mmm=\ 2> go mmm

---------------------------- my Test 1211333

(1 row affected)

15、 获取当前时间为select getdate()

16、 当前变量申明 declare @变量名 类型 赋值操作select @变量名=变量值 如:

declare @sIpad varchar(20),@iNum numeric(2,0) select @sIpad='0AC80001',@iNum=32 17、 看过程的源码sp_helptext 过程名 例子:

1> sp_helptext p_convert_num_to_char 2> go

# Lines of Text --------------- 1

(1 row affected) text

---------------------------------------------------------------------------------------------------------------------- create procedure p_convert_num_to_char @cint numeric, @outchar varchar(10) output

北京易初电子技术有限公司软件中心 2005-01

- 30 -

SYBASE学习笔记

as

if (@cint=4)

select @outchar='Four' if (@cint=5)

select @outchar='Five' if (@cint=6)

select @outchar='Six' (1 row affected) (return status = 0)

如何检查数据库中数据的一致性

http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_zj_00006.htm

数据库一致性检查(dbcc)提供了一些命令用于检查数据库的逻辑和物理一致性。Dbcc主要有两个功能:

使用checkstorage 或 checktable 及 checkdb 在页一级和行一级检查页链及数据指针。 使用checkstorage, checkalloc, 或 checkverify, tablealloc, 及indexalloc 检查页分配。 在下列情况中需要使用 dbcc 命令:

作为数据库日常维护工作的一部分, 数据库内部结构的完整性决定于sa 或dbo 定期地运行 dbcc 检查。

在系统报错以后, 确定数据库是否有损坏。 在备份数据库之前, 确保备份的完整性。

如果怀疑数据库有损坏时, 例如, 使用某个表时报出表损坏的信息, 可以使用 dbcc 确定数据库中其他表是否也有损坏。 下面是dbcc的简单用法: dbcc checktable (table_name)

检查指定的表, 检查索引和数据页是否正确链接, 索引是否正确排序, 所有指针是否一致, 每页的数据信息是否合理, 页偏移是否合理。 dbcc checkdb (database_name)

对指定数据库的所有表做和checktable 一样的检查。 dbcc checkalloc (database_name,fix|nofix)

检查指定数据库, 是否所有页面被正确分配, 是否被分配的页面没被使用。当使用\选项时,在检查数据库的同时会自动修复有问题的页面。(若数据库数据量很大,则该过程会持续很长时间。)

dbcc tablealloc (table_name,fix|nofix)

检查指定的表, 是否所有页面被正确分配, 是否被分配的页面没被使用。是 checkalloc 的缩小版本, 对指定的表做完整性检查。当使用\选项时,在检查数据表的同时会自动修复数据表中有问题的页面。

关于上述命令的其它选项及详细使用方法和checkstorage, checkverify, indexalloc 的详细使用方法, 请参阅有关命令手册。

举例1: Unix平台检查pubs2数据库的一致性 单用户模式启动Server:

$SYBASE/install startserver -f RUN_server_name -m vi dbcc_db.sql

北京易初电子技术有限公司软件中心 2005-01

- 31 -

SYBASE学习笔记

use master go

sp_dboption pubs2,\go

use pubs2 go

checkpoint go

dbcc checkdb(pubs2) go

dbcc checkalloc(pubs2,fix) go

dbcc checkcatalog(pubs2) go

use master go

sp_dboption pubs2,\go

use pubs2 go

checkpoint go quit go

isql -Usa -Pxxxxxx -SSYBASE dbcc_db.out grep Msg dbcc_db.out

举例2: Unix平台检查pubs2数据库中titles表的一致性 vi dbcc_table.sql use pubs2 go

dbcc checktable(titles) go

dbcc tablealloc(titles) go

isql -Usa -Pxxxxxx -SSYBASE < dbcc_table.sql > dbcc_table.out grep Msg dbcc_table.out

启动时数据库不能回滚解决方法

第1. 使用 install目录下 的 RUN 文件启动数据库服务器(如果服务已经启动,可跳过此步骤)

第2. 使用isql连接进入数据库服务器 isql -Usa -Ppasswd -S server_name 1>sp_configure 'allow update',1

北京易初电子技术有限公司软件中心 2005-01

- 32 -

SYBASE学习笔记

2>go

1>use master 2>go

1>sp_helpdb DB_NAME 2>

记下此处查询出的数据库选项 (例如:select into/bulkcopy等)

1>begin tran 2>go

1>update sysdatabases set status = -32768 where name = 'DB_NAME' (注意:一定要加上数据库名称条件,切记,最好使用事务) 2>go

如果显示 (1 row affected),commit,否则 rollback 1>commit 2>go

1>shutdown with nowait 2>go

第3. 重新重复步骤1,启动数据库服务器,注意观察日志中是否显示 在 recovery database DB_NAME 时使用bypass状态,如果正常,这种情况下,数据库服务器应该能够完全启动

第4. 使用isql连接进入数据库服务器 isql -Usa -Ppasswd -S server_name 1>use master 2>go

1>dump tran DB_NAME with no_log ( dbcc rebuild_log(DBNAME,1,1) ) 2>go

1>update sysdatabases set status = 0 where name = 'DB_NAME' (注意:一定要加上数据库名称条件,切记) 2>go

1>shutdown with nowait 2>go

第5. 重新重复步骤1,启动数据库服务器,注意观察日志中是否显示 recovery database DB_NAME 成功,DB_NAME数据库online

第6. 恢复数据库选项

使用isql连接进入数据库服务器 isql -Usa -Ppasswd -S server_name 1>use master 2>go

1>sp_dboption DB_NAME,'select into',true 2>go

北京易初电子技术有限公司软件中心 2005-01

- 33 -

SYBASE学习笔记

1>use DB_NAME 2>go

1>checkpoint 2>go

如果有其他选项,依法处理

先试步骤四中的 dump tran with no_log 如果不行就用后面括号中那个命令 dbcc rebuild_log(DBNAME,1,1)

dbcc rebuild_log,如果还不行,只有恢复备份了 如果没有备份,只能在重新做1到3步骤,然后使用bcp将数据库中所有数据备份出来,然后重新创建数据库了。

强行截断日志的方法能够清除系统中日志的错误,让数据库正常online,但也有可能造成数据库中用户表甚至系统表的损坏,

所以建议在数据库正常online后进行全库的DBCC检查(比如dbcc checkdb、 dbcc checkalloc等)以确保正常运行。

解决数据库被挂起的问题

现象:Error 926

Severity Level 14 Error Message Text

Database 'xx' cannot be opened - it has been marked SUSPECT by recover Explanation

(1) 当你使用Transact_SQL命令操作这个数据库的数据时, 出现这个信息, 这是一个严重的错误, 如果你要使用这个数据库的数据, 必须改正这个错误. (2) 启动Backup Server, 后备master数据库(这一步很重要!) 1>dump database master to \ 2>go

(3) 用isql登录到SQL Server, 须用sa帐号 (本文以pubs2数据库为例) 1>sp_configure \ 2>go

1>begin tran 2>go

1>use master 2>go

1>update sysdatabases 2>set status = -32768 3>Where name=\ 4>go

如果得到(1 row affected),则 1>commit 2>go 否则 1>rollback 2>go

北京易初电子技术有限公司软件中心 2005-01

- 34 -

SYBASE学习笔记

(4)重新启动SQL Server.

注:SQL Server重新启动之后,当发现数据库本身存在不可恢复的问题时,如数据页损坏等,且没有完好的数据库备份,一定要用bcp...out备份用户数据库数据。此时,以下步骤省略,并按照“如何删除坏的用户数据库”文章删除此数据库。之后重建此数据库,恢复备份。

否则,按以下步骤继续操作: 用sa帐号注册到SQL Server. 1>begin tran 2>go

1>use master 2>go

1>update sysdatabases 2>set status=0

3>Where name=\ 4>go

如果得到(1 row affected),则 1>commit 2>go 否则 1>rollback 2>go

1>sp_configure \ 2>go

(5)重新启动SQL Server.

(6) 如果你的数据库原来有dboption(例如\等), 你需要重新设置这些option.

(7) 当数据库已经恢复可使用状态后,运行dbcc命令检查数据库的一致性(参照“如何检查数据库中数据一致性”文章) (8) 备份用户数据库 例如:

1>dump database pubs2 to \ 2>go

如何终止数据库恢复过程

http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_zj_00002.htm

当某一正常运行的大事务(例如:update、delete操作)被终止,且重新启动server后,运行该事务的数据库处于恢复状态,通常这种状态会持续很长时间,当在此恢复过程中没有出现任何异常时,建议用户耐心等待恢复过程完成。同时我们提供以下方法来终止此恢复过程,但请用户注意这些操作将带来数据的不一致性。必要时,希望用户用完整、可靠的数据库备份恢复此数据库。

(1) 启动Backup Server, 后备master数据库(这一步很重要!) 1>dump database master to \ 2>go

北京易初电子技术有限公司软件中心 2005-01

- 35 -

SYBASE学习笔记

(2) 用isql登录到SQL Server, 须用sa帐号 (本文以pubs2数据库为例) 1>sp_configure \ 2>go

1>begin tran 2>go

1> use master 2> go

1>update sysdatabases 2>set status = -32768 3>Where name=\ 4>go

如果得到(1 row affected),则 1>commit 2>go 否则

1>rollback 2>go

(3)这时重新启动SQL Server, 使用bcp工具将该数据库(本例中为pubs2)内的全部数据导出备份(这一步很重要!)

(4)以sa帐号登录到SQL Server,执行下面操作: 1>dump tran pubs2 with no_log 2>go

1>begin tran 2>go

1> use master 2> go

1>update sysdatabases 2>set status=0

3>Where name=\ 4>go

如果得到(1 row affected),则 1>commit 2>go 否则

1>rollback 2>go

1>sp_configure \ 2>go

(5) 重新启动server

(6) 如果你的数据库原来有dboption(例如\等), 你需要重新设置这些option..

(7) 当数据库已经恢复可使用状态后,运行dbcc命令检查数据库的一致性(参照\如何检查数据库中数据一致性\文章) (8) 后备用户数据库

北京易初电子技术有限公司软件中心 2005-01

- 36 -

SYBASE学习笔记

例如:

1>dump database pubs2 to \ 2>go

如何删除坏的用户数据库?

http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_zj_00004.htm (以pubs2为例)

当使用drop database无法删除数据库时,使用本文所示方法可以删除。 (1)使用isql以sa注册SQL server (2)设置允许修改系统表

1>sp_configure \2>go

(3)把 要删除的用户数据库置为\状态 1>use master 2>go

1>begin tran 2>go

1>update sysdatabases set status=256 2>where name=\3>go

如果得到(1 row affected),则 1>commit 2>go 否则

1>rollback 2>go

(4)重启server,并用isql以sa注册。

(5)删除数据库

1>dbcc dbrepair(pubs2,dropdb) 2>go

(6)恢复允许修改系统表

1>sp_configure \2>go

(7)结束

如何查找数据库启动失败原因

在实际环境中,数据库Server无法启动的原因很多,本文仅列出了几种常见的情况,供您参考。

首先,应检查Server的日志文件。不同版本缺省的日志文件如下(其中

北京易初电子技术有限公司软件中心 2005-01

- 37 -

SYBASE学习笔记

为Sybase Server的名称: UNIX:

11.0*: $SYBASE/install/errorlog

11.5* 或 11.9*: $SYBASE/install/.log 12.0*: $SYBASE_ASE/install/.log NT:

11.0* 11.5* 或 11.9*: $SYBASE\\install\\errorlog 12.0*: $SYBASE\\ASE-12_0\\install\\errorlog CASE 1:

basis_dlock: file '/sybase/master.dat' already in use by a SQL Server kernel kdconfig: unable to read primary master device kernel kiconfig: read of config block failed

检查server是否已经启动( showserver, ps -u sybase 或NT service ) CASE 2:

dopen: open '/sybase/master.dat' failed, permission denied kernel kdconfig: unable to read primary master device kernel kiconfig: read of config block failed

检查master设备文件的所有者及权限 CASE 3:

ninit: All master network listeners have failed. Shutting down

检查network ip 及 port配置 ( netstat -a ) CASE 4:

kernel:kscsinit: connectivity library error. Operation: cs_ctx_alloc(). 检查操作系统参数是否已经修改并重新启动操作系统 (参见安装手册)

若操作系统异常宕机,ASE未启动而$SYBASE/.krg已经存在, 删除该文件

日常数据库备份

http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_cj_00011.htm

SYBASE 数据库的备份主要是通过 dump 命令来实现的, 分为数据库备份和日志备份。 简单语法格式如下:

dump database database_name to device_name dump transaction database_name to device_name

如果使用磁带设备做备份, 还要使用capacity、int选项。

应该多长时间备份一次数据库呢? 这决定于发生系统故障时( 例如磁盘故障 ) 应用系统允许丢失多长时间的数据。 如果允许丢失一个小时的数据, 那么可以考虑每天至少备份一次数据库, 并每个小时至少备份一次日志。

备份数据库之前, 应对数据库做 dbcc 检查, 确保备份的数据库是完好的数据库。如果数据库有损坏, 备份时可能不会报错, 但将来可能无法装载(load)。

通常情况下, 只有发生严重故障需要恢复时才进行装载数据库, 但是 SYBASE 建议偶尔对备份的数据库装载到一个测试环境上, 以保证备份工作过程正常并熟悉备份和装载工

北京易初电子技术有限公司软件中心 2005-01

- 38 -

SYBASE学习笔记

作过程。

Master 数据库的备份也不能忽略。每次master 数据库的内容有变动时, 应及时备份 master 数据库, 例如增加 login, 增加设备, 增加用户数据库等。

用户可根据自己的应用制定可行的备份方案。 详细的命令语法及备份方案的详细建议均可在 SYBASE 手册中查到。

举例:Unix平台后备pubs2数据库 启动ASE和BACKUP SERVER isql -Usa -Pxxxxxx -SSYBASE

dump database pubs2 to \go

dump transaction pubs2 to \capacity=1500000,file=\with init(capacity取值为磁带容量的70%左右) go

如何恢复master数据库

http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_gj_00009.htm ASE can't setup and has no valid dump of master 1、编辑RUN_servername 在命令行最后加入:-T3607 2、单用户模式启动ASE $cd install

$startserver -f RUN_servername -m 3、bcp out系统表

$bcp master..sysdevices out /directory.spec/devs -Usa -P -c $bcp master..sysdatabases out /directory.spec/dbs -Usa -P -c $bcp master..sysusages out /directory.spec/usages -Usa -P -c $bcp master..syslogins out /directory.spec/logins -Usa -P -c

$bcp master..sysconfigures out /directory.spec/configures -Usa -P -c $bcp master..syscharsets out /directory.spec/charsets -Usa -P -c 4、shutdownASE

5、创建新master设备

$buildmaster -d -s (new_master_device_size以2K为单位) 6、编辑RUN_servername

将指定master设备指定为新创建的master设备,并删除在第1步中增加的参数。

7、删除/directory.spec/dbs、/directory.spec/usages文件中有关master、tempdb、model的内容。 8、单用户模式启动ASE $cd install

$startserver -f RUN_servername -m 9、 bcp in系统表

$ bcp master..sysdevices in /directory.spec/devs -Usa -P -b 1 -c $bcp master..sysdatabases in /directory.spec/dbs -Usa -P -b 1 -c $bcp master..sysusages in /directory.spec/usages -Usa -P -b 1 -c

北京易初电子技术有限公司软件中心 2005-01

- 39 -

SYBASE学习笔记

$bcp master..syslogins in /directory.spec/logins -Usa -P -b 1 -c

$bcp master..sysconfigures in /directory.spec/configures -Usa -P -b 1 -c $bcp master..syscharsets in /directory.spec/charsets -Usa -P -b 1 -c 10、重启ASE

11、执行installmaster脚本

$isql -Usa -P < $SYBASE/scripts/installmaster

如何做Rebuild Master

http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_gj_00005.htm (没有后备master库,而使用命令disk reinit,disk refit) 提示1:

如果有可能,在执行这个任务之前,请先做操作系统级SYBASE DEVICES的后备。UNIX操作系统可使用命令\。因为如果disk reinit使用了错误的信息,那么,在执行了disk refit之后就会产生无法弥补的错误。倘若,存在一个SYBASE DEVICES的后备文件,将会给我们一个弥补的机会。例如:当disk reinit 使用了过小的size值,我们还可以重新恢复SYBASE DEVICES文件,重新做disk reint、disk refit。 提示2:

在使用disk reinit命令时,将覆盖SYBASE DEVICE(请参照以下语法),安全的做法是size值使用裸分区或系统文件的大小的最大值。如果使用的是UNIX裸分区,即使你不能确认SYBASE DEVICE最初大小是不是最大值,都要使用裸分区大小的最大值。 步骤:

1. 获得将要被恢复的SYBASE DEVICE的信息。

? 这些信息被用来重建sysdevices,sysusages以及sysdatabases。

? 从error log的server启动信息中获得SYBASE DEVICE的设备名、指定路径。 ? 使用裸分区或系统文件的大小的最大值作为SYBASE DEVICE的大小。 ? 以上信息也可以通过最近的sysdevices系统表的内容来获得。如果对此信息怀有疑

问,还是使用以上的方法比较稳妥。

2. 做操作系统级的SYBASE DEVICE后备。UNIX操作系统,使用\命令实现。 3. 配置一个新的ASE Server。在以后的步骤中会用到这个新的master。 4. 如果需要,请再配置一个Backup Server。 5. 用单用户模式启动Server。

6. 运行disk reinit,用来重建sysdevices系统表,而没有重新初始化SYBASE DEVICE。

语法如下: disk reinit

name=\

physname=\vdevno=virtual_device_number, size=number_of_blocks

完成后,请查看error log。

7. 确认重建的sysdevices系统表中信息正确:

——select * from sysdevices

比较表中的信息是否与error log或者保留的sysdevices中的信息相同。

北京易初电子技术有限公司软件中心 2005-01

- 40 -

本文来源:https://www.bwwdw.com/article/lrj.html

Top