存档

2009年12月 的存档,文章数:14

前些天,培训的sybase工程师留下了试用版的powerdesigner12.5,现在适用期限到了。在网上找到两种破解方法。

第一种用破解文件:

1.安装软件后,解压破解压缩包,将pdflm12.dll复制到PD 安装目录下。

2打开PowerDesigner,菜单Tools -> License Parameters..

3.选择Standalone Seat - Local License

4导入license.lic即可破解。

详细请参考:

http://blog.csdn.net/gangqinjiawang/archive/2009/07/15/4349093.aspx

第二种修改dll文件(一个很牛的方法):

在PowerDesigner安装目录下,找到pdflm12.dll,用记事本或其它编辑工具打开,显示的应该是一些二进制的内容.找到83 C4 14 8B 85 E4 FE FF FF,把这一段改成:83 C4 14 33 C0 90 90 90 90.重新打开PowerDesigner,会发现已可以正式使用.PS:本人的是版本12,测试可行,其它版本没有测试过.不知道是否可行.

我在12.5版本上测试能够使用。但是,感觉启动PD的时间很长。不知道这是否和破解有关。还有一网友说用了一段时间就不能用了。不知道自己是否能遇到该问题?

这是一个用unix命令来模拟一个在酒吧勾搭美妹的过程。

--------------------------------------------------------------------------------
By Wing, 出处:bbs.mit.edu

find
talk
whoami
whatis
uname
quota
set
mv
whereis
unzip
strip
touch
finger
top
mount
compress
!!
more
yes
jobs
umount
sleep

...

StartX

unix这小子有点黄。

今天下午在shutdown数据库服务器的时候,只有两个isql连接。在其中一个isql连接上发命令 shutdown后然后退出了另一个会话。

一直报SHUTDOWN is waiting for 5 process(es) to complete.的错误,一直一直写。我看了一下。所有的系统进程都处于sleep状态,包括发shutdown命令的进程。在errorlog中没有任何信息。通过sp_who查看到进程里面有DEADLOCK TUNE,HOUSEHOLDER,JOB SCHEDULER等;发送shutdown命令的进程好像在执行checkpoint。不知道为什么?

最后通过另一个session中强制关闭数据库才算完事。shutdown with nowait. 感觉很奇怪!

ASE版本15.0.3/esd#1,网上说好像有一个是:562998 - NT storage access violation in omni_closetable destroyRemoteAccess

我的确遇到了这个bug在使用mon表的时候!

感觉sybase升级到了15.0版本了怎么系统还不是很稳定?

————————————————————————————————————
——— 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
——— 转载务必注明原始出处 : http://www.dbainfo.net
——— 关键字: ASE 15.0.3 shutdown 升级 补丁
————————————————————————————————————

已在solaris10,ASE12.5.2下用资源文件resource_files新建了一个4k的sybase服务器。测试该方法通过!
不过在windows下没有这个命令srvbuildres,相类似的命令工具为sybatch,况且windows下还要配置注册表信息才能启动服务除非你想每次都通过RUN_servername来启动!

本指南实际为本人两篇文章的合集,分为安装和迁移两大部分

第一部分:在无GUI环境下安装sybase for linux 12.5.0.1

通常我们建立sybase for linux数据库服务器的时候,都是执行asecfg来建立数据
库,但是这种方式是需要在
服务器上安装X的,即使是通过X FORWARD的方式来操作,也至少需要安装上X
lib。在许多时候下,我们都希望
在服务器上安装的软件包越精越好,即只需要在console环境下就能建立好我们所
需要的服务器。
sybase for linux 就提供了这样一套无需任何X软件包的数据库建立工具---
srvbuildres,它通过读取资源文件
来完成基于console的数据库建立工作。

一 安装rpm包
rpm -ivh --nodeps <rpm包名>

二 激活sybase帐号
passwd sybase

三 设置内核参数
echo $( expr <你的内存容量(以MB为单位)> \* 1024 \* 1024 ) >
/proc/sys/kernel/shmmax
echo "kernel.shmmax = "$( expr <你的内存容量(以MB为单位)> \* 1024 \*
1024 ) >> /etc/sysctl.conf
echo "本机ip hostname" >> /etc/hosts

四 创建数据库服务器和备份服务器
以sybase帐号登录
cp ~/ASE/init/sample_resource_files/srvbuild.adaptive_server.rs ~/server.rs
cp ~/ASE/init/sample_resource_files/srvbuild.backup_server.rs ~/backup.rs
编辑 server.rs

sybinit.release_directory: USE_DEFAULT
sybinit.product: sqlsrv
sqlsrv.server_name: kbibm_ase <--- 填入你所准备起的数据库服务器名称, 这里是我的数据库服务器名字
sqlsrv.new_config: yes
sqlsrv.do_add_server: yes
sqlsrv.network_protocol_list: TCP
sqlsrv.network_hostname_list: <--- 填入数据库服务器所在主机的主机名
sqlsrv.network_port_list: <---端口号
sqlsrv.server_page_size: USE_DEFAULT
sqlsrv.force_buildmaster: no
sqlsrv.master_device_physical_name: /opt/sybase-12.5/data/master.dat
<--- 设定master文件所在位置
sqlsrv.master_device_size: 100 <--- size以MB为单位,这里建立100MB大小的
设备文件。
sqlsrv.master_database_size: 90 〈--- master_database 的size 至少要小于
master_device 7MB,所以这里填90MB
sqlsrv.errorlog: USE_DEFAULT
sqlsrv.do_upgrade: no
sqlsrv.sybsystemprocs_device_physical_name:
/opt/sybase-12.5/data/systemprocs.dat
sqlsrv.sybsystemprocs_device_size: 200 <--- 建立200MB大小的systemprocs设
备文件
sqlsrv.sybsystemprocs_database_size: 200
sqlsrv.sybsystemdb_device_physical_name:
/opt/sybase-12.5/data/sybsystemdb.dat
sqlsrv.sybsystemdb_device_size: 200 <--- 建立200MB大小的sybsystempdb设备文件
sqlsrv.sybsystemdb_database_size: 200
sqlsrv.default_backup_server: kbibm_bak <--- 填入你所准备建立的备份数据库名

备份服务器的rs文件也按此方式进行修改

五 执行srvbuildres来建立数据库
$SYBASE/ASE/bin/srvbuildres -s $SYBASE -r <rs文件>

六 建立sqlloc.rs来设置本地化
sybinit.release_directory: USE_DEFAULT
sqlsrv.server_name: kbibm_ase
sqlsrv.sa_login: sa
sqlsrv.sa_password: serverj
sqlsrv.default_language: us_english
sqlsrv.language_install_list: us_english
sqlsrv.language_remove_list: USE_DEFAULT
sqlsrv.default_characterset: cp850
sqlsrv.characterset_install_list: cp850
sqlsrv.characterset_remove_list: USE_DEFAULT
sqlsrv.sort_order: binary

执行$SYBASE/ASE/bin/sqlloc sqlloc.rs 设置locale

七 由于/etc/init.d/sybase中有两处存在bug,所以我们要修改它
将SYBASE_ASE=`basename $SYBASE/ASE*` 改为 SYBASE_ASE=`basename $SYBASE/ASE`
将SYBASE_OCS=`basename $SYBASE/OCS*` 改为 SYBASE_OCS=`basename $SYBASE/OCS`
否则将不能正常启动sybase

八 /etc/init.d/sybase restart

现在我们就可以用 isql -U sa -P -S <数据库服务器名> 登录进去了。

以上步骤在redhat 7.3 上操作通过。

SYBASE ASE12.5以上版本升级到ASE15的第三种办法

    SYBASE公司的产品Adapter Server目前最新的版本是ASE15.0.2,如何将原有的ASE12.5上的数据库升级到ASE15上?以前常用的方法有如下两种:
    1.upgrade
    2.dump/load
以上两种办法的具体实现方式可参考相关资料,ASE15目前提供了第三种升级的办法,主要是将数据库设备文件使用操作系统命令直接拷贝到升级的新平台。这种办法应该是速度最快的一种,而且Adapter Server的down机时间最短。但前提条件是源和目标均为同种操作系统平台,源和目标server页大小、语言和字符集均要相同,其中源必须是ASE12.5以上的版本。本文具体介绍第三种升级的办法。

假设源Adapter Server名为ase125, 目标Adapter Server名为ase15。可以分别在不同机器上 ,也可以在同一台机器上。
具体升级实现步骤如下:
1.在源Adapter Server上查找数据库所在的设备情况,记住设备逻辑名和所在物理位置。
H:\>isql -Usa -P -Sase125 -w2000
1> sp_helpdb testdb
2> go
1> sp_helpdevice dev1
2> go
1> sp_helpdevice log1
2> go
……
dev1  /data/dev1.dat
log1  /data/log1.dat
……
2.在源Adapter Server上静默数据库,产生一个清单。静默后的数据库就只能提供查询不能增/改/删了
H:\>isql -Usa -P -Sase125 -w2000
1>quiesce database for_upgrd hold testdb for external dump
2>to “/data/testdb_manifest.mfst” with override
3>go

3.将三个文件(/data/dev1.dat、/data/log1.dat、/data/testdb_manifest.mfst)用操作系统命令拷到目标机器(如拷入“/opt/”下)。如果源和目标在同一台机器上,该步不用。

4.现在在源Adapter Server上可以取消静默或直接删除源Adapter Server了。如果源和目标在同一台NT机器上的话,在保留三个文件的基础上可卸载ASE125后,再安装新的ASE15
H:\>isql -Usa -P -Sase125 -w2000
1>quiesce database for_upgrd release
2>go

5.以后的操作都在目标server上,先登记清单,后映射设备,注意设备逻辑名必须与源server一致,物理路径可不同。
H:\>isql -Usa -P -Sase15 -w2000
1>mount database all from “/opt/ testdb_manifest.mfst” with listonly
2>go
1>mount database all from “/opt/ testdb_manifest.mfst” using
2>“/opt/dev1.dat” = “dev1” ,
3>“/opt/log1.dat” =“log1”
4>go
1>use testdb
2>go

6.至此我们就完成了将ASE12.5升级到ASE15的工作。在系统空闲时还可以进行一些后续工作,如:重建索引、更新统计值、dbcc检查等。

这种办法除了可用于升级,还可用于单个数据库在相同操作系统平台下的不同Adapter Server之间迁移。

一个sybase工程师提供的方法!

本文介绍我遇到的将tempdb从master设备上移走时出现的逻辑页面读取错误问题的解决方法。

sybase版本为:Adaptive Server Enterprise/15.0.3/EBF 16550 ESD#1/P/NT (IX86)/Windows 2003/ase1        503/2680/32-bit/OPT/Thu Mar 05 00:21:40 2009

开始时tempdb在master和tempdbdev两个设备上都放置数据和日志,如下:

1> select *from  sysusages
2> where dbid =2
3> go
 dbid   segmap      lstart      size        vstart      pad    unreservedpgs
         crdate                     vdevno
 ------ ----------- ----------- ----------- ----------- ------ -------------
         -------------------------- -----------
      2           7           0        1536       16388   NULL           694
                Dec  2 2009  6:58PM           0
      2           7        1536       25600           0   NULL         25500
                Dec  2 2009  7:01PM           2

由上可见,ASE15版本中默认给临时数据库在tempdbdev设备分配了100m的空间,比起12版本中默认的3M大多了!

为了减少存取系统表时对I/O资源的争夺,将tempdb从master设备上分离出来。

从网上可以找到方法:

sp_dropsegment "default",tempdb,master

sp_dropsegment "system",tempdb,master

sp_dopsegment "logsegment",tempdb,master

我使用的方法是直接删除sysusages表中临时数据库使用的空间分配信息。

1> begin tran
2> go
1> delete from sysusages
2> where dbid = 2 and size =1536
3> go
(1 row affected)
1> select * from sysusages
2> where dbid =2
3> go
 dbid   segmap      lstart      size        vstart      pad    unreservedpgs
         crdate                     vdevno
 ------ ----------- ----------- ----------- ----------- ------ -------------
         -------------------------- -----------
      2           7        1536       25600           0   NULL         25500
                Dec  2 2009  7:01PM           2

(1 row affected)
1> update sysusages
2> set lstart=0
3> where dbid = 2
4> go
(1 row affected)
1> select * from sysusages
2> go
 dbid   segmap      lstart      size        vstart      pad    unreservedpgs
         crdate                     vdevno
 ------ ----------- ----------- ----------- ----------- ------ -------------
         -------------------------- -----------
      1           7           0        6656           4   NULL          4200
                Dec  2 2009  6:58PM           0
      3           7           0        1536       13316   NULL           694
                Dec  2 2009  6:58PM           0
  31513           7           0        1536       19460   NULL           654
                Dec  2 2009  6:58PM           0
  31514           7           0       35840           0   NULL         12240
                Dec  2 2009  6:59PM           1
      2           7           0       25600           0   NULL         25500
                Dec  2 2009  7:01PM           2
  31513           7        1536        1536           0   NULL          1530
                Dec  2 2009  7:01PM           3
  31515           7           0       19200           0   NULL         14410
                Dec  2 2009  7:03PM           4
      4           3           0       76800           0   NULL         75656
                Dec  7 2009  2:28PM           5
      4           4       76800       25600           0   NULL         25500
                Dec  7 2009  2:28PM           6

(9 rows affected)

1> select * into tempdb.dbo.#lzf
2> from sysobjects
3> go
Msg 2762, Level 16, State 3:
Server 'TEST', Line 1:
The 'CREATE TABLE' command is not allowed within a multi-statement transaction
in the 'tempdb' database.
1> commit    (此时已经提交了事务,对sysusages的修改生效!)