八、数据库备份与恢复
SQL Server提供了两种不同类型的恢复:一类是系统自动完成的恢复;另一类是人工完成的恢复。
1.系统软件故障恢复
系统自动恢复是在系统软件出现故障的情况下通过重新启动SQL Server进行恢复。
自动恢复从master数据库开始,然后是model数据库,再是temporary数据库,最后是用户数据库。在每个数据库上,恢复机制观察事务日志。如果日志写入比数据库更近的数据,则向前恢复数据库。如果事务尚未完成,则要回退它们。
所谓事务日志就是一张系统表,syslogs。在这张表中记录着对数据库的更新请求,例如插入、修改和删除。查询操作不记入事务日志中。
2.介质故障的恢复
一旦介质发生故障,只有通过以前备份的数据库和事务日志才能恢复数据库,为此我们需要经常备份数据库和事务日志。备份数据库和事务日志我们使用dump命令,而恢复数据库和事务日志我们使用load命令。
与创建数据库需要一个数据库设备类似,我们备份数据库和事务日志也需要一个卸出设备。增加卸出设备可以通过系统过程sp_addumpdevice来实现。卸出设备可以是磁盘、磁带或操作系统文件。
sp_addumpdevice "type",device_name,physicalname
例:
sp_addumpdevice "disk", "db114", "/usr/sybase/zyl114.bak",1
(1) 备份数据库和事务日志
备份数据库的语法为:
dump database database_name to dump_device
例如:
dump database tele114 to db114
备份事务日志的语法为:
dump transaction database_name to dump_device
[with truncate_only | with no_log | with no_truncate]
前两项在日志中删除提交的事务,后一项不删除。
在备份数据库前的所有事务日志备份都是没有意义的。我们一般不经常备份数据库,但我们要经常备份事务日志。这是因为备份事务日志比备份数据库需要更少的时间和存储空间。
(2)恢复用户数据库
要恢复已被破坏的数据库,可以按如下步骤进行:
· 用带no_truncate选项的dump命令卸出用户数据库事务日志。
· 用和被破坏的数据库的同样的结构建立一个新的数据库。
· 用load命令重新装入数据库和事务日志。
装入数据库的语法为:
load database database_name
from file_name
装入事务日志的语法为:
load transaction database_name
from file_name
例:数据库备份
1> dump db_name to file_name
2> go
数据库恢复
1> load db_name from file_name
2> go
日志备份
1> dump transaction db_name to file_name
2> go
日志恢复
1> load transaction db_name from file_name
2> go
日志删除
1> dump transaction db_name with truncate_only
2> Go
(3)master数据库的恢复
A、保存系统表的拷贝:sysdatabases、sysdevices、sysusages、sysloginroles和Syslogins。
B、转储主设备上的用户数据库。
C、关闭SQL Server并使用buildmaster建立新的master数据库或主设备。
Buildmaster -m ...仅重建master数据库
Buildmaster ...重建主设备
D、已单用户模式启动SQL Server( Master-Recover )
Startserver -f RUN_服务器名 -m
E、若master数据库用alter database 命令扩展过,严格重建它在sysusages中的分配。
F、若Backup Server 的网络名(接口文件中的名字)不是SYB_BACKUP,在sysservers中改动网络名。
Update sysservers set srvnetname="PRODUCTION_BSRV" where srvname="SYB_BACKUP"
G、使用showserver查看,检查确保Backup Server正运行,若有必要,重启Bakup Server
H、装载master的备份。
Load database master from 'master.bak'
Load database执行成功后,SQL Server 自动关闭。
I、若自master的上次转储以来增加过数据库设备,执行disk reinit命令以重建sysdevices。
J、若执行了disk reinit,或自上次转储以来使用过create database或alter database,执行disk refit 重建sysusages和sysdatabases表,执行完毕后SQL Server自动关闭。
K、检查一致性:比较sysusages和sysdatabases的备份和新的联机版本,对每个数据库执行dbcc checkalloc, 并检查每个数据库中重要的表;若发现错误重新执行disk reinit和disk refit。
L、若恢复了整个主设备,则恢复model数据库。
Cd $SYBASE/scripts
Setenv DSQUERY 服务器名
Isql -Usa -P口令 -S服务器名 M、重新装载所有受影响的用户数据库。
N、恢复服务器用户ID。
O、以多用户模式重新启动SQL Server。
(4)恢复model 数据库
Buildmaster -d/设备名 -x
(5)恢复sybsystemproces数据库
A、删除sybsystemproces数据库(若物理磁盘损坏,删除设备,使用Disk init 重建设备)
B、重建数据库
Create database sybsystemporces on 设备名=数据库大小
C、恢复数据库
Cd $SYBASE/scripts
Setenv DSQUERY 服务器名
Isql -Usa -P口令 -S服务器名 九、几个实用程序
1、bcp
以用户指定的形式将数据库表拷贝到操作系统文件中,或从操作系统文件中拷贝一个数据库表。提供了在数据库表和操作系统文件之间传递数据的一个方便、快速的方法。
bcp [[database-name.]owner.]table_name {in|out} datafile [各种开关]
其中,table_name是想要拷贝的数据库表名;{in/out}为拷贝方向,in表示从文件到数据库的拷贝,out表示从数据库到文件的拷贝;datafile是操作系统文件的全路径名。
常用的开关有:
-f formatfile----存有上次使用bcp处理同一表时得到的应答文件的全路径名,格式文件名的扩展名为.fmt。使用格式文件,省去了再重复回答前面的问题。
-U username----允许用户指定一个注册名。
-P password----允许用户指定当前的SQL Server口令。如果未使用-P选项,bcp将提示输入一个口令。
-S Server----允许用户指定与其相连的SQL Server的名字。
例:在客户端备份tele114数据库中code_1th表,按照code_1th.fmt的格式
c> bcp tele114..code_1th out code_1th.txt -杅code_1th.fmt 朥sa 朠
2、 isql
与SQL Server交互的SQL句法分析器。
isql [各种开关]
常用的开关有:
-U username----允许用户指定一个注册名。
-P password----允许用户指定当前的SQL Server的口令。
-S Server----允许用户指定与其连接的SQL Server的名称。
-i输入文件
-o输出文件
终止一条命令:go
清除查询缓冲:reset
调用编辑器:vi
执行一条操作系统命令:!!命令
退出isql:quit或exit
3、showserver
显示当前在本机上正在运行的SQL Server。
showserver
4、startserver
启动SQL Server。
startserver [各种开关]
常用的开关有:
-f runserverfile----指定一个运行服务器文件名,每次重启SQL Server时,以这个文件为参考。在我们的实际机器上,这个文件名为RUN_SYBASE或RUN_SYB_BACKUP。
-m ----以单用户的方式启动SQL Server。这个方式用于恢复master数据库。
5、syman
显示联机的库例程,系统过程及实用程序手册。
syman [keyword]
syman实用程序的联机文本文件存放在$SYBASE下的doc子目录中。
6、dbcc 数据库一致性检查
Dbcc 用来检查一个数据库的逻辑一致性和物理一致性。通常在下面的情况下使用dbcc:
x 常规数据库维护
x 确定当一个系统错误后可能损坏的范围
x 在备份数据库之前
x 怀疑数据库受到损坏。
dbcc有两个主要功能:可检查分配表结构(命令checkalloc、tablealloc和Indexalloc);可检查页链接和页级、行级上的数据指针。
只有表属主可以用checktable、fix-text和reindex选项执行dbcc命令。只有数据库属主可以使用checkdb、 checkalloc、checkcatalog、indexalloc和tablealloc选项。只有系统管理员可以使用dbrepair选项
dbcc命令的完整语法格式如下:
Dbcc
{checktable({表明|表标识}[,Skip_ncindex])|
Checkdb [(数据库名[,skip_ncindex])]|
Checkalloc [(数据库名[,fix|nofix])]|
Talbealloc ({表明|表标识}[,{full|optimized|fast|null}[,fix|nofix]]))|
Indexalloc ({表明|表标识},索引标识[,{full|optimized|fast|null}[,fix|nofix]]))|
Checkcatalog [(数据库名)]
Dbrepair (数据库名,dropdb)|
Reindex ({表明|表标识})|
fix_text({表明|表标识})}
十 、SQL客户端软件
1. DOS状态下SQL客户端软件
软件位于c:\sqlbin
运行步骤:
运行TCPIP协议程序tcp.bat
c:\nwclient\lsl /c:\nwclient\net.cfg
c:\nwclient\ne2000
c:\nwclient\tcpip
(2) ping 129.6.114.201 (服务器地址)
返回129.6.114.201 is alive 正常
返回No response from 129.6.114.201 为异常
(3)运行sybclenv.bat------------------ Sybase的DOS接口启动程序,内容如下:
set path=c:\sqlbin\binr;%path% -------------Sybase的DOS接口程序所在目录
set dsquery=129.6.114.201,4114--------------连接服务器IP地址和端口号
c:\sqlbin\binr\dbnovtcp
C:\sqlbin\binr\rmineti
dbping 129.6.114.201------------检查是否连通SYBASE服务器
连接成功出现“Successfully opened network connection"
(5) isql 朥sa 朠
1> sp_help
2> go
十一、附录
附录1:只有在master数据库中才能有的系统表
系统表名 表中的内容
Sysconfigures 一行记录了用户可设置的配置参数
Syscurconfigs 有关SQL Server当前正使用的配置参数情况
Sysdatabases 一行记录了SQL Server中的一个数据库
Sysdevices 一行记录了数据库的每一磁带转储设备,磁盘转储设备,数据库设备和磁盘分区
设备和磁盘分区
Syslocks 有关动态锁的情况
Syslogins 一行记录了每一有效的SQL Server的用户帐号
Sysmessages 一行记录了每一系统错误或警告
Sysprocesses 有关Server进程的情况
Sysremotelogins 一行记录了一个远程用户
Sysservers 一行记录了一个远程SQL Server

附录2:Sysusages 一行记录了分配给一个数据库的每一个磁盘分析

系统表名 表中的内容
Sysalternates 一行记录了SQL Server用户在当前数据库中的标识
syscoumns 一行记录了一个表或视图的每一列,一个存储过程的每一参数
syscomments 一行或多行记录了每一视图、规则、缺省值、触发器和存储过程
sysdepends 一行记录了由一个过程、视图或触发器所参照的每一过程,视图或表
Syskeys 一行记录了每一主码,外码或公用码
Syslogs
sysobjects 一行记录了每一表、视图、存储过程、日志、规则、缺省值、触发器和临时表(仅在tempdb中)
sysprocedures 一行记录了每一视图、规则、缺省、触发器和过程
syprotects 记录用户的权限信息
sysegments 一行记录了每一片段(命名的的磁盘分片汇集)
systypes 一行记录了每一由系统提供的和用户定义的数据类型
sysusers 一行记录了一个数据库的合法用户,或用户组

附录3: 由SQL Server提供的系统过程功能和执行权
过程名 功能 执行权限
sp_addalias 把数据库中的一个用户映象到另一个用户 数据库所有者
sp_addgroup 向数据库增加分组,在授权和撤权命令中分组被用作聚合名字 数据库所有者
sp_addlanguage 为服务器定义可替换语言,并把它增加到master,dbo,syslanguages中。 系统管理员
sp_addlogin 通过向master.dbo,syslogins中增加表项授权新的SQL Server用户 系统管理员
sp_addremotelogin 通过向master,bo,sysremotelogins增添表项授权新的远程服务器用户 系统管理员
sp_addsegment 在指定的数据库设备上创建一个段 数据库所有者系统管理员
sp_addserver 定义远程服务器,或定义本地服务器名字 数据库所有者系统管理员
sp_addtype 创建用户定义的数据类型 Public
sp_addumpdervce 向SQL Server增加转储设备 系统管理员
sp_adduser 向当前数据库添加新的用户 数据库所有者
sp_bindefault 为一列或用户下义的数据类型定义缺省值 目标(对象)所有者
sp_bindrule 向一列或用户定义的数据类型赋一规则 目标汽有者
sp_changedbowner 改变数据库的所有者 数据库所有者
sp_changegroup 改变用户所属的分组 数据库所有者
sp_checknames 检查当前数据库在7位ASCII码集之外的字符的名字 public
sp_commonkey 在两个表或视图之间定义一公共键--经常被连接的列 两表(或视图)的所有者
sp_configure 显示或改变配置变量 没有参数或只有第一个参数的执行权属于public,否则属于系统管理员
sp_dboption 显示或改变数据库选项 不带参数属于public,带参数时属于数据库所有者
sp_defaultdb 改变一用户的缺省数据库 系统管理员(但每个用户都可以改变他自己的缺省语言)
sp_depends 显示数据库目标相关性的信息 public
sp_diskdefault 设备数据库设备的状态为defaulton或defaultoff(表明一数据设备是否能用于数据库的岂省存储) 系统管理员
sp_dropalias 删除用sp_addalias建立的用户名别名标识 数据库所有者
sp_dropdevice 删除一SQL Server数据库设备或转储设备 系统管理员
sp_dropgroup 从数据库中删除一分组 数据库所有者
sp_droplanguage 从服务器中删除可替换语言,并从master.dbo.syslanguages中删掉相应的行 系统管理员
sp_droplogin 通过删掉用户在master,dbo,syslogins中的表项删除SQL Server用户 系统管理员
sp_dropremotelogin 删除远程用户注册 系统管理员
sp_dropsegment 从数据库中删除一个段或从特定数据库设备上卸掉一个段的映象 数据库所有者
sp_dropserver 删除远程服务器 系统管理员
sp_droptype 删除用户定义的数据类型 数据库所有者数据类型所有者
sp_dropuser 从当前是数据库中删除一用户 数据库属主
sp_extendsegment 把段的区域扩充到另一个数据库设备或在当前数据库设备上进行扩充 数据库属主
sp_foreignkey 在当前数据库的表或视图上定义一外部键 表的属主
sp_help 报告目标或SQL Server提供的或用户定义的数据库类型的信息 public
sp_helpdb 报告--指定数据库或所有数据库的信息 public
sp_helpdevice 报告--指定设备或所有SQL Server数据库设备转储设备的信息 public
sp_helpgroup 报告--特定组或当前数据库的所有组的信息 public
sp_helpinde 报告--表中的索引信息 public
sp_helpjoins 列出可连接两个表或视图的列 public
sp_helpkey 报告某个特定表或视图的一主键,外部键或公共键或者当前数据库中所有键的信息 public
sp_helplanguage 报告一特替换语言或所有语言的信息 public
sp_helplog 报告包括日志第一页的设备名 public
sp_helpremotelogin 报告一特定远程服务器或所有远程服务器的注册信息 public
sp_helprotect 报告一数据库对象或用户权限,且由用户选择对象 public
sp_helpsegment 报告当前数据库中一特定段或所有段的信息 public
sp_helpserver 报告一特定远程服务器或所有远程服务器的信息 public
sp_helpsort 显示SQL Server的缺省排列顺序以及字符集 public
sp_helptext 打印一系统过程、触发器、视图、缺省或规则的定义文本 public
sp_helpuser 报告当前数据库中一个用户或所有用户的信息 public
sp_lock 报告当前上锁的进程的信息 public
sp_logdevice 将系统表syslogs(其中包括事务日志)放在一个分设的数据库设备中 数据库属主
sp_monitor 显示SQL Server的统计数字 系统管理员
sp_password 增加或改变SQL Server注册的口令 对自己的口令,权限属于public,系统管理员有权修改所有用户口令
sp_placeobject 为一特定中某个表或索引放置将来的空间分配 表属主,数据库属主系统管理员
sp_primarykey 定义一表或视图上的主键(主码) 表的所有者
sp_recompile 使生个使用被指定表的存储过程、触发器在下次运行时重新编译 public
sp_remoteoption 显示或改变远程注册选项 显示选项时属 public改变选项时属系统管理员
sp_rename 改变当前数据库中一用户建立目标的名称 特定目标,权限属目标属主对数据库所有对象,权限属数据库所有者
sp_renamedb 改变数据库名 系统管理员
sp_serveroption 显示或改变服务器选项 显示选项,权限,权限属 public改变选项,权限属系统管理员
sp_setlangalian 分配或改变一替换语言的别名 系统管理员
sp_spaceused 显示行数、数据页数以及当前数据库中由某个目标或所有目标所占用的空间 public
sp_unbindefault 从一列或用户定义的数据类型中解除一规则 目标属主(所有者)
sp_who 报告特定用户或SQL Server所有当前用户和进程的信息 public

附录4:常用SQL命令 表4
1.load isql -Usa -P --进入ISQL环境
quit ----退出ISQL环境
2.shutdown (server_name) --关闭SYBASE服务器
ex. shutdown SYB_BACKUP
3.use (database_name) --打开数据库
ex. use tele114
4.set rowcount (number) -- 设置显示记录条数
ex. set rowcount 10 (为0则取消设置)
5.select (select_list) from (table_name) where (search_conditions)
--查看符合要求的内容
ex. select max(UnitNo1) from code_1th
6.update (table_name) set (column_name1)=(value1),column_name2)=value2)
where (search_conditions) --重新赋值
ex.update code_1th set Password='12345',
RevCode1=substring(RevCode1,1,datalength(rtrim(RevCode1))-1)
where substring(Code1,1,1)='v' and substring(Code1,2,1)!=' '
7.select (select_list) into (table_name1) from (table_name2)
where (search_conditions)
--将符合要求的table_name2中的内容存在table_name1中
ex.select * into sample from code_1th where substring(Code1,1, 1)='V'
8.truncate table (table_name) --删去表
ex.truncate table sample
delete (table_name) where (search_conditions) -- 删去表的一部分
ex. delete example where County='5'
9.sp_addumpdevice 'disk',(logicalname),(physicalname) --定义转储设备
ex.sp_addumpdevice 'disk','nbdump_1','vol1:\nbdump\nbdump.dat'
10.sp_dropdevice (device_name) --删去转储设备
ex.sp_dropdevice nbdump_1
11.dump tran (database_name) with truncate_only --删去日志
ex.dump tran tele114 with truncate_only
12.sp_configure (config_name),(config_value) --更改设置值
ex.sp_configure 'allow updates',1
13.reconfigure with override --使更改设置值有效
14.sp_who --使用数据库用户列表
15.kill (spid) --删去无效的数据库用户
ex.kill 9 --删去spid为9的数据库用户
16.sp_helpindex (tabel_name) --查看索引情况
ex. sp_helpindex code_2th
17.sp_helpdb (database_name) --查看数据库占用空间情况
ex. sp_helpdb tele114
附录5:SYBASE实用安装、
Sybase 10.0.1 For SCO UNIX3.0.x的安装
(一)安装前准备
1. SCO UNIX需两张补丁盘
a. UOD381异步I/O盘一张
b. aet382网络盘一张
重启UNIX后进入维护模式,用custom命令装入此两张补丁盘
2. 在UNIX系统中增加sybase用户
3. 在工作站上通过TCP/IP将SYB_SCO拷入 /usr/sybase中在工作站上运行
LSL
NE2000
TCPIP
FTP 129.18.114.99 (129.18.114.99为服务器的网络地址)
用sybase用户登录
bi
put SYB_SCO (SYB_SCO在C盘当前目录中)
4. 用cpio 展开安装程序
以root登录
cd/usr/sybase
Cpio 杋dvC 5. 配置UNIX内核
a. 以root登录
b. 设置环境变量,用vi 编辑 /.profile加入以下两行
SYBASE=/usr/sybase
export sybase
c. 用vi编辑/etc/conf/cf.d/mtune
修改参数为
NSTREAM 700
NAIOHBUF 400
d. cd/usr/sybase/install
sh sco_kernal sybase
重新 relink 后reboot
(二)安装
1)以sybase 登录
2)cd/usr/syabsw/install
3)sybinit
4)选3
SYBINIT
1. Rrlease Directory: /sur/u/sybasw-100
2. Edit /View interfaces File
3. Configure a server product
4. Configure an Open Coient/Server Product
5. Configure a Front End Product
5)选1
CONFIGURE SERVER PRODUCTS
1. Configure a mew SQL Server
2. Configure an existing SQL Server
3. Upgrad an existing SQL Server
7)ADD NEW SQL SERVER
1. SQL Server name: lyg114
a. 选1,输入服务器名如:lyg114
b. 按Ctrl-a
8)SQL SERVER VONFIGURATION
1. CONFIGURE SERVER'S INTERFACES FILE ENTRY Incomplete
2. MASTER DEVICE CONFIGURATION Incomplete
3. SYBSYSTEMPROCS DATABASE CONFIGURATION Incomplete
4. SET ERRORLOG LOCATION Incomplete
5. CONFIGURE DEFAULT BACKUP SERVER Incomplete
6. CONFIGURE LANGUAGES Incomplete
7. CONFIGURE CHARACTER SETS Incomplete
8. CONFIGURE SORT ORDER Incomplete
9. ACTIVATE VUDITING Incomplete
分别选1,2,3,---9配置参数,使各项Incmplete----->complete
参数配置如下:(例)
a. SERVER INTERFACES FILE ENTERY SCREEN
Server name : lyg114
1. Retry Count: 10
2. Retry Delay: 10
Listener services available:
Protocol Address Port Name Alias
rcp scosysv 4114
注意:Port=4114,此参数为1024--65535为间的4个或5个数字
Address=scosysv,此参数为UNIX服务器主机名
b. MASTER DRVICE CONFIGURATION
1. Master Device: /usr /sybase/madter.bay
2. size (Meg) : 30
c. SYBSYSTEMPROCS DATABASE CONFIGURATION
1.sybsytemprocs database size (Meg) : 10
2. sybsystemprocs logical device name: sysprocsdev
3. create new device for the sybsystemprocs database : yes
4. physical name of new device: /usr /sybase/sybtemp.dat
5. size of the new device (Meg) : 10
d. SET ERRORLOG LOCATION
1. SQL Server errorlog: /usr/sybase/errorlog
e. SET THE SQL ERVER'S BACKUP SERVER
1.SQL Server backup Server mname: SYB-BACKUP
注意:此备份服务器名一定要与后面配置的备份服务器名一致
f. SONFIGURE LANGUAGES
选 1. us-english
g.CONFIGURE CHARACTER SETS
选 1. SACII, fro use with unsp 及4.ISO 8859-1 (latin-1)-w (4.为缺省)
h. CONFIGURE SORT ORDER
选 1. Binary ordering ,for the ISO 8859/1 or Latin-1 Charact
i. ACTIVATE AVDITING
1. Install auiting: yes
2. sybsecurity database size (Meg): 5
3. sybsecuyty logical device name : sybsecurity
4. dreate new device for the sybsecurity database : yes
5. sybsecurity physical device name : /usr/sybase/sybsecur.dat
6. size of the new device (Meg): 5
9) 参数配置完后,按Crtl-a
Execute the SQL Server Configuraion now? y
10)看到下面的信息表示SQL Server 安装成功
Configrration completed successfully.
rpess to continue.(回车)
11) 按Ctrl-x 退出安装程序
12) 要$提示符下运行
startserver-fRUN-lyg114 启动SQL Server
13) 要$提示符下运行
isql-Usa -P- Slyg114
屏幕出现:1>
安装完毕
Sybase 11.0.2 For SCO UNIX 5.02C的安装
(一)首先建立sybase组,组号可设为100;再建立sybase用户,然后修改/usr/sybase/.profile文件,加入一句:SYBASE=“/usr/sybase”;export SYBASE。
(二)调整系统核心参数
a. 共享内存:
# cd /etc/conf/cf.d
# ./configure选16,shared data
SHMMAX,输入新值,如83886080(越大越好,系统启动后省下的全部内存)
退出。
b. 激活异步I/O:
# cd /etc/conf/sdevice.d;进入此目录
# Vi aio将“N”改为“Y”;编辑aio文件
# Vi suds将“N”改为“Y”;编辑suds文件
# Vi /etc/rc2 在最后加入下面一行:
/etc/suds_ctrl -a
c. 重建内核:
# /etc/conf/cf.d/link_unix
d. 重新启动openserver
(三)安装sybase
a. 以sybase登录:
$ ./sybload -D
依输入y 、l,
然后执行”./sybimage“
b. 依提示输入序列号,解完包后:
Vi /usr/sybase/locales/locales.dat
在[SCO]中,加入:
C_C.C.,us-English,ico_1
然后进入Install,配置SYBASE服务器。
※SYBASE 11.0.2 For SCO UNIX 5.0.2安装补充说明
目前SCO UNIX 5.0有多种版本,针对5.0.2,SYBASE 11.0.2的安装需安装Kernel Patch:
a. OSS437a-streams lock timeout and protocal Data
b. OSS441a-SUDS aio supplement
c. OSS446a-tape drive unload for nonrewinding devices
在SCO UNIX 5.0.4C上不需安装补丁盘