SAP ASE数据库管理
数据库设备存储组成数据库的对象。术语设备不一定是指一个确切的物理设备:它可以指磁盘上的任何一块区域(例如一个磁盘分区),也可以指文件系统中用来存储数据库及其对象的一个文件。
每个数据库设备或文件在用于数据库存储之前,必须已准备好而且能够被 Adaptive Server 识别。这一过程称为初始化。
数据库设备初始化后就可以用来:
• 分配给用于 create 和 alter database 命令的设备缺省池
• 指派到用户数据库可用空间的缓冲池
• 指派到用户数据库并用于存储一个或多个数据库对象
• 指派用于存储数据库的事务日志
系统管理员使用 disk init 命令初始化新数据库设备,该命令:
• 将指定的物理磁盘设备或操作系统文件映射到数据库设备名
• 在 master..sysdevices 中列出新设备
• 为数据库存储准备设备
语法结构:
disk init name='逻辑名',physname='物理路径',size='设备大小'
示例
· 文件系统disk init 示例: 创建名为'user_disk'的设备,大小20M,路径/data/user_disk.dat(前提:/data目录具备sybase数据库用户读写权限)
disk init name='user_disk',physname='/data/user_disk.dat',size='20M'
· 裸设备disk init 示例: 创建名为'user_disk'的设备,大小20M,使用裸设备/dev/raw/raw1(前提:该裸设备已设置sybase数据库用户读写权限)
disk init name='user_disk',physname='/dev/raw/raw1',size='20M'
· 内存disk init 示例: 在命名缓存imdb_cache上创建20M的内存设备imdb_dev(前提:imdb_cache缓存已创建)
disk init name='imdb_dev',physname='imdb_cache',size='20M'
使用系统存储过程sp_helpdevice查看已初始化完成的数据库设备
登录数据库 isql -Usa -Pdbask.cn -Stest
sp_helpdevice --查看全部设备
go
数据库环境信息:
sp_helpdevice user_disk --查看指定设备
go
语法结构:
create database 数据库名 on 数据设备名='大小' log on 日志设备名='大小'
· 步骤1:初始化设备
disk init name='user_disk',physname='/data/user_disk.dat',size='200M'
go
disk init name='user_disk_log',physname='/data/user_disk_log.dat',size='50M'
go
· 步骤2:创建数据库
create database userdb on user_disk='200M' log on user_disk_log='50M'
go
使用sp_helpdb 查看已创建数据库信息,日常运维重点关注剩余数据空间(free_kbytes)和剩余日志空间(log only free kbytes)
free_kbytes之和,除1024,即为数据剩余空间(单位Mb);一般建议空间内剩余比(剩余值/数据设备总大小)小于20%,及时增加数据设备空间
log only free kbytes的值,除1024,即为日志剩余空间(单位Mb);一般建议日志剩余比(剩余空间/日志总空间大小)小于50%,及时增量备份数据库,或增加日志设备空间
· sp_helpdb --查看全部数据库信息
sp_helpdb
go
· sp_helpdb 数据库名 --查看指定数据库信息
sp_helpdb userdb
go
语法结构:
alter database 数据库名 on 数据设备名='大小'
· 步骤1:初始化设备
disk init name='user_disk1',physname='/data/user_disk1.dat',size='100M'
go
· 步骤2:把数据设备user_disk1分配给数据库userdb
alter database userdb on user_disk1='100M'
go
语法结构:
alter database 数据库名 log on 日志设备名='大小'
· 步骤1:初始化设备
disk init name='user_disk_log1',physname='/data/user_disk_log1.dat',size='50M'
go
· 步骤2:把日志设备user_disk_log1分配给数据库userdb
alter database userdb log on user_disk_log1='50M'
go
tempdb为混合型数据库(mixed log and data),一般不需要单独扩数据或日志设备
语法结构:
alter database tempdb on 日志设备名='大小'
· 步骤1:初始化设备
disk init name='tempdb1',physname='/data/tempdb1.dat',size='50M'
go
· 步骤2:把新设备tempdb1分配给数据库tempdb
alter database tempdb tempdb1='50M'
go
sp_dboption过程修改数据库选项,选项值true或false
语法结构:
sp_dboption 数据库名,'选项',值
可用选项:
· abort tran on log full · allow nulls by default · allow wide dol rows · async log service · auto identity · dbo use only · ddl in tran · delayed commit · enforce dump tran sequence · full logging for all · full logging for alter table · full logging for reorg rebuild · full logging for select into · identity in nonunique index · no chkpt on recovery · no free space acctg · read only · select into/bulkcopy/pllsort · single user · trunc log on chkpt · trunc. log on chkpt. · unique auto_identity index
常用选项
· ddl in tran,ddl命令写入事务,一般开启复制(sap rs)会打开此选项 · select into/bulkcopy/pllsort,主要用于数据批处理;建议打开 · single user,单用户模式,维护数据库时防止其他用户访问该数据库 · trunc log on chkpt,截断日志;生产环境不建议开启
示例:设置userdb数据库单用户模式
sp_dboption userdb,'single',true go
示例:关闭userdb数据库单用户模式
sp_dboption userdb,'single',false go
· 数据库日志
默认路径:数据库安装目录/ASE-1*/install/服务名.log;可通过showserver确认数据库日志路径(-e参数对应的路径)
· 错误消息
Adaptive Server 遇到问题时将会显示包括以下内容的错误消息:
- 唯一标识错误消息的消息号
- 指示问题的类型和严重程度的严重级号(介于 10 和 24 之间)
- 错误状态号,用于唯一标识引发错误的 Adaptive Server 代码行
- 错误消息,告知问题是什么,并可能建议如何解决问题
一个查询可能有多条错误消息。如果批处理或查询中有多个错误,Adaptive Server 通常只报告第一个错误。您下次执行该批处理或查询时,将报告后续错误。
示例:如果尝试访问不存在的表,您将看到:
select * from publisher
Msg 208, Level 16, State 1: publisher not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output).
· 错误消息和消息号
消息号 (error) 和语言 ID (langid) 的组合唯一地标识每条错误消息。消息号相同但语言 ID 不同的消息表示翻译。
select error, description, langid from sysmessages where error = 101
error description langid ------ ---------------------------------- -------- 101 Line %d: SQL syntax error. NULL 101 Ligne %1!: erreur de syntaxe SQL. 1 101 Zeile %1!: SQL Syntaxfehler. 2 (3 rows affected)
错误消息文本描述问题。该描述通常包括行号、对某类数据库对象(表、列、存储过程等等)的引用或特定数据库对象的名称。
在 sysmessages 的 description 字段中,后面跟一个字符或字符串的百分比符号 (%) 是各种数据的占位符。Adaptive Server 遇到问题并生成错误消息时,会提供这些数据。“%d”是数字占位符;“%S_MSG”是数 据库对象类型的占位符;“%.*s”(引号中的所有内容)是特定数据库对象的名称的占位符。
· 错误消息的严重级别
消息的严重级指示有关 Adaptive Server 遇到的问题的类型及严重性。为了获得最大限度的完整性,Adaptive Server 应答错误情况时,显示来自 sysmessages 的消息,但根据内部表采取措施。某些对应的消息在严重级上会有所差异,因此,如果您在开发引用 Adaptive Server 消息和严重级的应用程序或过程,将会偶尔发现不同于预期的行为。
- 级别 10:状态信息.严重级 10 的消息根本不是错误。执行某些命令后,这些消息能提供附加信息,并且通常不显示消息号或严重级。例如,在 create database 命令 之后,Adaptive Server 将显示一条消息,告知用户已将请求的多少空间分配给了新数据库。
- 级别 11:未找到指定的数据库对象.之所以发生这种情况,原因通常是用户在键入数据库对象名称时出错、用户未指定对象所有者的名字,或对哪个数据库是当前数据库产生了混 淆。检查对象名称的拼写,如果用户或“dbo”不是对象的所有者,请使用所有者的名称,并确保正在使用正确的数据库
- 级别 12:遇到错误的数据类型.严重级 12 的消息表示数据类型问题。例如,用户可能试图在列中输入为错误数据类型的值,或者比较数据类型不同并且不兼容的列。为了解决比较引起的问题,应在 select 中使用 convert 函数。
- 级别 13:用户事务语法错误.严重级为 13 的消息表示当前用户定义的事务中有错误。例如,用户可能在尚未发出 begin transaction 时发出了 commit transaction 命令,或者可 能已尝试将事务回退到未定义的保存点(有时保存点名称中可能有键入或拼写错误)。严重级 13 还可能表示出现死锁,在这种情况下,将回退死锁牺牲品的进程。用户必须重新启动其命令。
- 级别 14:权限不足,无法执行命令.严重级为 14 的消息表示用户没有执行命令或访问数据库对象的必要权限。他们可以要求数据库对象所有者、数据库所有者或系统管理员为其授予使用上述命令或对象的权限。
- 级别 15:SQL 语句中的语法错误.严重级 15 的消息表明用户命令的语法有错。这些错误消息文本包括发生错误的行号以及离出错位置最近的特定词。
- 级别 16:杂类用户错误.大多数严重级 16 的错误消息表明用户犯了非致命错误,而该错误无法归入其它错误种类。严重级 16 或更高的严重级还可能指出软件错误或硬件错误。
- 级别 17:资源不足.严重级为 17 的错误消息表示命令已导致 Adaptive Server 用尽资源或超出了由系统管理员设置的某个限制。用户可以继续执行其工作,但可能无法执行某条特定命令。 这些系统限制包括可同时打开的数据库数以及允许与 Adaptive Server 建立的连接数。这些限制存储在系统表中,并可以使用 sp_configure 进行检查。
- 级别 18:检测到非致命内部错误.严重级为 18 的错误消息表示内部软件错误。由于生成这种消息的问题不会打断用户的工作,因此用户倾向于不报告这些问题。但是,应指示用户每次遇到此严重级(或更高严重级)的错误消息时,都要通知系统管理员,以便系统管理员能够报告这些错误。
- 级别 19:严重级为 19 的错误消息表示已超出一些不可配置的内部限制,且Adaptive Server 无法正常恢复。必须重新连接到 Adaptive Server。
- 级别 20:当前进程中的 Adaptive Server 致命错误。严重级为 20 的错误消息表明 Adaptive Server 在命令中遇到错误。该问题只影响了当前进程,数据库不太可能已损坏。请运行 dbcc 诊断程序。用户必须重新连接到 Adaptive Server。
- 级别 21:数据库进程中的 Adaptive Server 致命错误。严重级为 21 的错误消息表明遇到了影响当前数据库中的所有进程的错误。然而,数据库本身不太可能已被损坏。请重新启动 Adaptive Server 并运行 dbcc 诊断。用户必须重新连接到 Adaptive Server。
- 级别 22::Adaptive Server 致命错误:表完整性可疑。严重级为 22 的错误消息表明消息中指定的表或索引以前已被软件问题或硬件问题损坏。
- 级别 23::致命错误:数据库完整性可疑。由于软件问题或硬件问题引起数据库早期的损坏,使整个数据库的完整性可疑。
- 级别 24:硬件错误或系统表损坏。严重级为 24 的错误消息反映介质故障或(在极少情况下)sysusages 损坏。系统管理员可能必须重新装载数据库。可能需要与硬件供应商联系。
- 级别 25:Adaptive Server 内部错误。用户不会看到级别 25 错误;这一级别仅用于 Adaptive Server 内部错误。
- 级别 26::规则错误。严重级为 26 的错误消息反映内部锁定或同步规则已破坏。必须关闭并重新启动 Adaptive Server。
如同 Adaptive Server 一样,Backup Server 会在错误日志不存在的情况下创建一个错误日志。在启动时,使用 runserver 文件或命令行中的error_log_file 参数指定错误日志的位置。如果在安装过程中未选择替代 位置,则 Sybase 安装程序将使用 $SYBASE/install 作为错误日志的位置来配置 runserver 文件。如果在 runserver 文件或命令行中没有指定位置,错误日志的位置就是启动 Backup Server 的目录。
· 错误类型
- 系统错误
- Open Server 事件错误
- Backup Server 远程过程调用错误
- I/O 服务层错误
- 网络数据传输错误
- 卷处理错误
- 选项分析错误
系统管理员可以使用以下命令关闭
Adaptive Server 或 Backup Server: shutdown [backup_server_name] [with {wait|nowait}] shutdown 命令的缺省选项是 with wait。这就是说,shutdown 和 shutdown with wait 的作用完全相同。
· 关闭 Adaptive Server
如果不给出服务器名称,shutdown 将关闭正在使用的 Adaptive Server。发出 shutdown 命令后,Adaptive Server 将执行以下任务:
1 禁止登录(系统管理员除外)
2 在每个数据库中执行检查点操作,并将已更改的页从内存刷新到磁盘
3 等待结束当前正在执行的 SQL 语句或过程
这样,shutdown 就可以将重新启动 Adaptive Server 时自动恢复功能必须完成的工作量降到最少。
with nowait 选项将立即关闭 Adaptive Server。用户过程被中止,并且在执行 shutdown with nowait 后恢复可能耗时较长。在发出 shutdown with nowait 命令之前发出 checkpoint 命令可最大限度地缩短恢复时间。
· 关闭 Backup Server
若要关闭 Backup Server,请包括 Backup Server 名称:
shutdown SYB_BACKUP
缺省值为 with wait,因此,任何正在进行的转储和装载将在 Backup Server 进程停止之前完成。发出 shutdown 命令后,将不能在 Backup Server 上启动任何新的转储会话和装载会话。
若要查看 Adaptive Server 可以访问的 Backup Server 的名称,请执行 sp_helpserver。请使用 shutdown 命令中 name 列的值。可以关闭 Backup Server,只要 Backup Server:
- 在 Adaptive Server 上的 sysservers 中列出,并且
- 在本地 interfaces 文件中列出
使用 sp_addserver 将 Backup Server 添加到 sysservers 中
cd ASE-1*/install
startserver -f RUN_数据库服务名 -f RUN_备份服务名
建议定期备份数据库;一般建议每周或每天一次全备,每天1-n次增量备份
同时建议备份master库
数据库增删设备、增删登录用户后,及时备份master库
· 全备基本语法
dump database 数据库名 to '路径/备份文件名'
· 增备基本语法
dump tran 数据库名 to '路径/备份文件名'
示例:备份master库
dump database master to '/backup/master_20xx0101.dump'
go
示例:增量备份userdb库(如打开日志截断选项,则无法增量备份数据库,请执行全备 dump database userdb to ...)
dump tran userdb to '/backup/user_tran_20xx0101.dump'
go