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

[b]使用命令方式操作sybase数据库[/b]

本文包括用命令方式启动和关闭数据库,创建数据库,备份数据库和导出数据库结构四大部分。
(一) 启动和关闭数据库
² 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; -S; (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

你可能感兴趣的:(总结工作中的Sybase数据库(二))