SYBASE 12.5 维护手册 4. 提高篇

4. 提高篇

  如果忘记了sa的密码,如何恢复.
1,首先停掉sybase  ase服务.
2,在sybase 安记目录%%\sybase\ASE-12_5\install\下, 修改RUN_SYBASE数据库server启动脚本,在启动命令最后加上 -psa保存退出
3,用这个批处理启动sybase 服务,在dos窗口中得到一个新的sa密码.
4,用这个密码登陆sybase,然后修改sa密码.
5,将启动脚本中加的 –psa去掉,然后重启动服务,用新改的sa密码登陆就可以了.

4.1 为什么数据库事务日志满了,使用dump tran with no_log仍不能截断日志?
有两种情况,可能出现这个问题。一是应用系统给ASE发送了一个用户自定义事务,一直未提交,这个最早活跃事务阻碍系统截断日志。二是客户端向ASE发送了一个修改数量大的事务,清日志时,该事务还正在执行之中,此事务所涉及的日志只能等到事务结束后,才能被截掉。
对于第一种情况,只要督促用户退出应用或者提交事务,系统管理员便可清掉日志。因为给AS E发送Dump transaction with no-log或者with truncate-only,它截掉事务日志的非活跃部分。所谓非活跃部分是指服务器检查点之间的所有已提交或回退的事务。而从最早的未提交的事务到最近的日志记录之间的事务日志记录被称为活跃的。从此可以看明,打开的事务能致使日志上涨,因为在最早活跃事务之后的日志不能被截除。
对于第二种情况,道理也同上。只是在处理它时,需慎重从事。如果这个大事务已运行较长时间,应尽量想法扩大数据库日志空间,保证该事务正常结束。若该事务被强行回滚,ASE需要做大量的处理工作,往往是正向执行时间的几倍,系统恢复时间长,可能会影响正常使用的时间。
4.2 如何后备数据量大于2GB的数据库
当在后备数据量大于2GB的数据库时,可能会遇到以下错误:
o I/Oerror:
o operating system error,server device /backup/data. code 27 messages
o file too large.

这是由于后备文件的大小超出了操作系统的用户最大文件限制。而有些操作系统不支持大于2GB的文件,这时可以使用Backup Server将一个数据库后备到多个文件中。
? dump database pubs2 to "/usr/sybase/pubs2_dump.1"
? stripe on "/usr/sybase/pubs2_dump.2"
? stripe on "/usr/sybase/pubs2_dump.3"
? go
?
  这种方法还可以提高后备及恢复的速度,但注意恢复也必须用相应多的设备。例如:
  1>load database pubs2 from "/usr/sybase/pubs2_dump.1"
  2>stripe on "/usr/sybase/pubs2_dump.2"
3>stripe on "/usr/sybase/pubs2_dump.3"
4>go
4.3 如何更改ASE名称(在UNIX、OPENVMS平台上)
在SYBASE产品中没有特定的函数或者存储过程用来更改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文件
? 更改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使用的,还需要删除并重新添加。
4.4  如何在HP平台BCP OUT超过2G的数据
运行环境:
HP UNIX11,
SYBASE ASE12.0.02 SWR 9310
SYBASE OPEN CLIENT 11.1.1 EBF8633
SYBASE OPEN CLIENT 12.0

问题描述:
SYBASE数据库中一个表BCP OUT时,输出文件大小到达2G时出错,不能完成对此表的备份。具体现象表现为两天对同一张大表BCP OUT输出文件的字节数相同,没有完成所有表的BCP OUT。

问题分析与解决办法:
SYBASE OPEN CLIENT 11.1.1 EBF8960之前的版本不支持HP平台上的超过2G的BCP(OUT, IN)。OPEN CLIENT11.1.1 EBF8960 之后的版本,可以通过“管道”的方式支持文件大小在2G以上的BCP(OUT, IN)。
方法如以下所示:
/usr/sbin/fsadm -F vxfs -o largefiles /dev/...  //使文件系统支持大于2G的文件
/usr/sbin/mount -F vxfs -o largefiles /dev/...

mkfifo bcppipe      // 建立一个管道
bcp tempdb..large_table out bcppipe -Usa -P -c & // 后台运行 BCP OUT
cat bcppipe > bcp.out     // 把 BCP OUT 输出从定向到可支持大
       // 文件的文件系统

实施步骤:
1. 使文件系统支持大于2G的文件。
2. 由于现行BCP 备份程序有8个进程同时进行BCP OUT,所以需要建立8个管道 bcppipe0 – bcppipe7,保证在每一个进程中,可以向独立的管道串行的写入。
3. 为了不影响到原有的其它OPEN CLIENT应用,决定不升级当前的 OPEN CLIENT 11.1.1, 而是用OPEN CLIENT 12.0
4. 修改原调用BCP OUT进行批处理的 C 程序,使其使用OPEN CLIENT 12。BCP OUT的输出先写入管道,在由管道重定向至文件。

结果与结论:
1. 经过修改的程序可以正确的BCP OUT出大于2G的文件。
2. 由于采用管道方式做BCP OUT,性能略有下降。
3. 需要注意,BCP IN 超过2G的大文件,也需要使用管道的方式。所以调用BCP IN 的C 程序也需要修改。
4.5 如何将ASE SERVER移植到同种平台(相同操作系统)的系统上
  提示:
? N1 这里所列出的所有步骤,并不需要按顺序执行,只是表明了在实验中成功完成这项任务的顺序。
? N2 SYBASE 提示您保留直至今日的ISQL脚本,包括建立login、create database、disk init等等。使用这些脚本会使您完成这项任务更加容易。这些脚本也可以通过master中系统表的内容来重新生成,可能会繁琐一些。
? N3 成功的关键在于目标系统中系统表的字段与源系统中相应系统表的字段相同。特别是:syslogins与sysdatabases中的'suid 以及 'dbid';sysusages中所有行的segmap、lstart以及size。
  请在数据源系统上执行以下操作:
? 对所有的数据库进行数据一致性检查(DBCC),并后备所有的用户数据库。
? 保留master 数据库中数据表的内容,使用select * from table_name命令:
? sysdevices,sysusages,sysdatabses
? syslogins,sysservers,syssvrroles,sysloginroles,sysremotelogins
对于sysusages 表,请使用以下命令:
select * from sysusages order by dbid,lstart
对于sysdatabases 表,请使用以下命令:
select * from sysdatabases order by dbid
? 使用bcp命令拷贝(2)中所列出的系统表内容。
Unix:bcp master..table_name out file_name -Usa -Psa_password -c
Vms:bcp master..table_name out file_name /username="sa"/sa_password/char
? 保留sp_configure命令的执行结果
  请在目标系统上执行以下操作:
? 安装并配置新的ASE和Backup Server。
确认所指定的master、tempdb、sybsystemprocs大小至少等于数据源系统上相应数据库的大小,同时确认与数据源系统相同的语言模块以及字符集。
? 启动ASE,使之处于正常工作状态。参照数据源系统的配置(4中保留的执行结果)修改目标系统配置与之相同,并确认'device'参数值至少等于源系统此参数值。
? 在model、sybsystemprocs数据库中任意执行几个动作以判断数据库工作正常。请不要添加用户、角色、修改系统表。
? 重启ASE以测试新配置有效。
? 执行以下操作:
1> use master
2> go
1> sp_configure "allow updates",1
2> go
重启ASE。
? 使用bcp命令拷贝(2)中所列出的系统表内容。
Unix:bcp master..table_name in file_name -Usa -Psa_password -b 1 -c
Vms:bcp master..table_name in file_name /user="sa"/sa_password/char/batch=1
? 建数据库设备,大小至少等于源系统中相应数据库的大小。
? 运行create database和alter database的脚本(或者使用命令行)。注意create、alter顺序要与源系统create、alter顺序一致,并使用与之相同的参数。完成后请对比源系统与目标系统中的sysdatabases、sysusages,使之完全相同,否则要重新做12这步工作。(请参照N3提示)注意:
? 在10.0以及更高版本中segmap字段在做了数据库load之后会被修改。
? 在确定需要相同的dbid时,则要采用与在源系统中create、alter相同的顺序,在目标系统中做create、alter,并且使用相同的参数值。而这种需求仅仅是当数据库中某些objects要参考不同的数据库中的objects才会采用的。另外,这种需求只有在每一个数据库中都被采用,完成的结果才会使得sysusages表中的segment、lastart、size字段,或者是fragment与源系统中数值相同。运行以下命令,与原系统的输出进行比较:
select * from sysusages order by lstart
? load用户数据库并执行dbcc检测。
? 执行以下操作:
1> sp_configure "allow updates",0
2> go
重启ASE。
后备master库以及用户数据库。
4.6 如何扩展master数据库空间
  master数据库只能扩展在master设备上.那么当master设备已经没有足够的空间可使用时,请按以下步骤操作:
(此操作过程是以UNIX操作系统为例.SYBASE安装路径为/sybase)
  1.备份master数据库
   启动backup server,进入isql环境执行:
    1>dump database master to '/sybase/master.dump'
    2>go
   shutdown SQL/ASE Server
    1>shutdown
    2>go
  2.创建新的足够大的master设备
   $buildmaster -d<master_device> -ssize(size以2K为单位)
   例:$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
4.7 Invalid tdslength value

Error such as:
00:00000:00000:2001/03/22 16:10:07.80 kernel  ksmask__rpacket: Invalid tdslength value 21536, kpid: 1310740
00:00000:00000:2001/03/22 16:10:20.87 kernel  ksmask__rpacket: Invalid tdslength value 21536, kpid: 1376277
00:00000:00000:2001/03/22 16:10:51.27 kernel  ksmask__rpacket: Invalid tdslength value 21536, kpid: 1441814
00:00000:00000:2001/03/22 16:15:38.22 kernel  ksmask__rpacket: Invalid tdslength value 21536, kpid: 1507351
It can be a heavy network traffic. Indicated that this message is an informational message that comes from the network.  Possible causes may be:  the size of the packet that the server has received is different to the size that was sent by the client, ksmask__rpacket: The SQL Server does not validate the size of incoming TDS network packets.  Bad incoming data may cause waiting processes to hang as the server waits for a very large amount of data on a network socket. When a corrupt TDS packet has been received, due to tcpip sending begining of another TDS packet before finishes sending the current TDS packet, the  server terminates the process and outputs the above message. Kernel error "ksmask__rpacket: Invalid tdslength" indicates that tcp/ip has sent a corrupt TDS packet to sqlsvr.
Troubleshooting the error:
-max network packet size
-additional network memory
-any changes made to network recently

 
Increasing the network memory could be a solution. I can think of a situation where there is no memory left so the server is unable to store the new packets. This could lead to invalid tdslength. There are some  cases where increasing network packet size and the additional network memory solved the problem.
In other cases, no further action was required as the message did not re-appear.
You can use sp_configure to increase the max network packet size and additional network memory, and also check if there's any issue with the network.
max network packet size:取决于应用中需要发送的数据包的大小。
additional network memory= max network packet size+ max network packet size*0.02
(并且使此数值为2048的倍数。)
4.8 如何将master设备从UNIX的文件系统移到裸分区

1. Turn off asynch io
1> sp_configure "allow sql server async i/o", 0
2> go
You will need to reboot your server for this to take affect.
2. Mirror the master device to the new raw partition.
1> disk mirror name = "master",
2> mirror = "absolute path to new master raw partition"
3> go
2. Unmirror master (this will permanantly break the mirror to the master
device (If you want to expirement, you can set mode = retain and remirror
a few times. See Reference Manual for syntax).
1> disk unmirror name = "master",
2> side = "primary",
3> mode = remove
4> go
3. Shut down your SQL Server. In your run server file, there is a "-d"
flag that has the path to your old master device. Change this to the path
for the new master device.
4. Restart your server and turn on asynch io.
1> sp_configure "allow sql server async i/o", 1
2> go
5. Shutdown and restart your server one more time to enable the
asynch io. Verify that your server is using asynch io by looking at the
start up sequence in the errorlog.

NOTE: It is best to perform this task with the server in single user mode.
You can do this while you recycle your server to disable asynch io in step 1
above by adding a "-m" to your run server file. Be sure to remove the flag
when you are finished.
4.9 如何生成bcp命令文件(以pubs2为例)
  本文适应于isql 11.*, 可通过isql -v得到版本
? 编辑一个文本文件select.sql,内容如下:
            set nocount on
            use pubs2
            go
            select "bcp pubs2.." + name + " out " + name + ".bcp -Usa -P -c "
            from sysobjects where type="U"
            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的命令文件
4.10 如何动手修改interfaces文件
 
在一些HP和SUN的机器上,interfaces文件中关于SERVER的信息是以16进制的形式存储的,必须要通过实用程序dscp才能进行修改。
 
实际上,我们只要了解了这些16进制数据的格式,也可以直接通过vi来更改interfaces文件。
 
下面以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
 
可以修改的信息其实主要就是主机地址和端口号,所以,如果需要,只要按照以上格式修改其中信息即可。
4.11 关于tempdb的优化
缺省情况下,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
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”
说明:在同一个存储过程或批处理中,创建并使用一个表时,查询优化器无法决定这个表的大小。
4.12 ASE12.5.x的一条有用的命令: disk resize
syntax:
 
disk resize
name='device_name',
size=additional_space
 
After using this command,you could alter database on the device that you just resize
to add dev additional_space .Then we need not use command of 'disk init'.

4.13 如何更改字符集为cp936
(这里SYBASE的安装路径为c:\sybase)
1.c:\>cd \sybase\charsets\cp936
2.c:\sybase\charsets\cp936> charset -Usa -Psa_pass -Sserver_name binary.srt cp936
3.在SQL环境中
1>select name,id from syscharsets
2>go
找到name为cp936对应的id(假设为117)
4.1>sp_configure "default character set id",117
2>go
5.重启server两次
(注:第一次启动后,server会自动宕掉,需要第二次重启后才能使用)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sybase参考手册史上最完全版,共四本,这是第二本 《命令》 《Adaptive Server 参考手册》包含有关 Sybase® Adaptive Server® Enterprise 和 Transact-SQL® 语言的四本指南: • 《构件块》介绍了 Transact-SQL 的各个部件:数据类型、内置函 数、全局变量、表达式、标识符、保留字和 SQLSTATE 错误。 要想成功使用 Transact-SQL,您首先必须了解这些构件块的功 能,以及它们对 Transact-SQL 语句执行结果的影响。 • 《命令》提供了有关用于创建语句的各种 Transact-SQL 命令的 参考信息。 • 《过程》提供了有关系统过程、目录存储过程、扩展存储过程和 dbcc 存储过程的参考信息。所有过程都是使用 Transact-SQL 语 句创建的。 • 《表》提供了有关系统表的参考信息。系统表用于存储有关服务 器、数据库和用户的信息,以及服务器的其它详细信息。它还 提供有关 dbccdb 和 dbccalt 数据库中的表的信息。 约定以下各部分将说明在这些参考手册指南中使用的约定。 SQL 是一种形式自由的语言。没有规定每一行中的单词数量或者必 须换行的地方。然而,为便于阅读,本手册中所有示例和大多数语 法语句都经过了格式设置,以便语句的每个子句都在一个新行上开 始。有多个成分的子句会扩展到其它行,这些行会有缩进。复杂命 令使用已修改的 Backus Naur Form (BNF) 表示法进行了格式处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值