分类: DB2/Informix
2008-05-31 16:36:48
自动监视和纠正操作
可以使用管理 API、调度程序和 sysadmin 数据库中存储的信息来管理自动维护、监视和管理任务。Dynamic Server 的这些组件可以简化复杂系统中的信息收集和服务器维护。
SQL 管理 API 让管理员能够使用各种 SQL 命令执行远程管理,比如管理空间、管理配置、运行日常作业和系统检验。
可以使用 EXECUTE FUNCTION
语句调用内置的 admin( )
或 task( )
函数来执行管理任务,这相当于执行 Dynamic Server 的各个管理实用程序。
在 EXECUTE FUNCTION
语句中,参数列表中的值指定实用程序及其命令行参数。例如,下面的 SQL 语句(它相当于 oncheck -ce
命令)要求数据库服务器检查区段(extent):
EXECUTE FUNCTION admin('check extents'); |
sysadmin 数据库中的一些表存储任务属性。使用任务属性(而不是配置参数)来定义调度程序收集的信息以及调度程序运行的语句。
sysadmin 数据库还包含:
task()
函数
admin()
函数
表 | 描述 |
---|---|
PH_TASK | 包含每个任务执行时间和执行方式的相关信息。 |
PH_ALERT | 包含必须监视的错误、警告或信息性消息的列表。 |
PH_GROUP | 包含组名的列表。每个任务都是一个组的成员。 |
PH_RUN | 列出任务,并包含数据库服务器如何和什么时候执行每个任务的相关信息。 |
PH_THRESHOLD | 包含定义的阈值的列表。如果满足一个阈值,任务可以决定采用另一个操作,比如在 PH_ALERT 表中插入一个警告。 |
ph_task 表中的每行都是一个单独的任务(定义为单独的监视事件),每列都是一个任务属性。任务属性指定的内容包括什么时候执行 SQL 语句、存储过程或 UDR,以及如何处理这个任务等等。例如,在每个星期一的午夜自动运行某个作业。
调度程序让数据库服务器能够在预定义的时间执行数据库函数和过程,也可以由服务器自己决定执行的时间。通过使用一个基于 SQL 的管理系统和一组任务,这些函数和过程可以收集信息并监视和调整服务器。
调度程序管理和执行那些安排好的维护、监视和管理任务。可以使用这个工具监视服务器的活动(例如,空间管理,或者以指定的时间间隔自动地备份上一次日志备份之后的所有新日志数据),还可以创建自动运行的纠正操作。
调度程序管理:
一组任务属性控制着调度程序,这些属性定义需要收集什么信息或执行什么操作。任务属性存储 sysadmin 数据库的 ph_task 表中。
这个表中的每行都是一个单独的任务,每列都是一个任务属性。任务属性指定的内容包括什么时候运行 SQL 语句、存储过程或函数,以及如何处理这个任务等等。
例如,可以定义一个任务,在每天的 9:00:00 到 19:00:00 之间每小时检查空闲的日志空间。
只使用任务属性(而不是配置参数)来定义调度程序要收集什么信息或执行什么操作。调度程序在预定义的时间执行任务,也可以根据数据库服务器的需要决定执行的时间。
任务 | 描述 |
---|---|
mon_command_history | 清空命令历史表。 |
mon_config | 保存 ONCONFIG 文件中的任何修改。 |
mon_config_startup | 在每次服务器启动时保存 ONCONFIG 文件。 |
mon_vps | 收集虚拟处理器信息。 |
mon_checkpoint | 保存关于检查点的信息。 |
mon_table_profile | 保存表的配置信息,包括表上发生的更新、插入和删除操作的总数。 |
mon_table_names | 保存表名以及表的创建时间。 |
mon_users | 保存每个用户的配置信息。 |
check_backup | 检查备份操作是否已经运行。 |
可以修改这些任务并设置更多的任务。
要想设置任务,首先需要进行计划。需要掌握以下信息:
如下面的示例所示,可以使用 SQL 在 ph_task 表中插入一行。还可以包含显示在表列中的值。
清单 1 中的示例创建一个称为 mon_chunkio 的表,并使用一个存储过程收集和存储数据。这个任务指示数据库服务器每 5 分钟执行一次存储过程 chunkio 来收集数据。使用默认的调度策略(例如,在每个工作日的 8:00 A.M. 到 5:00 P.M.),但是 7 天之后数据过期并被删除。
INSERT INTO ph_task ( tk_description, tk_result_table, tk_create, tk_execute, tk_frequency, tk_delete ) VALUES ( "Chunk I/O counts and space usage", "mon_chunkio", "create table mon_chunkio (ID integer, chunknum smallint, free integer, size integer, reads integer, pagereads integer, writes integer, pageswritten integer)", "chunkio", "0 0:05:00", "7 0:00:00" ); |
传感器是专门用来收集和保存数据的任务。创建传感器的方法就是在 ph_task 表中插入一行,但是要提供一些额外信息。
要想设置新的传感器,首先需要进行计划。需要掌握以下信息:
清单 2 中的示例显示了一个传感器的代码,它收集关于正在使用的内存量的信息,并将这些信息存储在 mon_memory_system 表中。如果这个表不存在,就创建它。这个任务每 30 分钟运行一次,并删除 mon_memory_system 表中超过 30 天的数据。
INSERT INTO ph_task (tk_name, tk_type, tk_group, tk_description, tk_result_table, tk_create, tk_execute, tk_stop_time, tk_start_time, tk_frequency, tk_delete ) VALUES ("mon_memory_system", "SENSOR", "MEMORY", "Server memory consumption", "mon_memory_system", "create table mon_memory_system (ID integer, class smallint, size int8, used int8, free int8 )", "insert into mon_memory_system select $DATA_SEQ_ID, seg_class, seg_size, seg_blkused, seg_blkfree FROM sysmaster:sysseglst", NULL, NULL, INTERVAL ( 30 ) MINUTE TO MINUTE, INTERVAL ( 30 ) DAY TO DAY); |
修改任务的方法是修改 sysadmin 数据库中以 ph_ 开头的表中的行。
进入 sysadmin 数据库中的 ph_task 表或需要修改的其他表。手工修改任务信息。
sysadmin 数据库中的 command_history 表包含在这个数据库服务器上执行过的 SQL 管理 API 命令的历史信息。