五、Sybase数据库操作汇总

来源:互联网 发布:论坛软件下载 编辑:程序博客网 时间:2024/06/11 05:42

1.出现can execute file RUN_SYBASE的错误可能是安装者修改了默认服务名而引起的。 

2.调用./SYBASE.sh是不可以把环境信息导入当前的shell中的,要使用source ./SYBASE.sh才行。另外可以使用export -p来看当前shell的环境情况。 
3.连接时出现了LANG的错误,可能就是sybase不识别系统使用的语言,我遇到的是由于多语言引起的。export LANG="en_US"应该可以了 。 

4.另外还有一个方法可以快速查sybase有没启动服务。lsof -i:端口号。端口号可以在SYBASE_HOME/interfaces可以查看端口号。

5.关闭服务可以通过Kill进程,或者通过isql以SA用户登录使用shutdown go来关闭数据库

6.开启数据库,./startserver.sh -f RUN_服务名 -f RUN_备份服务名

some points in sybase:
sybsystemprocs 系统过程数据库
sybsystemdb 两阶段提交事务数据库
tempdb 临时数据库
master数据库存储有关用户数据库和设备的信息,但不要放置用户对象,这会导致master的事务日志很快就满。如果事务日志的空间已用完,则无法使用dump transaction命令来释放master数据库中的空间。
注意:不要将用户数据库存储在主设备上。在更改配置参数时要谨慎。

用于磁盘资源的命令:

命令 
任务 
disk init 
name="dev_name" 
physname="phys_name" ... 
使某个物理设备可供特定的Adaptive Server使用。 
指派数据库设备名称(dev_name),用于在其它 
Adaptive Server命令中表示该设备 
sp_deviceattr logicalname、 
optname、optvalue 
更改现有数据库设备文件的dsync设置 
sp_diskdefault "dev_name" 
向缺省数据库空间的常规缓冲池添加dev_name. 
disk resize 
name ="dev_name" 
size =addtional_space 
动态增加数据库设备的大少 
disk mirror 
name="dev_name" 
mirror ="phys_name" 
在特定物理设备上镜像数据库设备 

在创建登录用户时,最好指定好数据库,尽量不用master数据库,以免master有包含用户创建的数据库对象 

7、Sybase数据库修改密码

利用sql advantage登录后,执行sql语句sp_password NULL,'123456',sa   ,其中 null为当前密码,'123456'为修改后密码,sa为登录名。



使用配置文件可有以下几方面的好处: 
1.可以使用同一个配置文件,在多台服务器上复制某一特定配置文件。 
2.能够以某个配置文件为基准测试服务器的配置值。 
3.可以在实际设置参数值之前,先使用配置文件对参数值进行检查。 
4.可以创建多个配置文件,以便需要更改资源时在它们之间转换。 

把日志放到独立的数据库设备上,可以: 
1,允许使用dump transaction 命令而不是dump database命令,从而节省时间和磁带 
2,允许建立固定长度的日志,防止它与其他数据库活动争用空间 
3,在日志段上创建缺省的可用空间或值监控,并允许在数据库的日志和数据部分创建额外的可用空间监控。 
4,提高性能 
5,确保硬盘崩溃后的完全恢复。 

事务日志的大小由下列因素决定: 
1.相关数据库中更新活动的数量 
2.事务日志转储的频率程度 

查看报告日志使用情况:dbcc checktable(syslogs) 
查看数据库使用情况: sp_spaceused 先通过 use 数据库名 go 去到想查看的数据库里先。 
sp_spaceused输出结果列解析: 
database_name 正在检查数据库的数据库名称 
database_size 数据库中的大小 
reserved 分配给所有在数据库中创建的表和索引的空间量。 
data,index 数据和索引所用的空间。 
unused 已保留但尚未被已存在的表和索引所用的空间量。 
如果想删除设备,先得删除使用该设备的数据库。 
将日志和数据在同一设备上的数据库的事务日志移到单独的数据库设备上:sp_logdevice dbname,devname 
1,只有在单用户模式下才能执行。2,只将sp_logdevice    用于日志和数据都在同一设备上的数据库,不要将它使用在具有单独的日志设备的数据库上。 
查看数据库大小和设备信息:sp_helpdb [dbname]。 

在sybase的数据类型中,只有可变长的数据类型才能置NULL值,如varchar(n)和varbinary(n).另外输入的带有E符号的文字货币都会被看成float。 

datetime 8个字节,date time smallldatetime 4个字节 
sybase不能进行一下转换: 
1.将smallint数据转换为datetime 
2.datetime数据转换成smallint 
3.将binary或varbinary数据转换为smalldatetime或datetime数据 

@@boottime 返回Adaptive Server 上次启动的日期和时间 
@@errorlog 返回指向Adaptive Server错误日志所在目录的完整路径。 
@@maxpagesize 返回服务器的逻辑页大小。 

@@servername 返回Adaptive Server的名称

@@version  返回sybase的版本

临时表名以#开头,变量名以@开头

my experiences:
在使用sybase的这几天内,遇到比较多问题:
一.如何设置linux用户登录时自动执行source SYBASE.sh?(~/.bash_profile中添加source SYBASE.sh)
二.sybase的数据库使用经验:
1.增加登录用户 以sa登录寻使用sp_addlogin loginname,password,defaultdb 增加用户。

                       sp_adduser loginname把用户添加到当前数据库中。

                      要注意的点是:sp_addlogin中虽然加入默认登录的db,但只执行该语句并不能使用户有登录默认数据库的权限,一定得使用sp_adduser加入数据库后才能访问该DB。
2.权限管理跟oracle语法差不多,只是有个别权限名字不同而已。create default、create procedure、create rule、create table、create view、create function。免得麻烦,我通常grant all。all就等于前面6个权限。如有怀疑,可通过以下方式验证: 

                用dbo登录数据库, 使用该语句可以查询用户具有的权限:select a.uid,a.name,b.action from sysusers a,sysprotects where a.uid=b.uid  

                关于sysusers和sysproctects的详情可下载官方的tables文档来看。     

3.设备的新建:
disk init
name="server中唯一识别符",   --不要漏了逗号
physname="物理路径",
size="1g"  --不加单位为多少页,页的大小在创建服务器时已制定,可以通过select @@maxpagesize来查询,大小写均可。
改变设备的大小(只能增大):在某些版本中没有disk resize
disk resize
name="dev_name",
size="addtional_space" -- 增加的大小
sybase ase默认的设备个数为10。
4. 新建数据库.
create database dbname
on dev_name=size
log on dev_name=size
在此过程,服务器将执行以下动作:
①.检查数据库名是否唯一
②.检查数据库所依赖的设备是否可用,即检查该设备是否存在,和它满不满足数据库要求的空间大小。
③.服务器将自动为该数据库寻找唯一的dbid.
④.在master的sysusages记录数据库占用设备的信息。
⑤.在sysdatabases中新增一行。
⑥.根据model数据库生成该数据库的系统表
⑦.因为上述语句没有for load,所以服务器会清除该数据库设备的剩余页。
5.数据库与设备的关系
设备根据其用途大概为分为3种:
①数据设备 ②日志设备 ③混合设备
但强烈不建议使用混合设备。原因:降低数据查询速度(具体看上面)。
虽然设备与数据库是多对多的关系(即一个设备可以对应多个数据库),但个人不建议这样做,建议一个数据库对应一个数据设备和一个日志设备。想要删除设备,就先得删除依赖它的数据库,使用sp_dropdevice删除设备。
三、遇到连接错误的问题:当使用isql登录服务器时,出现这样的错误:ct_connect(): network packet layer: internal net library error: Net-Lib protocol driver call to connect two endpoints failed。
一看到这个错误,应该是网络出现了问题,但使用lsof -i:5000 和RUN_servername来查看sybase服务器的状态,都没有问题,使用命令hostname -i也没有发现问题。因此具体造成此错误的原因我尚未弄明白,但通过重启服务就把它就解决了。这个错误让我想起之前我在oracle中遇到的一个问题:我 把原来关闭了orcle的console服务打开(其他相关的服务原来就开启了),打开后,我用cmd以sysdba的分配登录sqlplus时,报一个 监听错误,我用NET MANAGER查看监听信息,与ora的配置文件中信息对比,都没有发现错误,最后重启一个listener服务就可以了。我想可能console的服务 与listener的服务存在前后顺序的关联。

sybase的字符集问题:
1.安装字符集:到sybase安装目录下的charsets的目录,选择要安装的字符集,使用charset -Usa -Ppassword -Sserver_name binary.srt charset_name
2.查看默认字符集:sp_helpsort
3.设置默认字符集:sp_configure "default character set id",id 在master数据库下运行,id可以通过select * from syscharsets查询。

日志满了的问题:
两种解决方法:1.手动清除 truncate transaction dbname with truancate_only 当然如有需要,你可以先备份数据。
                      2.自动清除 sp_dboption dbname,"trunc log on ckpt",true (在master下运行,且需要在dbname下运行checkpoint才能生效,有提示信息的)

修改设备数量:sp_configure "number of devices",30 默认为10个
查看当前用户信息:sp_displaylogin
查看最大连接数:select @@max_connections
查看当前连接数: select @@connections
查看最大用户连接数:sp_configure "number of user connections"

查看sybase锁的个数(个人认为挺重要的参数):sp_configure “number of locks”

创建登录用户: sp_addlogin username,userpassword
把某个数据库的登录权限授予用户:use dbname。sp_adduser name
改变某个数据库的拥有者给某个用户: use dbname。sp_changedbowner username(这个用户不能是该数据库的用户)
修改用户参数:sp_modifylogin username,option,option_value

option有:authenticate with-登录鉴别
defdb-默认登录数据库
deflanguage-用户缺省语言的正式名称
fullname-用户的全名
"add default role"-增加用户角色
"drop default role"-删除用户角色
"passwd expiration"-口令有效日期(天数:0-32767)
"min passwd length"-密码最小长度
"max failed_logins"-允许登录失败次数
log script-登录时运行的脚本

 使用sp_who可以查看那当前所以用户和进程信息

dbcc traceon(3604)打开跟踪,使得dbcc的运行结果打印在控制台上。

dbcc sqltext(pid)就可以打印出进程号为pid正在运行的SQL语句。




0 0
原创粉丝点击