现在的位置: 首页 > 综合 > 正文

使用命令方式操作sybase数据库

2013年08月15日 ⁄ 综合 ⁄ 共 4992字 ⁄ 字号 评论关闭

使用命令方式操作sybase数据库

本文包括用命令方式启动和关闭数据库,创建数据库,备份数据库和导出数据库结构四大部分。
(一)        启动和关闭数据库
²        UNIX平台:
以Sybase安装帐户身份登录;或以root登录,执行以下命令进入Sybase 帐户。
# su - sybase
启动ASE:
$cd install 或 $cd ASE-12_?/install (进入相应子目录, ?为小版本号)
$ startserver –f RUN_ServerName (ServerName为你的服务器名)
检查ASE运行:
$cd install 或 $cd ASE-12_0/install (进入相应子目录)
$ showserver
停止ASE:
$ isql –Usa –P<password>; -S<ServrName>;
shutdown
go
&sup2;        windows平台:
进入sybase的安装目录,$/Sybase/install,然后运行RUN_Servername.bat即可,其中Servername为相应的主机名。

(二)         创建数据库部分
创建数据库分为以下两部:
1.        建数据库设备
建数据库设备的语法是:
disk init
name = “device_name”,
physname = “physicalname”,
vdevno = “virtual_device_number,
size = number_of_blocks
go
以建testdb数据库设备为例:
disk init
name = “testdb”,
physname = “c:/Sybase/data/testdb.dat”,
vdevno = 3,
size = 5120
go
就把数据库设备建好了,空间大小为10M。
注意四点:
&sup2;        vedvno表示数据库设备号,建设备时要根据数据库不同而加以修改,查看vedvno号的命令是:sp_helpdevice,可以看到已经使用了的数据库设备号,新建的数据库设备号只要比最大已经使用了的设备号多一就可。
&sup2;        查看当前系统支持建多少数据库的命令是:sp_configure “number of devices”。
&sup2;        设size的大小时,512表示1M大小,所要建数据库的大小依此比例类推。因为disk init 将数据库设备分成包含256个2K的分配单元,总计1/2M,故512就表示1M。
2.        创建数据库
创建数据库的语法是:
create database database_name
[on {default|database_device}[=size]
    [,database_device[=size]…]
[log on database_device [=size]
    [,database_device [=size]]…]
[with override]
[for load]
go
数据库数据部分和日志部分建在同一数据库设备上以建example数据库为例:
create database example
on testdb = 8
log on testdb = 2
with override
go
就把example数据库建好了,此数据库将数据部分放在testdb数据库设备上,分配8M空间大小;将事务日志也放在testdb数据库设备上,分配2M空间大小。
数据库数据部分和日志部分建在不同数据库设备上以建test数据库为例:
create database test
on test1 = 8
log on test2 = 2
go
就把test数据库建好了,此数据库将数据部分放在test1数据库设备上,分配8M空间大小;将事务日志也放在test2数据库设备上,分配2M空间大小。
注意:
&sup2;        with override是回收利用事务日志用的,在空间比较紧张的情况下,会自动重复利用事务日志空间。只有数据部分和事务日志部分放在同一数据库设备上才能使用。
&sup2;        建议在创建功数据库时,数据库的数据部分和事务日志部分分开在不同的数据库设备上创建,这样做有如下好处:
·        可以单独地备份(back up)transaction log 
·        防止数据库溢满
·        可以看到log空间的使用情况。[dbcc checktable (syslogs)] 
·        可以镜像log设备

 

(三)        备份数据库部分
备份数据库用命令方式有两种方式:BCP与DUMP。BCP能在不同的平台上对数据库中的数据进行备份,但是BCP只能导出数据库中的数据,不能导出表的结构。DUMP能导出数据库的结构与数据,但是不能在不同平台之间进行备份。下面分别介绍:
1.        BCP
使用BCP命令可以一次导出一个表,也可以一次导出整个数据库。
&sup2;        一次导出一个表的方法
以nbcredit数据库中的zljd_mpqyxx为例。
Bcp nbcredit..zljd_mpqyxx out c:/zljd_mpqyxx  -Usa –Pxxx –Sxxx –c
导入时把out 改为in即可。
&sup2;        一次导出整个数据库的方法
以nbcredit数据库为例。
先在c:/下创建一个命名为data_for_db的文件夹,编辑一个文本文件script.txt,保存在c:/下,内容如下:
use nbcredit
go
select "bcp nbcredit.."+name+" out c:/data_for_db/"+name+" -Usa -Pxxx -c" from sysobjects where type="U"
go
注意:BCP的参数“-c”表示文本方式,“-n”表示二进制方式。
在windows上执行如下命令:isql –Usa –Pxxx –b –i script.txt –o bcpout.bat就会在c:/看到一个bcpout.bat批处理文件,执行它就可。
在unix上执行如下命令:isql  -Usa   -P  -b -i script.txt  -o bcpout
            chmod  +x   bcpout
2.        DUMP
以nbcredit 数据库为例。
Dump database nbcredit to “d:/nbcredit.dat”
Load database nbcredit from “d:/nbcredit.dat”
注意:
&sup2;        load 数据库后,还要用ONLINE DATABASE nbcredit命令后,数据库才能用。
&sup2;        DUMP数据库前要启动备份服务器。
&sup2;        如果数据量大于2G的话,得用如下方法备份:
dump database nbcredit to “d:/nbcredit1.bat”
stripe on “d:/nbcredit2.bat”
stripe on “d:/nbcredit3.bat”
go
恢复时用如下方法:
load database nbcredit from “d:/nbcredit1.dat”
stripe on “d:/nbcredit2.bat”
stripe on “d:/nbcredit3.bat”
go

(四)        导出数据库表结构部分
在不同平台上导数据时,只能用BCP命令,但是BCP命令不能导出数据库表结构,所以需进行数据库表结构的导出。
&sup2;        在sybase12.5版本以上,可以用如下方式导出表结构:
ddlgen –Usa –Pxxx –Ddb_name –Sxxx:port –Ooutput_file
其中db_name指所要导出的数据库名。

&sup2;        低于sybase12.5版本的,得进行执行脚本的方式导出表结构。脚本文件内容如下:
use sybsystemprocs
go

if object_id('dbo.sp_ddl_create_table') is not null
    drop procedure sp_ddl_create_table
    print "Dropping sp_ddl_create_table"
go

create proc sp_ddl_create_table
as

-- Creates the DDL for all the user tables in the
-- current database

select  right('create table ' + so1.name + '(' + '
', 255 * ( abs( sign(sc1.colid - 1) - 1 ) ) )+
        sc1.name + ' ' +
        st1.name + ' ' +
        substring( '(' + rtrim( convert( char, sc1.length ) ) + ') ', 1,
        patindex('%char', st1.name ) * 10 ) +
        substring( '(' + rtrim( convert( char, sc1.prec ) ) + ', ' + rtrim(
        convert( char, sc1.scale ) ) + ') ' , 1, patindex('numeric', st1.name ) * 10 ) +
        substring( 'NOT NULL', ( convert( int, convert( bit,( sc1.status & 8 ) ) ) * 4 ) + 1,
        8 * abs(convert(bit, (sc1.status & 0x80)) - 1 ) ) +
        right('identity ', 9 * convert(bit, (sc1.status & 0x80)) ) +
        right(',', 5 * ( convert(int,sc2.colid) - convert(int,sc1.colid) ) ) +
        right(' )
' + 'go' + '
' + '
', 255 * abs( sign( ( convert(int,sc2.colid) - convert(int,sc1.colid) ) ) -
1 ) )
from    sysobjects so1,
        syscolumns sc1,
        syscolumns sc2,
        systypes st1
where so1.type = 'U'
and sc1.id = so1.id
and st1.usertype = sc1.usertype
and sc2.id = sc1.id
and sc2.colid = (select max(colid)
                from syscolumns
                where id = sc1.id)
order by so1.name, sc1.colid
go

if object_id('dbo.sp_ddl_create_table') is not null
begin
    grant execute on sp_ddl_create_table to public
    print "Created sp_ddl_create_table"
end
else
    print "Failed to create sp_ddl_create_table"
go
查看具体某数据库表结构方法如下,以查看nbcredit数据库表结构为例:
编辑脚本文件script.txt,保存在c:/,内容如下:
use nbcredit
go
sp_ddl_create_table
go
然后执行以下语名:isql –Usa –Pxxx –b –i script.txt –o scriptout.txt
其中scriptout.txt文件的内容即为整个数据库表结构。

(五)、清理日志

在应用melinets系统时,有时会出现系统缓慢以至于不能借还书,这种情况的出现原因就是系统日志文件已经慢了,需要清除日志文件,具体操作方法如下:

第一步:进入SYSBASE管理中的SQL advantage管理,用帐号“sa”登录,连接master数据库。

第二步:在运行窗口中输入

“dump transaction melinets with truncate_only”或用

“dump transaction melinets with no_log”

第三步:运行命令。(等窗口左下角显示为“ready”表示运行完毕)

抱歉!评论已关闭.