快速深入地掌握和管理数据库系统-第九章

 
2009-01-13 来源:chinaunix.net
 

第九章 数据库系统的日常维护

数据库管理员负责数据库系统的管理、维护工作,保证系统稳定运行、数据安全、可靠,是他的职责。在系统的日常维护工作中,管理员需要不间断地检查、跟踪系统的运行状况,监控系统的运行性能,及时发现并解决各种异常故障,让系统始终处于良好的运行状态。

本章介绍了数据库管理员的工作职责,并就数据库系统的日常管理工作进行了讲解。然后针对常用数据库系统,就管理员的日常操作进行了介绍。

9.1 数据库管理员的职责

使用数据库系统的一个主要原因,就是可以对数据和访问这些数据的程序进行集中控制。一般来说,这些工作主要由数据库管理员来完成。因而他对数据库系统拥有绝对控制权,能够执行任何操作,能够看到任何用户数据。

随着人们对系统安全认识的加深,许多人认为应当限制数据库管理员的权限。基于用户对安全的要求,一些数据库系统已经引入了另外一些管理员角色,如:数据库安全员、数据库审计员。将数据库管理员的安全管理权限交由数据库安全员来管理,由他负责用户帐号的分组,用户权限的授予和回收等;同时,增加数据库系统的审计功能,由数据库审计员负责审计系统的运行,审查用户的操作等。

尽管这种三权分立的数据库系统安全管理体制,增强了系统安全,但同时也要求企业为系统管理配置更多的管理人员,从而提高了系统运行成本。对一些企业,特别是对中、小企业来说,很难做到这一点。

我们这里仍旧假定数据库管理员负责整个的系统管理工作,其工作职责大体上可以划分为:数据库系统的部署和数据库系统的日常维护。

1. 数据库系统的部署

数据库系统的部署,就是根据应用系统要求,进行整个数据库系统的安装和配置,建立适合用户自身需要的系统运行环境,大体上包括以下的工作内容:

(1)规划磁盘空间的使用,设计系统存储方案,并制定未来的存储需求计划。按照规划,为用户数据分配存储空间。

(2)规划数据库的安装和配置,在此基础上,安装和配置数据库系统,根据需要给系统打补丁。

(3)根据应用程序要求,创建数据库存储结构,建立表、视图、存储过程等数据库对象,然后根据需要导入相关数据。

(4)创建数据库用户,为他们授予必要的访问权限。规划并建立系统的安全控制和监控机制。

(5)制定切实可行、满足需要的数据库备份计划,在灾难出现时对数据库系统进行恢复处理。

2. 数据库系统的日常维护

数据库系统的日常维护,就是在数据库系统的日常运行过程中,及时跟踪和检查数据库系统的运行状态,保证数据库的正常运行,主要包括以下的工作内容:

(1)定期、定时检查数据库系统的运行状态,及时发现、排除系统中存在的各种故障及隐患。

(2)监控数据库的磁盘空间使用,及时进行空间的扩充,保证系统不会由于磁盘空间不足而挂起。

(3)监控、跟踪系统的运行性能。通过调整配置参数,影响系统对CPU、内存等资源的使用;调整数据的磁盘存储,提高系统的I/O处理,从而达到优化整个系统运行性能的目的。

(4)创建新用户并根据需要授权,使用系统审计功能,及时发现授权不当或者没有授权的用户访问。

(5)在系统的正常运行过程中,根据开发人员和用户的反馈信息,必要时修改数据库的结构。

(6)根据数据库备份计划,执行数据库备份。一旦数据库遭到破坏,进行恢复处理。维护外部存储上的数据库备份和日志归档数据,以保证恢复处理能够正常进行。

9.2 操作系统的维护

数据库系统和操作系统密切相关。操作系统的任何硬件、软件失败,都将影响数据库系统的正常运行;而发生在数据库系统中的处理故障,也会在操作系统中有所体现。因此,保证操作系统的正常运行,是数据库系统正常运行的前提。要解决数据库故障,首先从操作系统入手,也是比较好的选择。

不同的操作系统有不同的维护方法,这不是本书要讲述的内容。大体上来说,对操作系统的维护可以从以下几个方面入手:

(1)观察计算机各部件指示灯,检查控制面板信息,发现系统中存在的硬件故障。

(2)使用操作系统命令,检查系统错误日志、管理员邮箱等,发现系统中存在的硬件、软件错误。

(3)使用操作系统命令,检查各硬件设备、网络等的运行状况,发现处于异常状态的设备。

(4)使用操作系统命令,检查CPU、内存、磁盘、网络等系统资源的使用情况,发现系统存在的运行瓶颈。

一般来说,数据库管理员也需要维护操作系统。如果操作系统由专门的人员负责,在解决数据库问题时,一定要取得系统管理员的协助。

9.3 数据库系统的日常维护

数据库系统部署一般是一次性的工作,在部署完成后就进入系统的日常维护,而系统日常维护是数据库管理员每时每刻都要关注的工作。基于这方面的考虑,本章将重点介绍管理员在系统日常维护过程中需要执行的操作。

9.3.1 系统的启动和关闭

数据库系统的启动和关闭,是管理员经常要执行的工作。不同的系统,其启动和关闭的过程、方式也各不相同。

数据库系统要能够正常启动,不允许操作系统中已经存在和数据库系统有关的进程和内存段。有时候,尽管数据库系统已经被停止,但操作系统中仍旧存在一些和数据库系统有关的进程、内存段,没有被终止和删除。在数据库系统被再次使用之前,一定要把这些死进程、内存段移走。

下面介绍的删除死进程、内存段的方法和过程,适用于UNIX平台中所有的数据库系统。

(1)删除和数据库系统有关的死进程

显示实例的死进程:

$ ps –ef | grep {user_name}

删除死进程。根据进程的ID号,一一进行删除:

$ kill –9 {process_id}

如果存在许多个死进程,为了节省时间,可以使用以下方法:

$ ps –ef | grep {user_name} | awk ‘{print “kill –9 “$2}’ > /tmp/kpid

$ chmod +x /tmp/kpid

$ /tmp/kpid

验证所有的死进程全部被移走,否则就重新执行以上步骤。

$ ps –ef | grep {user_name}

(2)删除不再使用的进程间通讯段

列出所有共享内存段:

$ ipcs –am | grep {user_name}

根据共享内存段的ID号,进行删除:

$ ipcrm –m {shared_memory_id}

列出所有旗语(semaphore)段:

$ ipcs –as | grep {user_name}

根据旗语段的ID号,进行删除:

$ ipcrm –s { semaphore_id}

列出所有消息队列(message queue)段:

$ ipcs –aq | grep {user_name}

根据消息队列段的ID号,进行删除:

$ ipcrm –q {message_queue_id}

验证所有的进程间通讯段全部被移走,否则就重新执行以上步骤。

$ ipcs –a | grep {user_name}

9.3.2 系统运行日志文件的检查

数据库系统从开始启动,就会将一些关键操作、系统和事务故障以及它们的操作时间、操作过程、错误描述等详细信息记录下来,保存在系统的运行日志文件中。管理员通过对这些信息的分析,可以发现系统中存在的各种问题:

(1)关键操作。所谓关键操作,是指实例的启动和关闭、数据库的备份和恢复、数据字典的更改、检查点操作的执行、锁的升级等。对这些信息的检查,可以发现系统的运行状况、潜在的运行瓶颈。对故障发生前关键操作的分析,有助于找出系统故障发生的原因。

(2)系统和事务故障。在数据库发生故障时,系统会记录故障时间、错误代码、可能的原因以及解决办法等。管理员可以依据这些信息,找出故障发生的原因和处理对策。同时系统会在故障发生时,保存内存中的数据映像到dump文件中,以帮助厂家实现进一步的故障分析。

对系统的运行日志文件,管理员应当每天至少查看一次,及时发现系统存在的问题。另外,由于数据库系统不会自动维护这些文件,随着时间的推移,这些文件的尺寸会越来越大,进而影响到系统的运行。管理员应当定期对这些文件进行备份,然后删除文件中的内容。

9.3.3 系统运行状况检查

保证系统的正常运行是数据库管理员的职责。在数据库系统的日常管理工作中,管理员通过对系统运行状况的不断监控,发现系统中已发生以及潜在的问题,及时采取应对措施,尽可能避免对业务处理的影响。

一般来说,管理员需要从以下几个方面,进行系统信息查看和运行状况检查:

(1)显示系统版本

(2)查看系统运行状态

(3)查看系统配置

(4)查看当前用户连接和状态

(5)查看表空间、数据文件的定义及空间使用

(6)查看数据库日志的定义和使用

(7)查看表、索引等数据库对象定义

9.3.4 数据库的安全维护

数据库系统采用以下手段,保证系统的安全运行:

(1)为需要访问系统的用户建立帐号,并进行授权。只有拥有系统帐号的用户,才能进入数据库,进行数据访问。对用户帐号的授权,以满足用户开展工作所需最低权限为原则,从而防止用户访问与自身工作无关的数据。

(2)使用系统审计功能,可以基于单个帐号的数据处理和访问,进行跟踪、记录;也可以基于某个表或者表中字段的更新处理,进行监控,从而找出系统中存在的安全隐患和非法访问。

数据库系统的安全控制在系统部署时就应当进行规划和配置。在系统运行过程中,管理员只需要按照事先的安全规划执行,在必要时可以对监控机制进行调整。

对有关数据库系统安全的管理和维护,本书将不作进一步的介绍。

9.3.5 系统性能状况分析

随着系统的运行,数据库中存放的数据量会越来越多,进而影响到系统的处理性能。管理员通过不断地跟踪、监控数据库系统,分析系统的运行瓶颈,找出影响性能的因素,从而可以采取措施,调整系统资源使用,达到提升系统性能的目的。

要调整数据库系统性能,可以从操作系统入手,使用操作系统命令,找出整个系统的性能问题;然后检查数据库系统的运行日志,直接收集数据库系统的运行数据,最终确定数据库系统的性能瓶颈。

系统的性能调整是一个反复的过程,不能指望通过一次调整就能满足性能要求,就不会再出现性能问题。时刻关注、监控系统性能,是管理员日常维护工作的一部分。有关数据库系统的调整过程,可以参看第1.4一节。

9.3.6 数据字典的维护

在系统运行过程中,管理员可能会根据需要,对数据字典进行维护。这些维护工作,可能包括以下这些:

(1)创建新的表、视图,更改现有表或者视图的结构。

(2)创建新的索引,更改现有索引结构。

(3)创建新用户,并进行授权,调整现有用户权限。

这些工作的实现,均是通过SQL语句来完成,所有的数据库系统都大体上相同,我们将不作进一步的介绍。

9.3.7 系统配置的改变

调整系统配置,是为了让系统更好地运行。在系统的日常维护过程中,管理员往往由于以下原因,需要调整系统配置:

(1)原有配置存在问题。管理员通过监控、分析,发现原有配置存在问题,不利于系统运行。对这些配置进行调整,让系统更好运行,是管理员的责任。

(2)更改系统的资源使用。管理员发现系统性能低下,主要是由于CPU、内存、锁等资源的使用存在限制。为了提高系统性能,管理员通过配置调整,使系统有更多可用资源。

(3)使用新的功能特性。应用系统增加了新的功能,使用到系统的其它特性;或者打开系统的这些特性,更有利于现有系统的平稳、快速运行。

9.3.8 数据库日志维护

日志是数据库系统的重要组成部分,可有两种使用模式:归档模式和非归档模式。管理员应根据自身需要,进行合理选择。

在非归档模式下,日志文件被循环使用,不需要管理员进行维护;在归档模式下,管理员需要对数据库日志进行归档。

9.3.9 备份和恢复处理

对数据库系统进行备份,除了备份数据库之外,还要备份实例运行环境(包括系统配置、操作系统设置等),以及用户创建数据库对象的SQL语句定义。有了这些信息,管理员可以在整个系统环境遭到破坏或者在其它操作平台上,重新创建系统的实例环境。在系统正常运行过程中,可以只在实例运行环境、用户数据库对象的结构发生改变之后,才对它们进行备份。

数据库的备份、恢复方式,和数据库使用的日志归档模式息息相关。为保证数据库的备份不存在问题,需要定期检查数据库,找出表空间、表、数据页、记录等在存储结构、数据内容上存在的不一致、不完整问题。一旦发现问题,就应当及时修复。对数据库的检查,其频度可以是一个月,也可以是半年,具体情况由管理员自己确定。

对数据库恢复,管理员应根据现有的备份和日志归档模式,结合故障的实际情况,选用合适的恢复手段。在下面第9.4一节对各具体数据库系统的讨论,我们只对常用的数据库恢复方式进行介绍。

9.3.10 数据库对象统计信息的维护

正确的统计信息,能够使优化器生成合理的执行计划。如果管理员发现应用系统的处理速度下降了,就首先要考虑重新生成系统中数据库对象的统计信息。至于对表、索引中的那些字段、字段的组合进行信息收集,需要根据应用系统的使用来确定。

数据库系统不会自动进行统计信息的收集。管理员应当根据数据的更新频度,一个月、两个月,甚至可以是半年,重新收集一下统计信息。在对数据库进行大批量的数据处理后,就应当立即进行统计信息的收集。

对统计信息的收集,不是越频繁越好。只要优化器能根据这些统计信息生成合理的执行计划即可。频繁的统计信息收集,要消耗系统资源,影响业务的处理。

有关统计信息收集的更多信息,可以参看第5.5一节。

9.3.11 数据的磁盘空间整理

如果执行了数据库对象的统计信息收集,并没有改变应用程序的性能,或者使用命令工具,发现表、索引中存在大量的空间碎片、行转移,就需要考虑重新组织表和索引,以提高系统的I/O处理速度。

对表和索引进行磁盘空间重组,可以使用以下方法:

(1)使用系统提供的磁盘空间重组工具,对表和索进行重组。

(2)使用导入、导出工具,首先导出表中数据后删除表,然后重新创建该表,随后导入数据,重新创建索引。

(3)创建新的表空间,将表、索引移动到新表空间中。系统在移动时,会自动进行数据空间的整合。

(4)如果只需要调整索引的磁盘空间存放,可以仅仅只删除索引,然后进行重建。

(5)如果要进行重组的表、索引个数比较多,可以使用导入和导出工具,将整个数据库中的数据导出,然后重建整个数据库,再导入数据。

9.3.12 历史数据维护

随着时间推移,数据库中的数据会越来越多。管理员需要定期将历史数据备份后移走,以释放磁盘空间,提高系统性能。这些历史数据,可能会根据需要再次被装入数据库。

有关历史数据的维护,可以参看第4.5和7.3两节中有关表和索引分区以及系统对长事务的处理。

9.3.13 数据的导入和导出

数据库系统都会提供数据的导入和导出工具。管理员利用这些工具,可以完成以下的工作:

(1)可以实现数据库的备份和恢复。其具体操作的有关注意事项,可以参看第8.5一节。

(2)进行表、索引等数据库对象的磁盘空间整理。

(3)将其它数据源中数据装入数据库,或者将数据库中现有数据导出供其它数据源使用。

9.4 常用数据库系统的日常维护

尽管常用数据库系统的操作方式存在着很大的差异,但管理员日常管理的工作内容大体上是一致的。下面我们将从系统的启动和关闭、系统运行日志文件的检查等几个方面,就常用数据库系统的日常管理进行介绍。

在开始之前我们首先进行一些说明。符号“$”后跟变量,表示系统的环境变量。在命令中使用符号“{}”包括的变量,用户在使用时要根据需要进行替代。对命令之前的符号:$、SQL>、1>和2>,指定了命令的运行环境:

$:表示在操作系统的命令行执行。

SQL>:表示在ORACLE系统的sqlplus工具中执行。

1>和2>:表示在SYBASE系统的isql工具中执行。

9.4.1 DB2数据库系统

1. 系统的启动和关闭

(1)系统的启动

启动数据库管理器:

$ db2start

启动管理服务器:

$ db2admin start

(2)系统的关闭

检查是否存在数据库的应用程序连接:

$ db2 list applications

如果存在,就强制断开。

$ db2 force application all

关闭数据库管理器:

$ db2stop

关闭管理服务器:

$ db2admin stop

2. 系统运行日志文件的检查

DB2系统有两个运行日志文件,确省存放在目录:sqllib/db2dump/下,需要每天检查、定期备份并手工清除其内容:

(1)通知日志文件(notification log file):{instance_name}.nfy

(2)诊断文件(diagnostic file):db2diag.log

另外,此目录下还会存在一些dump文件,是由于事务、系统错误而生成的内存映像,需要定期备份后删除。

3. 系统运行状况检查

管理员要随时关注数据库系统的运行。对DB2系统,管理员可以从实例和数据库状态、用户连接、磁盘空间使用等多个方面,检查系统的运行状况。

(1)系统版本、实例定义和状态

显示当前DB2系统的版本号和补丁号:

$ db2level

显示操作系统中建立的所有实例名称:

$ db2ilist

显示当前操作的实例名称:

$ db2 get instance

显示当前实例是否处于活动状态:

$ db2_local_ps

$ ps -ef | grep {user_name}

$ ipcs -a | grep {user_name}

显示节点定义及相关信息:

$ db2 list node directory

(2)系统配置

显示数据库管理器配置:

$ db2 get dbm cfg

显示管理服务器配置:

$ db2 get admin cfg

显示数据库配置:

$ db2 get db cfg for {database_name}

显示概要文件注册表设置:

$ db2set –all

显示操作系统环境设置:

$ env 或 vi db2profile

(3)数据库的定义和运行状态

显示数据库定义及相关信息:

$ db2 list db directory

显示当前被打开的数据库:

$ db2 list active databases

显示数据库的状态:

$ db2 get db cfg for {database_name} | grep “Backup pending”

$ db2 get db cfg for {database_name} | grep “Database is consistent”

$ db2 get db cfg for {database_name} | grep “Rollforward pending”

$ db2 get db cfg for {database_name} | grep “Restore pending”

显示当前用户连接和状态:

$ db2 list applications

$ db2 list applications show detail

显示数据库缓冲池定义:

$ db2 "select * from syscat.bufferpools"

(4)表空间、容器的定义和空间使用

显示表空间、容器的定义:

$ db2 list tablespaces

$ db2 list tablespace containers for {tablespace_id}

显示表空间、容器的空间使用:

$ db2 list tablespaces show detail

$ db2 list tablespace containers for {tablespace_id} show detail

如果使用SMS表空间,用下列命令决定是否有可用空间:

$ df –k

(5)数据库日志的定义和空间使用

$ db2 get db cfg for {database_name} | grep LOGRETAIN

$ db2 get db cfg for {database_name} | grep USEREXIT

$ db2 get db cfg for {database_name} | grep LOGPRIMARY

$ db2 get db cfg for {database_name} | grep LOGSECOND

(6)表和索引定义检查

显示数据库中的用户表:

$ db2 list tables for user

显示表的定义和结构:

$ db2 describe table {table_name}

$ db2 describe table {table_name} show detail

显示表上索引的定义和结构:

$ db2 describe indexes for table {table_name}

$ db2 describe indexes for table {table_name} show detail

可以使用db2look工具,将所有数据库对象的定义和结构导出,进行查看。

4. 系统性能状况分析

管理员可以根据需要,使用以下方法,收集DB2数据库系统的运行数据,以确定系统性能瓶颈:

获取整个数据库管理器的运行统计信息:

$ db2 get snapshot for dbm > {output_file}

获取所有数据库的运行统计信息:

$ db2 get snapshot for all databases > {output_file}

获取所有应用程序的运行统计信息:

$ db2 get snapshot for all applications > {output_file}

获取所有缓冲池的运行统计信息:

$ db2 get snapshot for all bufferpools > {output_file}

获取单个数据库的运行统计信息:

$ db2 get snapshot for database on {database_name} > {output_file}

获取单个数据库中所有应用程序的运行统计信息:

$ db2 get snapshot for applications on {database_name} > {output_file}

获取单个数据库中所有表的运行统计信息:

$ db2 get snapshot for tables on {database_name} > {output_file}

获取单个数据库中所有表空间的运行统计信息:

$ db2 get snapshot for tablespaces on {database_name} > {output_file}

获取单个数据库中所有锁的运行统计信息:

$ db2 get snapshot for locks on {database_name} > {output_file}

获取单个数据库中所有缓冲池的运行统计信息:

$ db2 get snapshot for bufferpools on {database_name} > {output_file}

获取单个数据库中所有动态SQL语句的运行统计信息:

$ db2 get snapshot for dynamic sql on {database_name} > {output_file}

需要时,可以复位统计信息,重新开始以上的信息收集:

$ db2 reset monitor all

5. 系统配置的改变

DB2系统不允许用户直接修改系统的各种配置文件。要改变系统的各种配置,管理员可以使用以下方法:

① 改变数据库管理器参数设置:

$ db2 update dbm cfg using {parameter_name} {parameter_value}

② 改变管理服务器参数设置:

$ db2 update admin cfg using {parameter_name} {parameter_value}

③ 改变数据库参数设置:

$ db2 update db cfg for {database_name} using {parameter_name} {parameter_value}

④ 改变概要文件注册表参数设置:

$ db2set {variable_name}={variable_value}

⑤ 改变数据库缓冲池参数设置:

$ db2 alter bufferpool {bufferpool_name} size {size_value}

6. 数据库日志维护

DB2系统支持日志的归档和非归档两种模式,确省情况下数据库处于非归档日志模式。可以通过设置LOGRETAIN和USEREXIT这两个数据库配置参数中的任何一个,改变数据库日志模式为归档模式:

$ db2 update db cfg for {database_name} using logretain recovery 或

$ db2 update db cfg for {database_name} using userexit yes

在非归档模式下,管理员不需要维护数据库日志;在归档模式下,管理员需要归档数据库日志,可以采用两种归档方式:自动归档和手工归档。

(1)自动归档

设置USEREXIT数据库参数,数据库就自动归档日志。在设置该参数前,用户需要提供一个应用程序,命名为db2uext2,存放在sqllib/bin目录下。在日志文件被写满后,系统自动执行该程序,将这个日志文件从当前目录移动到其它位置进行保存。

(2)手工归档

管理员需要定期归档被删除日志目录下不再被系统需要的日志文件,从而保证日志目录下有足够的空间,系统能够在需要时,产生新的日志文件。按照以下的步骤,手工地归档日志文件:

① 查看当前使用的日志文件目录(参数:path to log files)以及系统仍旧在使用的第一个活动日志文件(参数:first active log file)。

$ db2 get db cfg for {database_name}

② 假定参数first active log file = S0015555.LOG。这说明当前第一个活动日志文件是S0015555.LOG,由于日志文件的名字被顺序编号,因此在这之前的任何日志文件都可以被归档,然后从当前目录下删除。

③ 使用操作系统命令,将S0015555.LOG之前的所有日志文件拷贝到其它地方进行归档。

④ 从当前目录下删除S0015555.LOG之前的所有日志文件。

$ db2 connect to {database_name}

$ db2 prune logfile prior to S0015555.LOG

$ db2 connect reset

7. 备份和恢复处理

管理员按照规划、定期地备份数据库。备份信息越完整,在系统故障时就越容易恢复。对DB2系统,除数据库备份之外,其备份还可以包括:运行环境备份、数据库对象的SQL语句定义备份。

(1)实例运行环境备份

对实例的运行环境,需要备份:数据库管理器配置、数据库配置、概要文件注册表(profile registry)、磁盘空间的使用和操作系统环境设置。

$ db2 get dbm cfg > {output_file}

$ db2 get db cfg for {database_name} > {output_file}

$ db2set –all > {output_file}

$ db2 list tablespaces show detail > {output_file}

$ db2 list tablespace containers for {tablespace_id} show detail > {output_file}

$ cp .profile {output_file}

$ cp db2profile {output_file}

(2)用户创建数据库对象的SQL语句定义备份

使用db2look工具,可以基于整个数据库、也可以基于某个用户,将有关的数据字典信息存放在文本文件中。

$ db2look -d {database_name} -e -o {output_file}

$ db2look -d {database_name} -u {user_name} -e -o {output_file}

(3)数据库备份

数据库备份需要在数据库管理器启动后进行。可以在备份前,检查数据库结构的完整性;在备份完成后,检查备份的正确性。

① 备份前,检查数据库结构是否正确。

$ db2dart {database_name}

② 根据需要,选用不同的备份方式。

数据库的脱机备份:

$ db2 backup database {database_name} to {backup_path}

数据库的联机完整备份:

$ db2 backup database {database_name} online to {backup_path}

数据库的联机表空间备份:

$ db2 backup database {database_name} tablespace ({tablespace_name}) online to {backup_path}

数据库的联机增量备份:

$ db2 backup database {database_name} online incremental to {backup_path}

③在备份完成后,检查备份是否可用。

$ db2ckbkp {backup_file}

(4)数据库恢复

数据库恢复需要在数据库管理器启动后进行。可以在恢复前,检查可用的数据库备份,再根据数据库的归档日志模式,决定恢复方式。

① 显示可用的备份。

$ db2 list history backup all for database {database_name}

② 根据日志的归档模式,选用恢复方式。

非归档模式下的数据库恢复:

$ db2 restore database {database_name} from {backup_path}

归档模式下,整个数据库的恢复:

$ db2 restore database {database_name} from {backup_path}

$ db2 rollforward database {database_name} to end of logs and complete

归档模式下,单个或者多个表空间的恢复:

$ db2 restore database {database_name} tablespace {tablespace_name} from {backup_path}

$ db2 rollforward database {database_name} to end of logs and complete

8. 数据库对象统计信息的维护

确定何时、对那些表和索引执行何种程度的统计信息收集,是管理员的工作职责。在DB2系统中,如果重新生成了统计信息,就需要手工、重新生成程序中静态SQL语句的程序包。系统不会在运行过程中自动地生成静态SQL语句的执行计划。

(1)管理员根据需要,对表、索引进行不同程度的统计信息收集。

对表进行信息统计,不进行字段列上的数值分布统计:

$ db2 runstats on table {table_name}

对表进行信息统计,在指定字段列上进行数值分布统计:

$ db2 runstats on table {table_name} with distribution on columns({column_name},…)

对表上索引进行信息统计:

$ db2 runstats on table {table_name} for indexes all

对表上索引所使用的字段列进行信息统计:

$ db2 runstats on table {table_name} on key columns and indexes all

(2)在统计信息收集完成后,重新生成静态SQL语句的执行包。

使用预编译时生成的绑定文件:

$ db2 bind {bind_file_name}

或者,由系统根据数据库中的现有程序包,重新进行生成:

$ db2rbind {database_name} /l {log_file}

9. 数据的磁盘空间整理

在对数据的磁盘空间进行整理之前,最好能够确定那些表、索引需要这些操作。这样可以做到有的放矢,避免浪费系统资源。DB2系统通过reorgchk工具,来找出数据库中需要重组的用户表、索引:

$ db2 reorgchk current statistics on table user

对需要重建的表和索引,除了第9.3.11一节所讨论方法之外,在DB2系统中还可以使用下列方法对表、索引进行重组。

对指定的表进行重组:

$ db2 reorg table {table_name}

对指定表的指定索引进行重组:

$ db2 reorg table {table_name} index {index_name}

对指定表的所有索引进行重组:

$ db2 reorg indexes all for table {table_name}

10. 数据的导入和导出

除SQL语句之外,DB2系统提供export和import、load、db2move工具,进行数据的导入和导出。

(1)export工具通过SQL语句将要导出数据存放在文本文件中,使用ixf格式可以同时导出表的结构;使用import将数据导入表中。

将要导出数据存放到文本文件中:

$ db2 export to {output_file} of del "{select查询语句}"

导出表的结构和数据存放到输出文件中:

$ db2 export to {output_file} of ixf "select * from {table_name}"

将数据装入指定的表中:

$ db2 import from {input_file} of del insert into {table_name}

创建表并导入数据:

$ db2 import from {input_file} of ixf create into {table_name}

(2)load工具用来装入数据,可以使用export工具导出的数据。在执行时表间参照、列完整性不会被检查,触发器不会被触发,因此其处理比import工具快。load工具的整个处理过程分为四个步骤,在使用时要仔细考虑和规划,以免造成数据表的破坏。

(3)db2move工具可以实现数据库系统之间的大数据量移动,可以将整个数据库、单个或者多个表等数据库对象的结构和数据导出到操作系统文件中,可以根据需要,重建数据库、单个或者多个数据库对象等,然后装入数据。

将数据库的结构和数据导出到当前目录下:

$ db2move {database_name} export

将指定表的结构和数据导出到当前目录下:

$ db2move {database_name} export -tn {table_name}

根据当前目录下整个数据库的输出,重建数据库并导入数据:

$ db2move {database_name} import

根据当前目录下单个表的输出,装入数据:

$ db2move {database_name} import -io insert

9.4.2 ORACLE数据库系统

1. 系统的启动和关闭

(1)系统的启动

启动网络服务:

$ lsnrctl start

启动实例:

$ sqlplus " / as sysdba"

SQL> startup

(2)系统的关闭

关闭实例:

$ sqlplus " / as sysdba"

SQL> shutdown immediate

如果实例无法正常关闭,可以使用以下方式:

SQL> shutdown abort

关闭网络服务:

$ lsnrctl stop

2. 系统运行日志文件的检查

ORACLE系统的运行日志文件为alert{instance_name}.log,可以通过配置参数BACKGROUND_DUMP_DEST,改变它的存放位置。这个运行日志文件,需要每天检查、定期备份并手工清除其内容。

在配置参数BACKGROUND_DUMP_DEST和USER_DUMP_DEST指定目录下,也存放着后台进程和用户的跟踪文件。这些文件也可以帮助管理员发现系统存在的故障,需要定期备份后清除其内容。此外,管理员也需要定期检查、清除网络日志文件。网络日志文件的位置,可以使用以下命令查看:

$ lsnrctl show logfile

3. 系统运行状况检查

管理员要随时关注数据库系统的运行。对ORACLE系统,管理员可以从实例和数据库状态、用户连接、磁盘空间使用等多个方面,检查系统的运行状况。

查看系统版本:

$ sqlplus -v

SQL> select * from v$version ;

查看实例、数据库状态:

$ ps -ef | grep {user_name}

$ ipcs -a | grep {user_name}

SQL> select status, logins, shutdown_pending, active_state from v$instance ;

SQL> select open_mode, guard_status from v$database ;

查看数据库属性:

SQL> select * from database_properties ;

查看网络状态:

$ lsnrctl status

$ lsnrctl services

查看系统内存使用:

SQL> show sga ;

查看系统配置:

SQL> show parameter {parameter_name} ;

查看控制文件的使用:

SQL> select * from v$controlfile ;

查看当前的用户连接:

select username,sid,serial# from v$session ;

查看数据库日志的定义和空间使用:

SQL> archive log list ;

SQL> select log_mode from v$database ;

SQL> select * from v$logfile ;

SQL> select group#, bytes, archived, status from v$log ;

显示表空间、数据文件定义

SQL> select * from v$tablespace ;

SQL> select name, status, bytes/(1024*1024) as "space(M)" from v$datafile ;

SQL> select name, status, bytes/(1024*1024) as "space(M)" from v$tempfile ;

查看表空间、数据文件的空间使用:

SQL> select tablespace_name, sum(bytes)/(1024*1024) as "free_space(M)" from dba_free_space group by tablespace_name;

SQL> select file_name, sum(a.bytes)/(1024*1024) as "free_space(M)" from dba_free_space a, dba_data_files b where a.file_id = b.file_id group by file_name ;

查看表、索引的空间使用:

SQL> select sum(bytes)/(1024*1024) as "size(M)" from dba_segments where segment_name = upper('&table_name') ;

SQL> select sum(bytes)/(1024*1024) as "size(M)" from dba_segments where segment_name = upper('&index_name') ;

查看系统中不正常的对象:

SQL> select owner, object_name, object_type from dba_objects where status = 'INVALID' ;

4. 系统性能状况分析

ORACLE系统提供了许多工具,可以用来收集和显示系统的各种运行数据,从而帮助管理员确定系统性能瓶颈。管理员可以使用的工具包括以下这些:

(1)数据字典及动态性能视图。数据字典视图中存放表、索引的数据特性和磁盘空间使用,如:dba_tables、dba_tab_columns、dba_indexes、index_stats等;动态性能视图记录从系统启动以来的所有运行统计,如:v$statname、v$sysstat、v$mystat、v$sesstat、v$sga、v$sgastat等。通过对这些视图的查看,可以发现系统所存在的性能问题。

(2)STATSPACK工具、UTLBSTAT和UTLESTAT工具。这两个工具可以用来收集一段时间内系统的运行状态数据,并将结果汇总后供管理员进行分析。

(3)进程等待事件。通过查看系统中所有用户会话对各种系统资源的等待,决定那些资源是系统的运行瓶颈。有关会话的资源等待信息,记录在字典视图中,如:v$event_name、v$system_name、v$session_event、v$session_wait。

5. 系统配置的改变

ORACLE的系统配置,有两种存放方式:二进制方式和文本方式。不同的存放方式需要不同的修改命令。

(1)二进制方式。存放在配置文件spfile{instance_name}.ora中,使用下列命令进行配置参数的改变:

alter system set {parameter_name} = {parameter_value} scope = spfile ;

(2)文本方式。存放在配置文件init{instance_name}.ora中,可以直接使用编辑命令进行修改。

ORACLE的网络配置,存放在文件:listerner.ora、sqlnet.ora、tnsnames.ora文件中,可以使用netca工具,也可以直接使用编辑命令进行修改。

6. 数据库日志维护

ORALCE系统支持日志的归档和非归档两种模式,确省情况下,数据库处于非归档日志模式。使用下列命令,改变数据库日志模式为归档模式:

SQL> alter database archivelog ;

在非归档模式下,管理员不需要维护数据库日志;在归档模式下,管理员需要归档数据库日志,可以采用两种归档方式:自动归档和手工归档。

1. 自动归档

设置配置参数LOG_ARCHIVE_DEST为true。系统启动后台进程,自动将被写满日志文件进行归档备份。

2. 手工归档

设置配置参数LOG_ARCHIVE_DEST为false。管理员使用下列命令,定期将已写满日志文件进行归档备份:

SQL> archive log all;

7. 备份和恢复处理

管理员按照规划、定期地备份数据库。备份信息越完整,在系统故障时就越容易恢复。对ORACLE系统,除数据库备份之外,其备份还可以包括:运行环境备份、数据库对象的SQL语句定义备份。

(1)实例运行环境备份

对实例的运行环境,需要备份:系统配置、网络配置、操作系统环境设置、密码文件、控制文件、磁盘空间的使用。

$ cp spfile{instance_name}.ora {output_file}

$ cp listener.ora {output_file}

$ cp .profile {output_file}

$ cp orapw{instance_name} {output_file}

SQL> alter database backup controlfile to trace ;

SQL> select * from v$controlfile ;

SQL> select * from v$log ;

SQL> select * from v$tablespace ;

SQL> select ts#,file#,name from v$datafile ;

SQL> select ts#,file#,name from v$tempfile ;

(2)用户创建数据库对象的SQL语句定义备份

在ORACLE系统中,要获取数据库对象的SQL语句定义,可以使用dbms_metadata函数包。下面所列是针对表的处理,用户可以采用类似的方法,获取其它数据库对象的SQL语句定义。

返回单个表的SQL语句定义:

SQL> select dbms_metadata.get_ddl('TABLE','{table_name}') from dual ;

返回系统中所有表的SQL语句定义:

SQL> select dbms_metadata.get_ddl('TABLE', table_name) from dba_tables ;

(3)数据库备份

管理员在备份数据库前,可以使用dbv工具,检查数据库结构的完整性。

① 检查数据库结构是否正确。

$ dbv file={file_name} blocksize={size_value}

② 根据需要,选用不同的备份方式。这里只列出数据库的手工备份方式。

(4)ORACLE数据库的脱机备份

对ORACLE数据库的脱机备份,可以按照以下操作步骤进行:

① 正常关闭数据库系统

SQL> shutdown immediate ;

② 使用操作系统命令,对数据库的所有数据文件、日志文件、控制文件,进行拷贝保存。

$ cp {file_name} {backup_file}

(5)ORACLE数据库的联机备份

对ORACLE数据库的联机备份,可以按照以下操作步骤进行:

① 使要备份表空间处于备份模式。

SQL> alter tablespace {tablespace_name} begin backup

② 使用操作系统命令,拷贝组成表空间的所有数据文件。

$ cp {file_name} {backup_file}

③ 结束表空间的备份模式。

SQL> alter tablespace {tablespace_name} end backup

④ 按照以上步骤,备份数据库的所有数据表空间。

⑤ 备份控制文件,归档当前日志文件。

SQL> alter system archive log current

SQL> alter database backup controlfile to ‘{backup_file_name}’

(6)数据库恢复

管理员在恢复数据库前,可以使用dbv工具,检查备份是否可用,然后根据数据库的归档日志模式,结合系统故障,决定要恢复方式。

(7)非归档日志模式数据库的恢复

对数据库的非归档日志模式,只能使用脱机备份进行恢复。

① 关闭数据库。

SQL> shutdown abort;

② 使用备份,恢复所有的数据库文件。

$ cp {backup_file} {file_name}

③ 重新启动数据库。

SQL> connect / as sysdba

SQL> startup

(8)归档日志模式数据库的恢复

对数据库的归档日志模式,可以使用脱机或者联机备份进行恢复。

① 关闭数据库。

SQL> shutdown abort

② 使用备份,恢复所有的数据库文件。

$ cp {backup_file} {file_name}

③ 启动实例,MOUNT数据库。

SQL> connect / as sysdba;

SQL> startup mount

④ 使用日志,恢复数据库到故障发生时刻。

SQL> recover database;

⑤ 打开数据库。

SQL> alter database open;

8. 数据库对象统计信息的维护

确定何时、对那些表和索引执行何种程度的统计信息收集,是管理员的工作职责。在ORACLE系统中,可以使用analyze命令,也可以使用dbms_stats函数包,进行数据库对象统计信息的收集。

使用analyze命令,生成表的统计信息:

SQL> analyze table {table_name} compute statistics ;

使用analyze命令,生成索引的统计信息:

SQL> analyze index {index_name} compute statistics ;

使用dbms_stats函数包,生成表的统计信息:

SQL> exec dbms_stats.gather_table_stats(ownname => '{schema_name}', tabname => '{table_name}', estimate_percent => dbms_stats.auto_sample_size, method_opt => 'for all columns size auto' )

使用dbms_stats函数包,生成索引的统计信息:

SQL> exec dbms_stats.gather_index_stats( ownname => '{schema_name}', indname => '{index_name}', estimate_percent => dbms_stats.auto_sample_size, method_opt => 'for all columns size auto' )

9. 数据的磁盘空间整理

在对数据的磁盘空间进行整理之前,最好能够确定那些表、索引需要这些操作。这样可以做到有的放矢,避免浪费系统资源。在ORACLE系统中可以使用dbms_space函数包,也可以查询数据字典表,检查表、索引的空间使用。

SQL> select num_rows, blocks, empty_blocks,avg_space, chain_cnt, avg_row_len from dba_tables where owner = '{schema_name}' and table_name = '{table_name}' ;

SQL> select name,lf_rows,del_lf_rows,br_rows,btree_space,used_space from index_stats where name = upper('{index_name}') ;

对需要重建的表和索引,ORACLE系统没有提供专门的工具,我们可以按照第9.3.11一节所讨论方法执行。

10. 数据得导入和导出

ORACLE系统提供EXPORT、EXPORT和SQL *LOADER工具,进行数据的导入和导出。

(1)EXPORT命令以二进制格式,可以将整个数据库、单个或者多个表等数据库对象的结构和数据导出到操作系统文件中。可以使用IMPORT命令,重建数据库、单个或者多个数据库对象等。

导出指定表的结构和数据:

$ exp {user_name}/{password} file = {output_file} tables = {table_name} grants=y indexs=y

导出指定用户所拥有数据库对象的结构和数据:

$ exp {user_name}/{password} file = {output_file} owner = {owner_name} grants=y rows=y compress=y

导出指定表空间中所有数据库对象的结构和数据:

$ exp {user_name}/{password} file = {output_file} tablespaces = {tablespace_name} rows=y

导出整个数据库的结构和数据:

$ exp {user_name}/{password} file = {output_file} full=y grants=y rows=y

创建指定表并导入数据:

$ imp {user_name}/{password} file = {imput_file} tables = {table_name} rows=y

创建整个数据库并导入数据:

$ imp {user_name}/{password} file = {imput_file} full=y

(2)使用SQL *LOADER工具装入数据,需要提供一个控制文件。通过该文件指定:输入数据文件的位置、数据的格式、配置细节、如何处理被装入的数据等。

$ sqlldr {user_name}/{password} control = {control_file} log = {log_file} direct=Y

9.4.3 INFORMIX数据库系统

1. 系统的启动和关闭

(1)启动实例

$ oninit -v

(2)关闭实例

$ onmode –ky

2. 系统运行日志文件的检查

INFORMIX系统的运行日志文件,确省为online.log,存放在$INFORMIXDIR目录下。可以通过配置参数MSGPATH,设定它的具体名字和存放位置。这个运行日志文件,需要每天检查、定期备份并手工清除其内容。另外,事务或者系统故障,会生成af.xxx文件,存放在配置参数DUMDIR指定目录下。可以通过查看此文件,获取故障发生的原因。

配置参数DUMDIR的缺省值为:/tmp。在此目录下,除af.xxx文件之外,还会有以下类型文件:core、gcore、shmem.xxx、VP.servername.nnC、buildsmi.xxx、.inf.servername、oncatlgr.out.pidnum。这些文件,有的是系统运行过程中产生的临时文件,有的是事务或者系统故障发生时内存映像的导出文件,需要定期备份并手工清除。

3. 系统运行状况检查

管理员要随时关注数据库系统的运行。对INFORMIX系统,管理员可以从实例和数据库状态、用户连接、磁盘空间使用等多个方面,检查系统的运行状况。

显示当前系统的版本号和补丁号:

$ onstat -

显示当前操作的实例名称:

$ env | grep INFORMIXSERVER

显示当前实例运行状态:

$ onstat –

$ ps -ef | grep {user_name}

$ ipcs -a | grep {user_name}

显示表空间、大块的定义和空间使用:

$ onstat –d

显示逻辑日志的定义、空间使用、状态:

$ onstat –l

显示系统中的当前用户连接:

$ onstat –u

显示系统中锁的使用:

$ onstat –k

显示系统配置:

$ onstat –c

显示网络配置:

$ vi sqlhosts

显示操作系统环境设置:

$ env或者vi .profile

查看系统内存使用:

$ onstat -

查看系统总体性能状况:

$ onstat -p

4. 系统性能状况分析

管理员可以根据需要,从CPU、内存、I/O等方面,收集INFORMIX数据库系统的运行数据,以确定系统性能瓶颈。

(1)CPU性能监测

$ onstat -g ath

$ onstat -g glo

$ onstat -g ioq

$ onstat -g rea

(2)内存性能监测

$ onstat -g seg

$ onstat -p

$ onstat -B

(3)I/O性能监测

$ onstat -F

$ onstat -g ioq

$ onstat -p

$ onstat -D

$ onstat -t

5. 系统配置的改变

INFORMIX的系统配置和网络配置,均存放在$INFORMIXDIR/etc目录下,环境变量ONCONFIG、SQLHOSTS分别设定了这两个配置文件的名字。如果没有设定SQLHOSTS环境变量,则网络配置文件缺省为:sqlhosts。

要改变系统和网络配置,可以直接使用操作系统的编辑命令进行修改。

6. 数据库日志维护

INFORMIX系统只使用归档日志模式,有两种日志文件:逻辑日志和物理日志。物理日志不需要归档保存。

所有的逻辑日志文件再次被使用前,必须被归档,可以采用两种归档方式:

(1)连续归档

$ ontape –c

(2)自动归档

$ ontape –a

在实际操作时,可以根据需要,设置逻辑日志备份设备参数:LTAPEDEV = /dev/null,系统会将写满的逻辑日志文件标记为已归档,尽管实际的归档操作并没有被执行。

7. 备份和恢复处理

管理员按照规划、定期地备份数据库。备份信息越完整,在系统故障时就越容易恢复。对INFORMIX系统,除数据库备份之外,其备份还可以包括:运行环境备份、数据库对象的SQL语句定义备份。

(1)实例运行环境备份

对实例的运行环境,需要备份:系统配置、网络配置、磁盘空间的使用和操作系统环境设置。

$ cp $INFORMIXDIR/etc/$ONCONFIG > {output_file}

$ cp $INFORMIXDIR/etc/$SQLHOSTS > {output_file}

$ onstat – d > {output_file}

$ cp .profile > {output_file}

(2)用户创建数据库对象的SQL语句定义备份

在INFORMIX系统中,使用dbschema工具,可以基于整个数据库、也可以基于某个数据库对象,将有关的数据字典信息存放在文本文件中。

$ dbschema –d {database_name}

$ dbschema –d {database_name} –t {table_name} > {output_file}

(3)数据库备份

数据库备份需要在实例启动后进行。可以在备份前,检查数据库结构的完整性。

① 在备份前,检查数据库结构是否正确。

$ oncheck -cr

$ oncheck -ce

$ oncheck -cc {database_name}

$ oncheck -cD {database_name}

$ oncheck -cI {database_name}

$ oncheck -cs {database_name}

$ oncheck -cS {database_name}

② 根据需要,选用不同的备份方式。

数据库系统的脱机备份:

$ onmode –s

$ ontape –s

数据库系统的联机备份:

$ ontape -s

(4)数据库恢复

管理员在恢复系统前,可以检查可用的系统备份,然后结合系统故障,决定系统恢复方式。

① 显示可用的备份

$ oncheck -pr

② 管理员根据需要,选用适当的恢复方式。

整个数据库系统的恢复:

$ ontape -r

单个或者多个表空间的恢复:

$ ontape –r –D {tablespace_name}

8. 数据库对象统计信息维护

确定何时、对那些表和索引执行何种程度的统计信息收集,是管理员的工作职责。在INFORMIX系统中,如果重新生成了统计信息,就需要手工、重新生成存储过程、函数的执行计划。所有这些操作,需要在在dbaccess工具中执行。

(1)管理员根据需要,对表、索引进行不同程度的统计信息收集。

对表、表上索引、表的子表以及它们中的所有字段,进行信息统计:

update statistics for table {table_name}

对表以及表中的所有字段,进行信息统计:

update statistics for table only {table_name}

对表以及指定字段,进行信息统计:

update statistics for table {table_name} ({clumne_name},...)

对表的指定字段进行数值分布统计:

update statistics for table {table_name} ({clumne_name},...) drop distributions

(2)在统计信息收集完成后,重新生成数据字典中存储过程、函数的执行计划。

update statistics for routine

9. 数据磁盘存放的整理

在对数据的磁盘空间进行整理之前,最好能够确定那些表、索引需要这些操作。这样可以做到有的放矢,避免浪费系统资源。在INFORMIX系统中可以查询数据字典表,也可以使用下列命令,检查表、索引的空间使用。

显示大块、扩充的空间使用信息:

oncheck -pe

显示表、索引的空间使用:

oncheck -pT {database_name}:{table_name}

对需要重建的表和索引,INFORMIX系统没有提供专门的工具,我们可以按照第9.3.11一节所讨论方法执行。

10. 数据的导入和导出

除SQL语句之外,INFORMIX系统提供dbexport和dbimport、load和unload、onload和onunload工具,进行数据的导入和导出。

(1)dbexport工具可以将整个数据库的结构和数据导出到指定目录下的文本文件中,可以使用dbimport创建数据库并导入数据。

将整个数据库的结构和数据导出:

$ dbexport -o {output_path} {database_name}

创建数据库并导入数据:

$ dbimport -i {input_path} {database_name}

(2)load和unload命令需要在dbaccess工具中使用。通过SQL语句将要导出数据存放在文本文件中。

将要导出数据存放到文本文件中:

unload to '{output_file}' {select查询语句}

将数据装入指定的表中:

load from '{input_file}' insert into {table_name}

(3)onload和onunload工具使用二进制格式,其功能类似dbexport和dbimport工具。onunload工具可以将整个数据库或者单个表的结构和数据导出到指定二进制文件中,可以使用onload创建整个数据库或者单个表,然后装入数据。导出数据时,要事先手工创建0字节的输出文件。

将整个数据库的结构和数据导出:

$ onunload -t {output_file} {database_name}

将指定表的结构和数据导出:

$ onunload -t {output_file} {database_name}:{table_name}

创建数据库并导入数据:

$ dbimport -t {input_file} {database_name}

创建表并导入数据:

$ dbimport -t {input_file} {database_name}:{table_name}

9.4.4 SYBASE数据库系统

1. 系统的启动和关闭

(1)启动实例

启动数据库服务器:

$ startserver -f $SYBASE/$SYBASE_ASE/install/RUN_{server_name}

启动备份服务器:

$ startserver -f $SYBASE/$SYBASE_ASE/install/RUN_{server_name}_back

(2)关闭实例

关闭备份服务器:

1> shutdown SYB_BACKUP

2> go

关闭数据库服务器:

1> shutdown

2> go

如果系统异常,无法正常关闭数据库服务器,可以使用以下方式:

1> shutdown with nowait

2> go

2. 系统运行日志文件的检查

SYBASE系统的运行日志文件存放在$SYBASE/$SYBASE_ASE/install目录下,确省为errorlog。可以在启动命令文件(RUN_{server_name})中,改变它的具体名字和存放位置。这个运行日志文件,需要每天检查、定期备份并手工清除其内容。

3. 系统运行状况检查

管理员要随时关注数据库系统的运行。对SYBASE系统,管理员可以从实例和数据库状态、用户连接、磁盘空间使用等多个方面,检查系统的运行状况。

显示当前系统的版本号和补丁号:

$ isql -v

显示当前实例运行状态:

$ showserver

显示cache以及cache中pool的划分信息:

1> sp_helpcache {cache_name}

1> sp_poolconfig

显示数据库状态及空间使用:

1> sp_helpdb

1> sp_helpdb {database_name}

显示段信息及空间使用:

1> sp_helpsegment

1> sp_helpsegment {segment_name}

显示设备状态及空间使用:

1> sp_helpdevice

1> sp_helpdevice {device_name}

显示表、索引信息:

1> sp_help

1> sp_help {table_name}

1> sp_helpindex {table_name}

1> sp_help {index_name}

显示表、索引的空间使用信息:

1> sp_spaceused {table_name}

显示当前用户以及进程的信息:

1> sp_who

显示系统中锁的使用:

1> sp_lock

显示系统配置:

1> sp_configure

显示网络配置:

$ vi interfaces

显示操作系统环境设置:

$ env或者vi .profile

4. 系统性能状况分析

管理员可以根据需要,使用sp_sysmon、sp_object_stats、sp_monitor工具,收集SYBASE数据库系统的运行数据,以确定系统性能瓶颈。

(1)使用sp_sysmon工具,收集一段时间内系统的运行状态数据:

1> sp_sysmon begin_sample

1> sp_sysmon end_sample

(2)使用sp_object_stats工具,显示表、索引的锁争用、死锁、锁等待等统计信息:

1> sp_object_stats

(3)使用sp_monitor工具,显示CPU、内存、I/O等统计信息:

1> sp_monitor

5. 系统配置的改变

SYBASE的系统配置存放在$SYBASE/$SYBASE_ASE/{server_name}.cfg中。要改变系统配置,可以直接使用操作系统编辑命令进行修改。对动态的配置参数,也可以使用命令sp_configure修改:

1> sp_configure {parameter_name}, {parameter_value}

系统的网络配置信息存放在$SYBASE/interfaces中,虽说也可以直接进行编辑,但一般建议使用bscp工具进行修改。

6. 数据库日志维护

SYBASE系统只使用归档日志模式,每个数据库都单独维护自己的日志信息。对每一个数据库,管理员必须定期移走不再使用的日志,以释放磁盘空间,可以采用以下两种方式:

(1)保存不再使用的日志,然后将这些日志从数据库中删除:

1> dump transaction {database_name} TO “{backup_device}”

(2)直接将不再使用的日志从数据库中删除,不进行保存:

1> dump transaction {database_name} with truncate_only

如果由于没有日志磁盘空间,造成数据库挂起,在使用以上方式释放日志磁盘空间之后,仍旧不能解除数据库的挂起状态,就可以执行以下命令,清除日志:

1> dump transaction {database_name} with no_log

7. 备份和恢复处理

管理员按照规划、定期地备份数据库。备份信息越完整,在系统故障时就越容易恢复。对SYBASE系统,除数据库备份之外,其备份还可以包括:运行环境备份、数据库对象的SQL语句定义备份。

(1)实例运行环境备份

对实例的运行环境,需要备份:系统配置、网络配置、master数据库系统表(sysdatabases、sysdevices、sysusages、sysloginroles、syslogins)和操作系统环境设置。

$ cp $SYBASE/$SYBASE_ASE/{server_name}.cfg > {outpute_file}

$ cp $SYBASE/interfaces > {outpute_file}

$ bcp master..sysdatabases out {output_file} -Usa -P -c

$ bcp master..sysdevices out {output_file} -Usa -P -c

$ bcp master..sysusages out {output_file} -Usa -P -c

$ bcp master..sysloginroles out {output_file} -Usa -P -c

$ bcp master..syslogins out {output_file} -Usa -P -c

$ cp .profile > {outpute_file}

(2)用户创建数据库对象的SQL语句定义备份

在SYBASE系统中,使用ddlgen工具,可以基于整个数据库、也可以基于某个数据库对象,将有关的数据字典信息存放在文本文件中。

生成整个数据库的SQL语句定义到文本文件中:

$ ddlgen -Usa -P -S{host_name}:{port_name} -TDB -D{database_name} -O{output_file}

生成单个表的SQL语句定义到文本文件中:

$ ddlgen -Usa -P -S{host_name}:{port_name} -TU -N{table_name} -D{database_name} -O{output_file}

(3)数据库备份

SYBASE系统的数据库备份,需要启动实例、启动备份服务器。可以在备份前,检查数据库结构的完整性。

① 在备份前,检查数据库结构是否正确。

1> dbcc checkdb {database_name}

1> dbcc checkalloc {database_name}

1> dbcc checkcatalog {database_name}

② 执行数据库备份。

1> dump database {database_name} TO “{backup_device}”

(4)数据库恢复

SYBASE系统使用多个数据库,可以分为:系统数据库和用户数据库。对它们的恢复, 需要采取不同的方法。

(5)master系统数据库的恢复

按照以下步骤,对master数据库进行恢复:

① 找出master数据库中下列系统表的文本备份:sysdatabases、sysdevices、sysusages、sysloginroles、syslogins。

② 建立新的master设备。

$ dataserver –d {device_name} –b {size_value}

③ 以单用户方式启动SYBASE数据库管理系统,拷贝runserver文件,并命名为m_RUN_{server_name}。编辑该文件,在dataserver命令行添加参数-m。

$ startserver –f m_RUN_{server_name}

④ 利用sysusages系统表中信息,使用alter database命令,改变master数据库在master设备上的空间分配。要保证master数据库在master设备上的空间分配情况和恢复前完全一致,为了做到这一点,有时还需要修改model、tempdb数据库在master设备上的空间分配。

⑤ 检查备份服务器,保证sysservers系统表中信息和interfaces文件中的信息一致。保证备份服务器正常运行。

⑥ 如果有master数据库的备份,使用该备份恢复master数据库。恢复完成后,数据库系统自动关闭,以单用户方式重新启动数据库管理系统

⑦ 查询master数据库的sysdatabases、sysdevices、sysusages系统表,确保它们的内容与现有的文本备份一致。如果存在不一致的地方,执行下列操作:

使用disk reinit命令,向sysdevices系统表添加新的数据库设备

使用disk refit命令,向sysdatabases系统表添加新的数据库,更改sysusages系统表中的空间分配信息

⑧ 以常规(多用户)方式重新启动数据库系统。查询master数据库的syslogins系统表,确保它的内容与现有的文本备份一致。如果存在不一致的地方,使用sp_addlogin、sp_modifylogin、sp_droplogin、sp_locklogin命令进行改正。

⑨ 恢复model数据库。如果有model数据库的备份,直接使用备份进行恢复。如果没有备份,就运行installmodel脚本:

$ isql –Usa –P{password} –S{server_name} < installmodel

然后,对model数据库执行相应的修改。

⑩ 使用dbcc命令,检查数据库。在所有数据库不存在问题后,备份master数据库。

(6)sybsystemprocs系统数据库的恢复

按照以下步骤,恢复sybsystemprocs数据库:

① 以单用户模式启动数据库系统

② 改变系统配置,允许用户直接修改系统表

1> sp_configure "allow updates",1

③ 删除sybsystemprocs系统数据库

1> drop database sybsystemprocs

④ 删除sybsystemprocs系统数据库所使用的设备:sysprocsdev

1> begin transaction

2> delete from sysdevices where name="sysprocsdev"

3> commit transaction

⑤ 以单用户模式重新启动数据库系统

⑥ 创建sysprocsdev设备、sybsystemprocs数据库:

1> disk init name="sysprocsdev", physname="{physical_device}", devno=4,

size={size_value}

1> create database sybsystemprocs on sysprocsdev = {size_value}

⑦ 以常规(多用户)模式启动数据库系统

⑧ 改变系统配置,不允许用户直接修改系统表

1> sp_configure "allow updates",0

⑨ 如果存在sybsystemprocs数据库的备份,直接使用备份恢复

1> load database sybsystemprocs from “{backup_device}”

如果没有sybsystemprocs数据库的备份,运行installmaster脚本来创建:

$ isql -Usa –P{password} –S{server_name} < installmaster

⑩ 检查sybsystemprocs数据库。如果发现不存在的用户自定义存储过程,就重新执行原有的创建脚本。

(6)用户数据库的恢复

按照以下步骤,对用户数据库库进行恢复:

① 归档数据库日志

1> dump transaction {database_name} to “{backup_device}” with no_truncate

② 收集数据库空间使用信息

1> select * from sysusages where dbid = db_id(“{database_name}”)

1> sp_helpdb {database_name}

③ 删除遭到破坏的数据库

1> drop database {database_name}

如果上述命令操作失败,可以使用下列命令删除数据库

1> dbcc dbrepair({database_name},dropdb)

④ 删除发生故障的设备,然后重建该设备

⑤ 按照步骤②收集的信息,重建数据库。可能需要修改数据库的空间使用,在下一步操作之前,要保证数据库空间使用与故障发生前的情况完全一致

1> create database {database_name} on {device_name} = {size_value}

log on {device_name} = {size_value}

1> alter database {database_name} on {device_name} = {size_value}

⑥ 使用数据库备份,恢复数据库

1> load database {database_name} from “{backup_device}”

⑦ 使用数据库日志备份,按照备份顺序前滚数据库,使数据恢复到发生故障时刻

1> load transaction {database_name} from “{backup_device}”

⑧ 使数据库处于联机状态,允许用户进行正常的操作

1> online database {database_name}

8. 数据库对象统计信息的维护

确定何时、对那些表和索引执行何种程度的统计信息收集,是管理员的工作职责。在SYBASE系统中,管理员根据需要,使用update statistics命令,对表、索引进行不同程度的统计信息收集。

对表以及表中的所有字段,进行信息统计:

1> update statistics {table_name}

对表的指定字段,进行信息统计:

1> update statistics {table_name} ({column_name}...)

对索引进行信息统计:

1> update index statistics {table_name} {index_name}

对分区表,进行和分区有关的信息统计:

1> update partition statistics {table_name}

9. 数据磁盘存放的整理

在对数据的磁盘空间进行整理之前,最好能够确定那些表、索引需要这些操作。这样可以做到有的放矢,避免浪费系统资源。SYBASE系统通过optdiag工具,来检查数据库中表、索引的空间使用:

$ optdiag statistics {database_name} -Usa -P -o {outpute_file}

对存在较多行转移、未使用空间的表,可以执行下列命令进行删除:

1> reorg compact {table_name}

2> go

在以上操作完成后,可以重新使用optdiag工具检查数据库。如果仍旧存在不能满足要求的表,就需要对这些表进行重建。除了第9.3.11一节所讨论方法之外,在SYBASE系统中还可以使用以下方法对表进行重建:

1> use master

2> go

1> sp_dboption {database_name}, “select into/bulkcopy/pllsort” ,true

2> go

1> use {database_name}

2> go

1> checkpoint

2> go

1> reorg rebuild {table_name}

2> go

10. 数据的导入和导出

除SQL语句之外,SYBASE系统提供bcp工具,可以进行基于表的数据导入和导出。

导出指定表中的数据:

$ bcp {database_name}..{table_name} out {output_file} -Usa -P –c

导入指定表中的数据:

$ bcp {database_name}..{table_name} in {input_file} -Usa -P

9.5 本章小结

数据库管理员负责数据库系统的管理、维护工作,其工作职责大体上可以划分为以下两个方面:

(1)数据库系统的部署。就是根据应用系统要求,进行整个数据库系统的安装和配置,建立适合用户自身需要的系统运行环境。

(2)数据库系统的日常维护。就是在数据库系统的日常运行过程中,及时跟踪和检查数据库系统的运行状态,保证数据库的正常运行。

数据库系统的日常维护是数据库管理员每时每刻都要关注的工作,可以划分为以下几个方面:系统的启动和关闭、系统运行日志文件的检查、系统运行状况检查、数据库的安全维护、系统性能状况分析、数据字典的维护、系统配置的改变、数据库日志维护、备份和恢复处理、数据库对象统计信息的维护、数据的磁盘空间整理、历史数据维护、数据的导入和导出。


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织