使用命令方式操作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>; (isql -Usa -Pmima -Sserver) shutdown go ² 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。 注意四点: ² vedvno表示数据库设备号,建设备时要根据数据库不同而加以修改,查看vedvno号的命令是:sp_helpdevice,可以看到已经使用了的数据库设备号,新建的数据库设备号只要比最大已经使用了的设备号多一就可。 ² 查看当前系统支持建多少数据库的命令是:sp_configure “number of devices”。 ² 设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空间大小。 注意: ² with override是回收利用事务日志用的,在空间比较紧张的情况下,会自动重复利用事务日志空间。只有数据部分和事务日志部分放在同一数据库设备上才能使用。 ² 建议在创建功数据库时,数据库的数据部分和事务日志部分分开在不同的数据库设备上创建,这样做有如下好处: · 可以单独地备份(back up)transaction log · 防止数据库溢满 · 可以看到log空间的使用情况。[dbcc checktable (syslogs)] · 可以镜像log设备 (三) 备份数据库部分 备份数据库用命令方式有两种方式:BCP与DUMP。BCP能在不同的平台上对数据库中的数据进行备份,但是BCP只能导出数据库中的数据,不能导出表的结构。DUMP能导出数据库的结构与数据,但是不能在不同平台之间进行备份。下面分别介绍: 1. BCP 使用BCP命令可以一次导出一个表,也可以一次导出整个数据库。 ² 一次导出一个表的方法 以nbcredit数据库中的zljd_mpqyxx为例。 Bcp nbcredit..zljd_mpqyxx out c:\zljd_mpqyxx -Usa –Pxxx –Sxxx –c 导入时把out 改为in即可。 ² 一次导出整个数据库的方法 以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” 注意: ² load 数据库后,还要用ONLINE DATABASE nbcredit命令后,数据库才能用。 ² DUMP数据库前要启动备份服务器。 ² 如果数据量大于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命令不能导出数据库表结构,所以需进行数据库表结构的导出。 ² 在sybase12.5版本以上,可以用如下方式导出表结构: ddlgen –Usa –Pxxx –Ddb_name –Sxxx:port –Ooutput_file 其中db_name指所要导出的数据库名。 ² 低于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文件的内容即为整个数据库表结构。 Unix平台下建库 01.disk init name='tempdbdev', physname='/home/sybase/data/tempdbdev.dat', 02. size="500M" 03.go 解释:初始化一个名叫"tempdbdev"的设备,会在data下生成一个tempdbdev.dat'的文件,大小为500M 04. 05.alter database tempdb on tempdbdev = 500 06.go 解释:添加一个数据库到这个设备上,大小为500M 07. 08.disk init name='cddbdev', physname='/home/sybase/data/cddb.dat', 09. size="2000M" 10.go 11.disk init name='cddblogdev', physname='/home/sybase/data/cddblog.dat', 12. size="2000M" 13.go 14.sp_addumpdevice 'disk', cddb, '/home/exbadm/db.bak/cddb' 15.go 解释:添加一个名为cddb的磁盘备份设备,其物理名称为/home/exbadm/db.bak/cddb 16. 17.sp_addlogin exbadm, exbadm 18.go 解释:添加一个数据库登录exbadm,密码为exbadm 19. 20.--创建cddb 21. 22. 23.create database cddb on cddbdev = 2000 log on cddblogdev = 500 24.go 解释:创建一个名为cddb的数据库在cddbdev设备上,大小为2000M,同时,log存放在cddblogdev设备上大小500M 25. 26.sp_modifylogin exbadm, defdb, cddb 27.go 解释:授权exbadm用户访问cddb 28. 29.use cddb 30.go 31. 32.sp_adduser exbadm 33.go 解释:给cddb数据库添加了一个用户exbadm 34. 35.grant all to exbadm 36.go 解释:将cddb数据库的所有权限都赋给了exbadm用户 37. 38.use master 解释:如果后续还有针对其他非cddb数据库操作的话,需要先切换回master数据库,以免出现权限不足等问题 39.go |
|