比较好的Sybase操作
安装:FRO LINUX1.用sybase身份安装:CD20045-55-1252-01.tgz
建立sybase,家目录在/opt/sybase,加密码。解压到/tmp/inst/。修改/etc/hosts:ip tank
2.用sybase登录,启动xwindow,运行/tmp/inst/setup进行图形安装。
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
…………………
0
commit transaction
select @@transtate
…………………
0
(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.创建用户数据库
以下通过一个建立数据库的脚本说明建立数据库的过程:
//创建数据库设备,设备大小以页(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
8.查看逻辑页大小
select @@maxpagesize
9.启动关闭SYBASE
启动:*/startserver -f RUN_servername
关闭:登录后shutdown关数据库服务 shutdown SYB_BACKUP关备份服务器
10。帐户管理
SA帐户初始口令为空,具有SA和SSO角色。具有SSO的登录帐户可以添加其他登录帐户。
1)创建登录帐户
sp_addlogin login_name,password
go
2)修改帐户密码
sp_password caller_password,new_password,login_name
go
3)设置登录帐户的缺省数据库(如果不指定,默认是master库)
sp_addlogin login_name,password,default_db
go
or
sp_modifylogin login_name,"defdb",db_name
go
4)为登录帐户授予系统角色
sp_role "grant",role_name,login_name
go
or
grant role role_name to login_name
go
5)查看登录帐户的信息
sp_displaylogin login_name
go
6)SYBASE常用角色:sa sso oper
7)修改登录密码
sp_password caller_passwd,new_passwd[,login_name]
8)删除sa_role的口令
alter role sa_role drop passwd
9)创建数据库用户
sp_adduser loginname[,name_in_db[,grpname]]
go
10)添加用户并授予查询权限
sp_adduser 权限 on 表名 to 用户名
11)删除别名
sp_dropalias loginname
12)创建用户自定义组
sp_addgroup grpname
go
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.