分享

总结工作中的Sybase数据库(二)

 昵称465563 2010-09-26
使用命令方式操作sybase数据库

本文包括用命令方式启动和关闭数据库,创建数据库,备份数据库和导出数据库结构四大部分。
(一)        启动和关闭数据库
²        UNIX平台:
以Sybase安装帐户身份登录;或以root登录,执行以下命令进入Sybase 帐户。
# su - sybase
启动ASE:
Java代码 复制代码
  1. $cd install 或 $cd ASE-12_?/install (进入相应子目录, ?为小版本号)   
  2. $ startserver –f RUN_ServerName (ServerName为你的服务器名)  

检查ASE运行:
Java代码 复制代码
  1. $cd install 或 $cd ASE-12_0/install (进入相应子目录)   
  2. $ showserver  
停止ASE:
Java代码 复制代码
  1. $ isql –Usa –P<password>; -S<ServrName>; (isql -Usa -Pmima -Sserver)   
  2. shutdown   
  3. go   
  4. &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.        创建数据库
创建数据库的语法是:
Java代码 复制代码
  1. create database database_name   
  2. [on {default|database_device}[=size]   
  3.     [,database_device[=size]…]   
  4. [log on database_device [=size]   
  5.     [,database_device [=size]]…]   
  6. [with override]   
  7. [for load]   
  8. 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版本的,得进行执行脚本的方式导出表结构。脚本文件内容如下:
Java代码 复制代码
  1. use sybsystemprocs   
  2. go   
  3.   
  4. if object_id('dbo.sp_ddl_create_table') is not null  
  5.     drop procedure sp_ddl_create_table   
  6.     print "Dropping sp_ddl_create_table"  
  7. go   
  8.   
  9. create proc sp_ddl_create_table   
  10. as   
  11.   
  12. -- Creates the DDL for all the user tables in the   
  13. -- current database   
  14.   
  15. select  right('create table ' + so1.name + '(' + '   
  16. ', 255 * ( abs( sign(sc1.colid - 1) - 1 ) ) )+   
  17.         sc1.name + ' ' +   
  18.         st1.name + ' ' +   
  19.         substring( '(' + rtrim( convert( char, sc1.length ) ) + ') '1,   
  20.         patindex('%char', st1.name ) * 10 ) +   
  21.         substring( '(' + rtrim( convert( char, sc1.prec ) ) + ', ' + rtrim(   
  22.         convert( char, sc1.scale ) ) + ') ' , 1, patindex('numeric', st1.name ) * 10 ) +   
  23.         substring( 'NOT NULL', ( convert( int, convert( bit,( sc1.status & 8 ) ) ) * 4 ) + 1,   
  24.         8 * abs(convert(bit, (sc1.status & 0x80)) - 1 ) ) +   
  25.         right('identity '9 * convert(bit, (sc1.status & 0x80)) ) +   
  26.         right(','5 * ( convert(int,sc2.colid) - convert(int,sc1.colid) ) ) +   
  27.         right(' )   
  28. ' + 'go' + '  
  29. ' + '  
  30. ', 255 * abs( sign( ( convert(int,sc2.colid) - convert(int,sc1.colid) ) ) -   
  31. 1 ) )   
  32. from    sysobjects so1,   
  33.         syscolumns sc1,   
  34.         syscolumns sc2,   
  35.         systypes st1   
  36. where so1.type = 'U'  
  37. and sc1.id = so1.id   
  38. and st1.usertype = sc1.usertype   
  39. and sc2.id = sc1.id   
  40. and sc2.colid = (select max(colid)   
  41.                 from syscolumns   
  42.                 where id = sc1.id)   
  43. order by so1.name, sc1.colid   
  44. go   
  45.   
  46. if object_id('dbo.sp_ddl_create_table') is not null  
  47. begin   
  48.     grant execute on sp_ddl_create_table to public  
  49.     print "Created sp_ddl_create_table"  
  50. end   
  51. else  
  52.     print "Failed to create sp_ddl_create_table"  
  53. 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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多