存档
在为数据库配置自动扩展时,提示需要增加参数:stack size的大小。
执行下面的SQL语句,使得用户数据库pmdb的default段的阈值为:1000m
sp_dbextend 'set','threshold',pmdb,'default','1000m'
go
但是返回下面的错误:
Msg 3626, Level 17, State 4:
Server 'syb1503', Procedure 'sp_exec_SQL', Line 49:
The transaction was aborted because it used too much stack space. Either use
sp_configure to increase the stack size, or break the query into smaller pieces.
spid: 27, suid: 1, hostname: LIUZHENFU, application name: isql
Msg 19206, Level 16, State 1:
Server 'syb1503', Procedure 'sp_exec_SQL', Line 53:
sp_dbxt_ins_db_seginfo: Execute immediate SQL failed. SQL statement is: insert
#syssegments(dbname, inserted_by, segment, name, status) select
'pmdb','sp_dbxt_set_extend_db', segment, name, status from pmdb.dbo.syssegments
(return status = 1)
那就按照提示做吧。 将stack size参数的大小配置为:130KB
sp_configure "stack size",130000
go
此参数:stack size是静态参数,需要重启ASE服务器。
ASE 15.7 新增了命令可以将数据库对象的所有权从一个所有者移交给另一个所有者。
比如将表customer的所有权从dbo移交给bill,使用命令: alter table dbo.customer modify owner bill
不仅仅限于表,还有其它数据库对象包括:视图、存储过程、用户定义函数、默认值、规则、自定义数据类型、加密密钥等;
一次性可以授予多个数据库对象:
1、将 bill 拥有的所有表的所有权都移交给 eric:
alter table bill.* modify owner eric preserve permissions
2、将 bill 拥有的所有对象的所有权都移交给 eric:
alter all bill.* modify owner eric preserve permissions
preserve permissions:针对这些对象的所有显式授予或撤消的权限都将被保留,并且权限的 grantor 将更改为新的所有者。-------------------------------------------------------------------------------------------------------------------------------------------------------
以下提供的方法适用于低于ASE 15.7的版本!
和SQL Server很相似,Sybase ASE数据库有一些未认证的DBCC命令。日常的维护过程中,需要一些Sybase认证的、公开的DBCC命令来完成,比如:检查数据库或者表的一致性、物理存储分配一致性、重建索引等等。对于这些公开的DBCC命令,Sybase公司是提供技术支持保障的。那些未公开的也就是未认证的DBCC命令,仅限Sybase内部工程师使用;Sybase公司不提供技术支持也不会对于此产生的问题负责。
所以,不要在生产环境上使用未认证的DBCC命令。在测试环境上研究学习使用倒是可以的。
需要记住的是:没人对这些未认证的DBCC产后的后果负责。
本篇介绍一个用来关闭或者重启某个用户数据库的未认证DBCC命令:dbcc dbreboot。顺便介绍一个修改对象所有者的方法。因为在ASE中对象的所有权是不能移交的,其它用户只有使用权。这点和中国土地权方面很类似吗?美国人信奉私有制,怎么设计出来这个数据库实现思路?呵呵,有点扯远了~~~
这边的测试环境是ASE15.0.3,我不确定从哪个ASE版本开始支持这个dbcc dbreboot命令的。
首先用isql连接到ASE15.0.3数据库,先打开在屏幕显示输出信息的选项,
dbcc traceon(3604)
go
先来查看一下dbcc dbreboot的用法:
例:有表
--sybase
create table t_test(
mydate datetime)
go
--oracle
create t_test(mydate date)
方法1:在sybase侧建立视图,然后从导出视图(此方法舍弃了毫秒部分)
create view v_test as
select
convert(varchar(10),pst_exec_stime,111)+' '+convert(varchar(9),pst_exec_stime,8) mydate
from t_test
go
12 月11日,在Prometric的一个考试中心参加了Sybase Certified Adaptive Server Administrator Associate (Version 15.0),Exam Code:510-025这门考试,通过了!下一步继续参加Sybase Certified Adaptive Server Administrator Professional这个。Professional这门考试有关于datastorage internals的内容,好在我以前研究过ASE的内部物理数据存储,并且我还自己编写一个工具来实现从sybase ASE的设备文件中提取数据。请参见:简单介绍一下我自己编写的Sybase恢复工具
加油,争取明年上半年拿到ASE administrator Professional。 呵呵!
ASE有个可选数据库:sybsyntax,此数据库是帮助信息数据库,数据库不大。安装完该数据库sybsyntax后,可以在isql或其它客户端工具上在线查看T-SQL以及命令、dbcc等命令的语法。
如:
1> sp_syntax "update statistics"
2> go
Syntax Help
------------------------------------------------------------------------------
Transact-SQLupdate statistics table_name
[ [index_name] | [( column_list ) ] ]
[using step values]
[with consumers = consumers ]
update index statistics table_name [index_name]
[using step values]
[with consumers = consumers ](return status = 0)
安装步骤如下:
第一步:为数据库sybsyntax初始化设备:sybsyntaxdev
该数据库不大,并且以后几乎为”只读“数据库,除非你自己往里面添加帮助信息
linux x86 平台上的 ASE15.5 的 dat文件,拷贝到windows x86 平台上的ASE15.5中,是可以使用的。
只需要简单的修改master.dat中的device路径即可。 通过更改sysdevices的phyname来实现。
将sysdatabases系统表中status - 64
之后, 利用dbcc checkdb,dbcc checkalloc,dbcc checkcatalog 检查各个数据库。 没有错误。
说明: linux平台和windows平台的dat文件是通用的。 迁移时只拷贝数据库设备文件就能完成。
因为linux x86/x64以及windows都是小字节序(little endian)的,理论上linux x86及windows平台上的设备文件是可以通用的。
上面说的方法建议通过Sybase官方的做法:
quiesce database
mount database
目前在ASE 15中支持简体中文字符的字符集有四种:CP936,EUCGB,UTF-8和GB18030。
其中EUCGB字符集是基于GB2312-80编码规范的,它的EUC (Extended Unix Code)编码范围是第一字节0xA1~0xFE(实际只用到0xF7),第二字节0xA1~0xFE。
CP936字符集是基于GBK编码规范(实际上的国家标准是GB13000-90),是对GB2312进行的扩展,第一字节为0x81~0xFE,第二字节分两部分,一是0x40~0x7E,二是0x80~0xFE。其中和GB2312相 同的区域,字完全相同。
GB18030字符集(国家标准号是GB18030-2000)是2000年3月17日发布的新的中文编码标准。它是GB2312的扩充,采用单/双 /四字节编码体系结构,收录了27000多个汉字以及臧文、蒙文、维吾尔文等主要的少数民族文字。Sybase 从ASE 12.5.0.3之后开始支持 GB18030字符集。
UTF-8字符集是现有ASCII系统向Unicode转换的一个过渡方案。它使用1-3字节表示一个字符。简体中文的每个字符在utf8中的长度基本上都是3个字节。它的最主要的优点是可以同时支持超过650种语言的字符。缺点是针对中文字符来说,需要增加50%的空间用来存储。还有一个问题是执行sp_helptext显示存储过程体的时候,有可能出现半个汉字。
一般来说,由于 EUCGB不支持国标一、二级字库以外的汉字,所以我们推荐用户在服务器端和客户端都使用CP936字符集,或者在ASE 12.5.0.3之后还可以使用GB18030字符集,它可以支持一些比较生僻的汉字。它的不足是只有一种排序方式,即区分大小写的Binary方式。所以,如果需要使用支持中文字符集且不区分大小写的数据库时,就只能使用UTF-8作为服务器端字符集,而客户端使用CP936或GB18030字符集。
eucgb、cp836、gb18030仅支持区分大小写的排序顺序,utf-8支持不区分大小写的排序。
迁移ASE数据库的表结构时,需要注意表DDL的顺序,否则有些对象会因为其所引用的对象不存在而导致创建不成功。
解决的方法:将同样的脚本执行两次。
据我所知,sybase central或者ddlgen导出的语法中是没有很好的处理好对象之间的引用先后顺序的,所以,很有可能你的脚本需要执行两次才能保证所有的对象都成功创建上。
下面举个简单的例子,两张表,一张外键引用另一张。
sybase ASE中要求被外键引用的表的被引用列上有唯一约束。
在移植对象DDL的时候,举个例子:表A外键引用表B,如果导出的DLL语句中表A的定义语句在前面,而表B的DDL在后面。那么在创建表A的时候会因为外键引用的表B不存在而导致表A创建不成功。表B是能够成功创建的。
第二次执行上面相同的脚本时,首先会成功创建表A,因为其所引用的表B已经创建上了。而表B不会再次创建因为上次执行的时候已建上,会给出一个错误信息。这在isql是个错误信息,可能在sybase central中会是一个让人讨厌的弹出窗口。