sybase 基本操作
数据库技巧 2010-08-10 18:13:49 阅读750 评论0 字号:大中小 订阅
1. 用sybase身份安装:CD20045-55-1252-01.tgz
建立sybase,家目录在/opt/sybase,加密码。解压到/tmp/inst/。修改/etc/hosts:ip tank
扩大共享内存参数,在/etc/sysctl.conf里配置,如:kernel.shmmax = 335544320 ,然后执行sysctl -p命令使之生效。
2.用sybase登录,启动xwindow,运行/tmp/inst/setup进行图形安装。
或者,用sybase登陆,执行/tmp/inst/setup -console进行文本界面安装。
安装过程中如果无法建立库,则设置:export LD_POINTER_GUARD=0 后再建库。
3。查看SYBASE服务命令:
$showserver
4. 停止sybase服务:
$isql -Usa -STANK
>shutdown SYB_BACKUP --->停backupserver
>go
>shutdown ------->停dataserver
>go
>quit
5. 启动sybase服务:
$cd ~ASE_125/install/
$startserver -f RUN_TANK
$startserver -f RUN_TANK_BS
$showserver
安装 FOR WIN
类似一般程序安装;在WIN服务管理里设置启动。
win下的SYBASE客户端sql advantage和dsedit等无法启动(本机LAN原因)解决方法:
修改本机 X:/sybase/locales/locales文件里NT选项的locale = zh_CN, us_english, iso_1,加入本机LAN即可(如zh_CN)
常用操作:
1.su - sybase -c "isql -Usa -STANK"
2.修改SA的密码 (SA默认密码为空):
用ISQL连接上后
sp_password null,"新密码" or sp_password "旧密码","新密码"
3.开始和确认事务(注意:有些命令不可以在事务里运行,见附录)
begin transaction和commit transaction可将任意数目的SQL语句封装起来,这两名的简单语法为:
begin transaction
commit transaction
or
begin tran
commit
ps:只有执行了commit数据才是真正写入库里。
4. 回退事务
在commit transaction命令提交前任何时候可取消或回退事务,该命令的简单语法为:
rollback transaction
or
rollback
5.检查事务状态
全局变量@@transtate记录了事务当前的状态。在执行一个语句后SQL Server通过记录所有事务变化来确定返回何种状态。
@@transtate可包含下列值:
值 意义
0事务进行中:一个显式或隐式事务有效;上一语句执行成功
1事务完成:事务完成并提交其变化
2语句异常中止:上一语句异常终止;对事务无影响
3事务异常中止:事务异常中止并回退所有变化
举例:在事务中,可在一个语句(如insert)后使用@@transtate确定该语句成功或失败对事务的影响。commit transaction
Begin transaction
Insert into publishers(pub_id)values(‘9999’)
(1 row affected)
select @@transtate
…………………
commit transaction
select @@transtate
…………………
(1 row affected)
6.备份系统数据
SYBASE 系统的备份与恢复机制保证了在系统失败时重新获取数据的可能性。SQL Server 提供了两种不同类型的恢复机制:一类是系统自动完成的恢复,这种措施在每次系统启动时都自动进行,保证了在系统瘫痪前完成的事务都写到数据库设备上,而未完成的事务都被回退;另一类是人工完成的恢复,这是通过 DUMP 和 LOAD 命令来执行人工备份和恢复工作。因此定期备份事务日志和数据库是一项十分重要的日常维护工作。
7、备份数据库
每一个数据库都应在创建之后卸出,从而提供一个装入基点。在此之后按排定的时间周期表卸出。比如每周五卸出数据库。对一般数据库系统卸出数据库周期建议为每周一次。
除了按计划周期卸出数据库之外,还需在每次运行没有日志的操作后卸出数据库。例如:
·每次强制地运行了 DUMP TRAN WITH NO_LOG (因为数据库的磁盘空溢出);
·每次用 sp_dboption 允许 select into/bulkcopy 做快速拷贝,或用 SELECT INTO 命令创建一个永久性的表,或使用了 WRITETEXT 命令。
卸出数据库的命令为:
DUMP DATABASE database_name
TO dump_device
database_name 是要卸出的数据库名称,dump_device 是卸出设备的名称。用系统过程 sp_helpdevice 可以获得设备的信息。
下面一条命令用来卸出数据库 my_db :
DUMP DATABASE my_db
TO db_bk_dev
默认导出到 C:/WINDOWS/SYSTEM32/下了。也可以指定路径。
8、备份事务日志
如果事务日志与数据库放在同一个设备上,则事务日志不应与数据库分开备份。master 数据库和小于 4M 的用户数据库就是这种情况。一般数据库系统的数据库和日志分别放在不同的设备上,因此,可以用 DUMP TRAN 命令单独备份日志。
备份事务日志的周期直接影响数据的恢复程度,因此建议每天备份。
备份事务日志的命令格式为:
DUMP TRANsaction database_name
[TO dump_device]
[WITH TRUNCATE_ONLY|WITH NO_LOG|WITH NO_TRUNCATE]
其中 database_name 是要备份事务的数据库名称,dump_device 是备份设备名称,仅当包含了 WITH TRUNCATE_ONLY 或 WITH NO_LOG 子句时,才可以备份到设备。
注意:如果总是用 DUMP DATEBASE (备份数据库及其日志),而不用 DUMP TRAN ,事务日志将不会刷新,而变得非常庞大。
对于 master 数据库和小型数据库每次运行 DUMP DATEBASE 之后应当运行 DUMP TRANsaction 命令刷新日志 。
下面一条命令备份数据库 db160 的事务日志到备份设备上:
DUMP TRANsaction db160
TO db_log_bk_dev
WITH TRUNCATE_ONLY
9、备份数据库及其日志间的相互作用
在至少卸出一次数据库前,卸出事务日志是毫无意义的。下图显示了备份数据库及其日志间的关系
如果在星期二下午5:01出现非硬件故障,需要做的所有工作是装入磁带5(参见下一节:数据恢复),由于磁带5是下午5:00刚备份的,因此只有备份和装入之间的一分钟内的数据损失。
但是,如果在星期二下午4:49失效会怎么样呢?在这种情况下,要装入磁带1(在星期五下午5:00的卸出)。然后,依次装入磁带2,3以及 4。这样,系统将恢复到星期二上午10:00点的状态,星期二的大部分工作丢失了。此例显示了经常卸出事务的重要性。
10、万一系统失败时恢复数据库系统
如果用户数据库存储的设备失效,从而数据库被破坏或不可存取,通过装入最新的数据库备份以及后来的事务日志备份可以恢复数据库。假设当前的事务日志存在于一个并没有毁坏的设备上,带着 WITH NO_TRUNCATE 选项的 DUMP TRANsaction 命令卸出它。
要恢复数据库按如下步骤去做:
1)、如果日志存在于一个分离的设备上,用带着 NO_TRUNCATE 选项的 DUMP TRANsaction 命令卸出被毁坏的或者不可存取的用户数据库事务日志。
2)、用下面的查询检查设备分配已毁坏数据库的设备使用情况。必须为同一目的赋同样的空间块。
下面的查询显示了分配给数据库 mydb 设备使用和尺寸情况:
SELECT segmap,size FROM sysusages
WHERE dbid =
( SELECT dbid FROM sysdatabases WHERE name = “mydb”)
3)、检查查询的输出。在 segmap 列的 ‘3’代表数据分配,‘4’代表日志分配。size 列代表 2K 数据块的数目。注意此信息的次序、使用和尺寸部分。例如,输出为:
4)、用 DROP DATABASE 命令删除毁坏设备上的数据库。如果系统报错,用DBCC DBREPAIR 命令的 DROPDB 选项。
5)、删除数据库后,用 sp_dropdevice 删除毁坏了的设备。
6)、用 DISK INIT 初始化新的数据库设备。
7)、重建数据库。用 CREATE DATABASE 命令从老的 sysusages 表拷贝所有的行,并包含第一逻辑设备。
对上例,命令为:
CREATE DATABASE mydb
ON datadev1=20,datadev2=10
LOG ON logdev1=10
8)、用 ALTER DATABASE 命令重建其余入口。在此例中,在datadev1上分配更多的空间,命令为:
ALTER DATABASE mydb ON datadev1=2
9)、用 LOAD DATABASE 重新装入数据库,然后用 LOAD TRAN 装入前面卸出的日志。
LOAD DATABASE 命令语法是:
LOAD DATABASE database_name
FROM dump_device
LOAD TRANsaction 命令的语法是:
LOAD TRANsaction database_name FROM dump_device
卸出数据库和事务日志的缺省权限归数据库所有者,且可以传递给其他用户;装载数据库和事务的权限也归数据库所有者,但不能传递。
11、产生用户信息表,并为信息表授权;
系统维护人员的另一个日常事务是为用户创建新的信息表,并为之授权。创建表以及为表授权的方法已经在讲过,在此只将有关命令语法写出来。
·创建表的命令为:
CREATE TABLE table_name
( column_1 datatype [NULL | NOT NULL | IDENTITY],
column_2 ……
)
go
ALTER TABLE table_name
ADD PRIMARY KEY (column_list)
go
·删除表的命令格式为:
DROP TABLE table_name
go
· 为表授权的命令格式为:
GRANT {ALL|permission_list}
ON table_name TO user_name
go
· 收回权限的命令格式为
REVOKE {ALL|permission_list}
ON table_name FROM user_name
go
12、监视系统运行状况,及时处理系统错误;
系统管理员的另一项日常工作是监视系统运行情况。主要有以下几个方面:
1)、监视当前用户以及进程的信息
使用系统过程:sp_who
说明:该命令显示当前系统所有注册用户及进程信息,如下表是某系统的信息。
SpidStatusLoginamehostnameblkdbnamecmd
---------------------------------------------------------------
1RunningSascosysv0MasterSELECT
2SleepingNULL0MasterNETWORK HANDLE
3SleepingNULL0MasterDEADLOCK TUNE
4SleepingNULL0MasterMIRROR HANDLER
5SleepingNULL0MasterHOUSEKEEPER
6SleepingNULL0MasterCHECKPOINT SLEEP
从左向右依次显示:进程号、当前状态、注册用户名、主机名、占用块数、数据库名以及当前命令。
如果监视时发现进程总数接近最大连接数(用系统过程:sp_configure “user conn” 查看)时,应下掉不活动或无关进程,以保证系统正常运做;另外亦可监视非法用户或用户使用不属于自己使用范围的数据库等情况。
2)、监视目标占用空间情况
使用系统过程:sp_spaceused
说明:该过程显示行数、数据页数以及当前数据库中由某个目标或所有目标所占用的空间。如下表是某数据库日志表的信息:
NameRow_totalreserveddataIndex_sizeunused
------------------------------------------------------------
SyslogsNot avail32KB32KB0KBNot avail
日常要监视的主要目标有:用户数据库、数据库日志表(syslogs)以及计费原始数据表等。如果发现占用空间过大,对日志表要进行转储;对其他目标则应扩充空间或清楚垃圾数据。
3)、监视 SQL Server 统计数字
使用系统过程:sp_monitor
说明:sp_monitor 显示SQL Server 的历史统计数字,下表是某系统的统计数字:
Last_runCurrent_runSeconds
---------------------------------------------------------------
May 13 2000 1:27PMMay 13 2000 3:01PM5678
CPU_busyIO_busyIdle
---------------------------------------------------------------
16(6)-0%0(0)-0%5727(5672)-99%
Packets_receivedPackets_sentPacket_errors
---------------------------------------------------------------
21(17)100(97)0(0)
Total_readTotal_writeTotal_errorsConnections
--------------------------------------------------------
785(366)311(113)0(0)3(2)
上表依次给出该系统本次运行统计的上一次时间、本次时间、间隔秒数、CPU占用、IO占用、收发包情况、系统读入写出情况等信息
13、保证系统数据安全,周期更改用户口令;
为保证系统数据的安全,系统管理员必须依据系统的实际情况,执行一系列的安全保障措施。其中,周期性的更改用户口令是比较常用且十分有效的措施。
更改用户口令是通过调用系统过程sp_password 来实现的。Sp_password 的语法为:
sp_password caller_password,new_password [,loginame]
其中caller_password 是登录口令(老口令),new_password是新口令,loginame是登录名称。
14.如何修改IP地址改变后的 interfaces文件?
A.安装SYBASE Adapive Server的机器IP地址改变后, 应修改 interfaces 文件及有关的设置。
如果 interfaces 文件中使用的是机器名而不是 IP 地址, 则不需要变动。 但如果客户端联结服务器使
用的是服务器的 IP 地址而不是机器名,那么客户端需修改联结服务器的 IP 地址.。
如果 interfaces 文件中使用的是 IP 地址, 那么需要修改 interfaces 文件中和地址有关的部分,
可使用dscp 或 dsedit 进行修改。 如果客户端联结服务器使用的是服务器的地址而不是机器名,那么客
户端也需修改。
15。实现开机时自动装载Sybase数据库
原先要使Sybase SQL Server启动,一般需要先以sybase用户登录,然后运行$SYBASE/install目录下的startserver命令启动 SYBASE_XXXX服务进程和SYB_BACKUP_XXXX备份服务进程。
要实现Unix系统启动时就能在后台装载Sybase的功能,我们可在/etc/rc2.d/目录下新建一文件S99sybase,内容如下:
SYBASE=/usr/sybase
PATH=$PATH:$SYBASE/bin
export $SYBASE $PATH
$SYBASE/install/startserver -f $SYBASE/install/RUN_SYBASE_XXXX > /dev/null
$SYBASE/install/startserver -f $SYBASE/install/RUN_SYB_BACKUP_XXX >/dev/null
然后修改Sybase的权限,重启系统即可。
16.实现关机时自动卸载Sybase数据库
为保证Sybase系统的正常运行,每次在关闭Unix系统时要先结束 Sybase SQL Server 的服务进程,从减轻系统管理人员操作的角度出发建立一用户halt,修改/etc/passwd文件,将halt用户的uid改为0(或其他可运行 shutdown的用户id),在/usr/halt/.profile中添加以下语句:
SYBASE=/usr/sybase
DSQUERY=SYBASE_XXXX
PATH=$PATH:$SYBASE/bin
export SYBASE DSQUERY PATH
isql -Usa -Pabcabc -ihalt.sql > /dev/null
shutdown -y -g0
其中“abcabc”为sa用户的口令,halt.sql是一简单的文本文件,内容如下:
shutdown
go
这样每次只要以halt用户登录,就实现了自动卸下Sybase数据库,然后关闭Unix系统。
17. Sybase UTF-8中文字符集设置
(这里SYBASE的安装路径为c:/sybase)
1.c:/>cd /sybase/charsets/cp936
2.c:/sybase/charsets/cp936> charset -U用户名 -P密码 -S数据库服务器名称 binary.srt cp936
更改默认字符集为cp936
3.在SQL环境中
1>select name,id from syscharsets(会列出字符集对应的id号)
2>go
找到name为cp936对应的 id(假设为171)
1>sp_configure "default character set id",171
2>go
5.重启server两次
(注:第一次启动后,server会自动宕掉,需要第二次重启后才能使用)
18. 创建用户数据库
若最大设备文件数太小,可以修改为大点的。
sp_configure 'number of devices',50 将最大设备文件数改为50个
go
以下通过一个建立数据库的脚本说明建立数据库的过程:
//创建数据库设备,设备大小以页(2K)为单位
disk init
name="test_dbdev",
physname="/home/bk/test_dbdev.dat",
vdevno=5,
size=10240
go
disk init
name="test_logdev",
physname="/home/bk/test_logdev.dat",
vdevno=6,
size=5120
go
// 创建数据库TEST_DB,其大小为20M,日志大小为10M
create database TEST_DB
on test_dbdev=20
log on test_logdev=10
go
//打开数据库
use TEST_DB
go
-----------
举例说明:
DISK INIT
Name=’My_Device’,
Physname=’D:/database/My_device.dat’,
Vdevno=3
Size=5000
注释:逻辑名、物理名、设备虚拟号、设备大小
------------------------
创建用户数据库
Create Database 数据库名
On 设备_1=Size_1,//单位:M
设备_2=Size_2,
……
log on 日志设备=Log_Size
[With Override]//在同一设备上创建数据库和事务日志时使用该选项
[For Load] //禁止用户访问直到数据库的装入或恢复操作完成为止
举例:
Create Database test_db
On data_dev=100,//单位:M
Index_dev=50
Log on log_dev=30
说明:
(1)将日志放在单独的设备上,有利于数据库性能的提高;
(2)如果将数据库和日志放在同一设备上,就不能实现增量备份;
(3)通常将System和Default段缩减范围到一个设备上,如删除设备Index_dev上的System段和Default段,创建新的段,用来存放专门的数据库对象
19.备份和恢复DB数据
dump database mydb to '/u01/mydb_full.bk'
go
dump tranaction mydb to '/u01/mydb_tran.bk'
go
load database mydb from '/u01/mydb_full.bk'
load transaction mydb from '/u01/mydb_tran.bk'
online database mydb
go
ps:采用增量备份后,严禁日志截断! 即禁止使用:dump transaction sctf truncate_only 命令!
增量备份必须是在完整备份后的或上一次增量备份后,中间若遇到日志截断,后续的增量备份均告失败!
增量备份可以根据需要,如每小时备份一次,每次备份所需时间约2-5秒,所以时间极快。
ps: 单引号和双引号都能关闭shell对特殊字符的处理。不同的是,双引号没有单引号严格,单引号关闭所有有特殊作用的字符,而双引号只要求shell忽略大多数,具体的说,就是①美元符号②反引号③反斜杠,这3种特殊字符不被忽略。 不忽略美元符号意味着shell在双引号内部也进行变量名替换。
*********************************************
下面资料来自SYBASE白皮书
1。客户端字符集修改 locales.dat
2.可以通过设置CHARSET驱动程序属性指定在应用程序中使用的字符集。
或者设置jconnect字符集的方法来设置。
3。查看字符集:
SERVER:sp_helpsort
go
CLIENT:select @@client_csname
go
4.段+阀值:
默认是三个段: system default logsegment
system段: 数据库系统表存放处
default段: 未指明段的对象都存放在这里
logsegment 段:数据库的事务日志存放处
阀值(threshold) :
建立阀值: sp_addthreshold 库名,段名,自由空间,存储过程名字
删除阀值: sp_dropthreshold 库名,段名,自由空间页
显示阀值: sp_helpthreshold
管理阀值: sp_dboption
显示段空间信息:sp_helpsegment
阀值管理的流程如下:
先建存储过程:(下面的是日志的存储过程,原因:日志增长具有不可预见性,相比之下,数据增长具有可预见性,所以一般都建 logsegment的阀值管理,default的阀值管理可不建)
create procedure szjj
@dbname varchar (30),
@segmentname varchar (30),
@space_left int,
@status int
as
dump transaction @dbname to "/tmp/bb.dat"
go
ps:上面是日志的存储过程,如果是数据的存储则用dump database...
查看当前日志自由空间情况:
sp_helpsegment logsegment
go
查看当前数据库数据自由空间情况:
sp_helpsegment default
go
查看当前阀值情况:
sp_helpthreshold
go
查看当前段情况:
sp_helpsegment
go
然后根据自由空间来定阀值参数:
sp_addthreshold test_db,logsegment,200,szjj
go
ps: 当日志段的最后机会阀值被超越后,试图往该日志段上记日志的用户进程默认是被挂起.用下面的命令修改MASTER库参数,让阀值被超越后事务就会滚.
use master
go
sp_dboption test_db,"abort tran on log full",true
go
5. 维护
1)对各ASE用户担当的角色和特权进行分派。
2)管理和监视磁盘空间的使用情况。
3)数据库空间:
sp_helpdb 查看各库情况
alter database 扩充空间
dump tran 截断日志
4)日常数据备份和恢复
5)SYBASE默认的服务器:
adaptive server:管理整个数据库系统,包括用户 数据 资源等的管理和控制。
backup server: 在备份和恢复时执行数据库的dump or load
xp server:执行扩展存储过程
monitor server:为性能调试分析采集数据。
historical server:保存来自monitor server的数据,以备将来分析。
6。单模式启动SYBASE
1)停止ASE数据库服务
2)*/install/startserver -f RUN_servername -m
ps:windows下在服务的属性里加-m。
7.license序列号
验证许可软件是否执行:*/bin/lmutil lmstat -c
手工启动:*/bin/lmgrd -c $lm_license_file&
启动许可管理器:*/bin/lmgr
运行:*/bin/lmutil lmreread
备注:SYBASE安装后注册步骤:
用sybase用户登陆
$ /opt/sybase/SYSAM-1_0/bin/startd.sh $SYBASE/SYSAM-1_0
$ cd /opt/sybase/SYSAM-1_0
$ lmgr
输入:
? 序列号
? 功能名
? 功能计数
? 软件版本
? 授权代码
Adaptive Server 软件包中提供的认证信息,打印在“Sybase 软件资
产管理认证”中。
输入了全部许可证以后,单击“完成”!
检验软件是否在运行:
当lmgrd 守护程序启动时,它将自动启动SYBASE守护程序。要检验许可
证管理软件是否运行在系统上。使用:
$SYBASE/SYSAM-1_0/bin/lmutil lmstat -c
继续安装或启动 Adaptive Server 前,先确认 lmgrd 和 SYBASE 在运行,
即“up”。
注意:为了保证系统启动时启动SySAM(Sybase 软件资产管理器)许可机制
在:/etc/rc.d/rc.local中加入:
/opt/sybase/SYSAM-1_0/bin/startd.sh /opt/sybase/SYSAM-1_0
8.查看逻辑页大小
select @@maxpagesize
9.启动关闭SYBASE
启动:*/startserver -f RUN_servername
关闭:登录后shutdown关数据库服务 shutdown SYB_BACKUP关备份服务器
10。帐户管理
SA帐户初始口令为空,具有SA和SSO角色。具有SSO的登录帐户可以添加其他登录帐户。
1)创建登录帐户
sp_addlogin login_name用户名,password密码 [,defdb默认库] [,deflanguage返回提示信息用的默认语言] [,fullname全名] [,passwdexp口令有效期] [,minpwdlen最小密码长度] [,maxfailedlogins最大尝试次数] [,auth_mech??]
go
2) 修改帐户密码
sp_password caller_password(旧密码,空口令为NULL),new_password新密码 [,login_name登录名,immediate是否立即生效(0 or 1,默认为1,立即生效)]
go
3)sp_modifylogin login_name登录名,待修改选项,选项新值
如:sp_modifylogin login_name,"defdb",db_name
go
4)锁定登录用户
sp_locklogin loginname 'lock'|'unlock'
go
5)显示当前所有锁定登录用户
sp_locklogin
go
6)查看登录用户的登录属性
sp_displaylogin [loginname]
go
7)删除登录用户
sp_droplogin loginname
注意:下列情况下不能删除登录名
该登录名仍是某库用户
该登录名是最后一个管理员或安全员用户
该登录名连线状态
8)授予或者撤销系统角色
注意:|系统角色有三个 sa_role系统管理员 sso_role系统安全员 oper_role备份管理员
|自定义角色任意了。
sp_role "grant"|“revoke",role_name,login_name
go
9)显示登录用户被授予的角色
sp_displayroles user_login_name
go
10)建立数据库用户组(类似OS里的用户组,方便管理用户权限)
sp_addgroup groupname
go
sp_helpgroup [groupname]
go
注意:ASE默认组每个库中都有个 public组,除此之外用户可以自行建组。
改变数据库用户的组:
sp_changegroup grpname新组名,name_in_db用户库名
go
删除组:
sp_dropgroup grpname
go
11)创建数据库用户
sp_adduser loginname用户名 [,name_in_db默认与登录名相同[,grpname所属组]]
go
默认情况下是谁建库谁就是属主,但一般是SA建库再赋给别的用户。改变某库的属主:
sp_changedbowner loginname [,true]
go
注意:系统库不可改变属主;新属主原来不能有库;有也行,先sp_dropuser or sp_dropalias删再赋。
查看数据库用户信息:
sp_helpuser [name_in_db]
go
删除数据库用户:
sp_dropuser name_in_db
go
建删别名(即同一个库用户,它有多个登录名)
sp_addalias loginname登录名,name_in_db
go
sp_dropalias loginname [,force]
go
登录用户相关系统表: master库的syslogins表
数据库用户相关系统表: 个库的sysusers表
系统中我是谁: select suser_id('登录名')
库中我是谁: select suser_id('name_in_db')
获得用户统计信息: sp_reportstats
清零用户统计信息: sp_clearstats
12)授权数据库用户
grant {all |command_list} to {public|name_list| role_name}
revoke {all |command_list} from {public|name_list| role_name}
查询授权表: select * from sysprotects
13) 找回SA密码
停止SYBASE服务--〉修改RUN_xxx,在命令行的最后加上-psa--〉startserver -f RUN_xxx-->启动信息的最后会出来密码。
11。数据库管理
1)数据库选项的设置
sp_dboption[dbname,optname,{,true|false}]
2)建库
create database dbname on data_device_name=size log on log_device_name=size
go
ps:size default is M
3)查看库大小 sp_helpdb dbname
4)改变库的属主 sp_changedbowner loginname[,true]
5)扩展数据库
扩展数据空间:alter database db_name on device_name=容量
扩展日志空间: alter database db_name log on device_name=容量
6) 设置数据库为单用户模式/可以在用户表中自动添加序号生成器/自动截断事务日志模式
use master
go
sp_dboption db_name,"signle user",true
go
sp_dboption db_name,"trunc log on chkpt",true
go
sp_dboption db_name,"auto identity",true
use db_name
go
checkpoint
go
7)查看当前库的进程信息
sp_who
附录=====================================
Explanation
SQL commands are grouped into the following categories:
SQL commands that are not allowed in transactions at all.
SQL commands, such as Data Definition Language (DDL) commands, that are allowed in transactions only if the required database option (ddl in tran) is set to TRUE.
SQL commands that are allowed only if the transaction affects some other database. These commands include create table, drop table, and other commands that are run across databases to create or drop objects in another database when the database in which the objects are being created or dropped has the database option ddl in tran set to TRUE.
Error 226 occurs when Adaptive Server detects a command that is not allowed in a multi-statement transaction. A multi-statement transaction is a set of commands prefaced with the begin transaction command.
The following commands are never allowed in multi-statement transactions:
alter database
create database
dbcc reindex, dbcc fix_text
disk init
drop database
dump database, dump transaction
load database, load transaction
select into
set transaction isolation level
truncate table
update statistics
setuser
The following commands are not normally allowed in multi-statement transactions but you can use them if you use sp_dboption to set ddl in tran to TRUE first:
create default
create index
create procedure
create rule
create schema
create table
create trigger
create view
drop default
drop index
drop procedure
drop rule
drop table
drop trigger
drop view
grant
revoke
Action
If the command is allowed in a multistatement transaction when ddl in tran is set to TRUE, set ddl in tran to TRUE before running the transaction. Setting ddl in tran to TRUE causes locks on system tables and this can affect performance. You can check the current setting of ddl in tran with sp_helpdb.
If the command is never allowed in a multi-statement transaction, execute it outside the multi-statement transaction.
===================================================
1 数据库安装的优化
1.1 应用数据库使用裸设备
若在UNIX(UNIXWARE)操作系统下安装数据库服务器,请将SYBASE应用数据库的设备(device)安装成裸设备。即在创建应用数据库设备(如:IVSP,DB160,NAP2000等)时用裸设备,把文件名指向 /dev/dsk/ 子目录下的相应文件。系统数据库设备(如:master等)仍然指向文件系统。
1.2 补丁程序
完成SYBASE数据库的安装,请注意原版的SYBASE软件都会带有最新的补丁,一定要把补丁打上,否则会出现一些莫名其妙的问题。FOR NT 版的补丁是一个ZIP文件,解压至C:/SYBASE子目录即可。
1.3 安装 SYBASE 在线帮助
在安装好 SYBASE 后,在安装目录下有一文件:../scripts/ins_syn_sql,在服务器上执行该脚本:
Sybase for Unix版: ./isql -Usa -P -i../scripts/ins_syn_sql
Sybase for Winnt版: isql -Usa -P -i/sybase/scripts/ins_syn_sql
执行完毕后,即可在任意的 SYBASE 客户端上连接上 SQL SERVER ,在线取得任意命令的帮助:
sp_syntax "关键字"
如: sp_syntax "alter" 即可列出所有包含"alter"字符的命令
注意:如果执行“./isql -Usa -P -i../scripts/ins_syn_sql”时提示“There is not enough room in the default devices to create the sybsyntax”,则需先用disk init..命令扩个物理设备并用create database sybsyntax on在这个物理设备上建立sybsyntax库,然后再执行导入语句。
2 数据库配置的优化
2.1 优化master数据库
首先加大master设备空间,初始默认为30M,加大为150M。然后加大master数据库空间,默认数据段和日志段各为5M大小,建议改为数据段100M,日志段50M。
alter database master on master=95
2.2 优化tempdb数据库
首先创建tempdb设备,分配给tempdb数据库,默认tempdb数据库数据段和日志段各为2M大小,并创建在 master设备上,建议改为数据段200M,日志段50M,创建在tempdb设备上。
alter database tempdb on tempdb=200
SQL SEVRER所有用户都共享工作表和临时表的tempdb数据库,tempdb主要瓶颈是磁盘I/0。解决办法是把tempdb放在更快的设备上。在 UNIX环境中,把tempdb放在文件系统中而不用原始的设备。由于tempdb在创建数据时,自动在master设备上创建为2M的数据库,为了减少冲突,最好的办法是把tempdb从master设备中移走。为了达到上述目的,可采用如下办法实现:
1:在单用户状态下启动SQL SERVER
启动单用户方法:dataserver -dmaster.dat -m
2:以sa登录
3:在文件系统中创建一个哑数据库。
4:删除sysusages和 sysdatabase表中对现有tempdb数据库的引用
5:获取哑数据库的数据库ID,相应修改sysusages和 ysdatabase表对tempdb的引用
6:重新启动数据库
以在newdevice中创建200M的 tempdb数据库为例,执行过程如下:
create database newtemp on newdevice=200
go
begin tran
go
delete sysusages where dbid = 2
delete sysdatabases where dbid = 2
go
select dbid from sysdatabases where name = ‘newtemp’
go
update sysusages set dbid = 2 where dbid=10
update sysdatabases set name=’tempdb’,dbid=2 where name=’newtemp’
go
select name,dbid, from sysdatabases where name = ‘tempdb’
select * from sysusages where dbid = 2
go
commit tran
go
这种方法只对tempdb有效,其他数据库不能采用这种方法。因为在SQL SERVER启动时,tempdb每次都重新初始化。
2.3 优化系统参数
2.3.1. SYBASE 系统参数调整
0. 锁
sp_configure "lock scheme" , 1,"datarows" 系统默认为表级锁,优化为行锁
sp_configure "number of locks" , 10000 加大最大锁进程数, 默认为5000。(如果设置一个已经存在的表(tabel)的锁方式为行锁,则执行:alter table table_name lock datarows)
1.内存
sp_configure "max memory", 100000 优化数据库的内存,应根据不同机器配置设置, 建议为一半的物理内存大小。以db_block为单位,即每个单位为2k,上例为200M,默认为24M.
sp_configure "allocate max shared mem",1 启动的时候自动分配max memory指定的最大内存
sp_cacheconfig "default data cache","1500m" 设置数据缓存(设置为max memory的一半)
sp_cacheconfig "default data cache","cache_partition=2" 是CPU数量的倍数,对数据缓冲区分区
sp_poolconfig "default data cache","64m","16k" 设置16K 数据缓存
sp_poolconfig "default data cache","128m","8k" 设置8K 数据缓存
sp_configure "procedure cache size",90000 存储过程数据缓存sp_cacheconfig 'tempdb_cache','200m','mixed' 创建命名高速缓存sp_bindcache 'tempdb_cache',tempdb 捆绑临时数据库到tempdb_cache高速缓存
2.cpu
sp_configure "number of engines at startup",1 启动时使用CPU数量
3. 网络
sp_configure "default network packet size",2048 设置网络传送包的大小(重启动生效)
sp_configure "max network packet size",2048
4. 其他资源使用
sp_configure "number of locks",100000 锁使用数量
sp_configure "number of open indexes",5000 打开索引
sp_configure "number of open objects",5000 打开对象
sp_configure "number of user connections",1000 用户连接数
sp_configure "number of device",100 新建设备最大数量
sp_configure "number of open databases",20 最大打开数据库个数,对于需在一台数据库服务上打个多个数据库则需加大此参数,默认为15
2.3.2. sybase 设备调整
数据设备与日志设备必须分开,添加临时数据库设备
1. 数据设备
sp_deviceattr devname,"dsync",true
2. 日志设备
sp_deviceattr devname,"dsync",false
3. 临时数据库设备
sp_deviceattr devname,"dsync",false
2.3.3. sybase 数据结构调整
1. 数据库对象表、索引。。
(1)对表新建合理的索引,定期分析表
update statistics tabname (不锁表)
(2)整理数据库空间 (锁表,剩余空间必须为最大表的1.2倍)
reorg rebuild tabname
recreate clustered index
(3)重新编译存储过程与触发器
sp_recompile usertable (与表相关联的存储过程和触发器)
2.3.4. sybase 数据库监控
1. 数据库死进程
select * from master..syslogshold
2.3.5. sybase 数据库启动参数
-T3607 master
-T3608 其他数据
Startserver –f run_filename –m 单用户启动
如果上述参数改动后SYBASE启动不正常,则可检查SYBASE的错误日志,把SYBASE.cfg中的相应选项修改为较小的值。
附:SYBASE SQL SERVER 内存的分配
1. SQL SERVER 可执行代码 3-4M
2. SQL SERVER 使用的静态内存 2.2-3.25M
3. 用户可配置的参数所占用内存,以下示例(11.9.2版):
默认值 占用内存
用户连接数(user connections) 25 每个 约70k
打开的数据库数(open database) 12 每个 约60k
打开的对象数(open objects) 500 每个 约1k
打开的索引数(open indexs) 500 每个 约1k
锁数目(locks) 5000 每个 约0.1k
数据库设备数(data device) 10 每个 约0.5k
4. 剩余部份分配给
过程缓存 ( 由 procedure cache percent 决定,默认值为 20% )
数据缓存 ( 默认值为减去1、2、3项的 80% )
2.4 优化数据库系统属性
在sybase center中选择数据库属性,将属性中options选项中的下列项目选中。
allow select into/bulk copy
truncate log on checkpoint
checkpoint on recovery
abort transction on full log
free space accounting
allow nulls by default
auto identity column in non-unquie index
方法二:在SQLPLUS中执行下列SQL脚本
如:
sp_dboption mydb,"abort tran on log full",true(设定当数据库的日志空间满时,就终止该进程,使用 sa 用户)
sp_dboption mydb," select into/bulkcopy ",true
sp_dboption mydb," trunc log on chkpt ",true
sp_dboption mydb," no chkpt on recovery",true
sp_dboption mydb," no free space acctg ",true
sp_dboption mydb,"allow nulls by default",true
??sp_dboption mydb," auto identity dbo use only ",true
2.5 创建 阈值存储过程
可根据不同的应用修改以下脚本或创建多个 阈值存储过程,并在配置 阈值时指定相应的存储过程。
create procedure sp_thresholdaction
@dbname varchar(30),@segmentname varchar(30), @free_space int,@status int
as dump transaction @dbname with no_log
print "LOG DUMP: '%1!' for '%2!' dumped",@segmentname,@dbname
go
2.6 配置多个 阈值
方法一:
打开 Sybase Central,双击相应数据库(database)的段 Segments ->; logsegment,在 Thresholds 页面中可设置自动清除日志的阀值。其中有 Last Chance 的一行是系统默认的最后机会阀值,即系统日志空闲空间小于该值时为最后一次自动清除日志的机会。设置时阀值的大小可设为日志总空间大小的20%左右。
另外再增加多个 阈值。
方法二:
1、使用如下指令查出数据库中日志的容量(用页表示)
select sum(size) from master..sysusages where dbid=db_id("database_name") and (segmap&4)=4
2、使用sp_addthreshold增加新的 阈值,大小为日志容量的50%,如上面语句显示值为2048
sp_addthreshold database_name,logsegment,1024,proc_dump_display
注意:因一个大事务时可能会越过当前的 threshold,所以必须加多个threshold,
使用命令select @@thresh_hysteresis查看数据库的滞后值,如结果为64页,则下一个 阈值设为"最近的 阈值-(2*64)",请在所设 阈值再按这种原则各增加两个更小的 阈值。
3 索引的优化
在良好的数据库设计基础上,需高效地使用索引,并经常的维护索引,下文介绍关于索引的相关内容。
3.1 创建索引
索引分为三类:聚簇索引(clustered indexes)、非聚簇索引(nonclustered indexes)、覆盖索引(covering indexes)
鉴于索引加快了查询速度,但减慢了数据更新速度的特点。可通过在一个段上建表,而在另一个段上建其非聚簇索引,而这两段分别在单独的物理设备上来改善操作性能。
create [unique][clustered|nonclustered] index index_name on table_name(column_name...)
3.2 重建索引
随着数据行的插入、删除和数据页的分裂,有些索引页可能只包含几页数据,另外应用在执行大块I/O的时候,重建非聚簇索引可以降低分片,维护大块I/O的效率。重建索引实际上是重新组织B-树空间。在下面情况下需要重建索引:
(1)、数据和使用模式大幅度变化。
(2)、排序的顺序发生改变。
(3)、要进行大量插入操作或已经完成。
(4)、使用大块I/O的查询的磁盘读次数比预料的要多。
(5)、由于大量数据修改,使得数据页和索引页没有充分使用而导致空间的使用超出估算。
(6)、dbcc检查出索引有问题。
当重建聚簇索引时,这张表的所有非聚簇索引将被重建.
3.3 索引统计信息的更新
当在一个包含数据的表上创建索引的时候,SQL Server会创建分布数据页来存放有关索引的两种统计信息:分布表和密度表。优化器利用这个页来判断该索引对某个特定查询是否有用。但这个统计信息并不动态地重新计算。这意味着,当表的数据改变之后,统计信息有可能是过时的,从而影响优化器追求最有工作的目标。因此,在下面情况下应该运行update statistics命令:
(1)、数据行的插入和删除修改了数据的分布。
(2)、对用truncate table删除数据的表上增加数据行。
(3)、修改索引列的值。
4 查询优化
4.1 NOT IN子句
不知大家是否喜欢使用‘NOT IN’这样的操作,如果是,那尽量使用(NOT) EXISTS 替代。
例子:
语句1
SELECT dname, deptno FROM dept WHERE deptno NOT IN (SELECT deptno FROM emp);
语句2
SELECT dname, deptno FROM dept WHERE NOT EXISTS (SELECT deptno FROM emp WHERE dept.deptno = emp.deptno);
明显的,2要比1的执行性能好很多,因为1中对emp进行了full table scan,这是很浪费时间的操作。而且1中没有用到emp的index,因为没有where子句。而2中的语句对emp进行的是range scan。
4.2 海量查询
在海量查询时尽量少用格式转换。
如用
WHERE a.order_no = b.order_no
而不用
WHERE TO_NUMBER (substr(a.order_no, instr(b.order_no, '.') - 1)= TO_NUMBER (substr(a.order_no, instr(b.order_no, '.') - 1)
3)查询海量数据是可以使用 optimizer hints,例如
如
SELECT E.ENAME FROM EMP E WHERE E.JOB = 'CLERK';
而不是
SELECT E.ENAME FROM EMP E WHERE E.JOB || '' = 'CLERK';
4。3
sybase 查询前10条记录:
set rowcount 10 select * from tables2 where set rowcount 0
4。4
|
4。5
强行断开用户连接
1.sp_who
找到pid
2. kill pid
杀不需要连接用户的pid
转自:http://lancelill.blog.163.com/blog/static/19671716201071061349440/