Сравнение поддерживаемых
Теперь рассмотрим один из способов обращения с очень большими наборами данных. Вам может потребоваться загрузить данные в более сложную базу данных SQL (коммерческую или нет) и запрашивать из нее информацию, используя SQL. Тем, кто не знаком с SQL, я рекомендую ознакомиться с приложением D «Пятнадцатиминутное руководство по SQL», перед тем как смотреть на этот пример.
Заполнить базу данных можно так:
use ОВГ
use Sys .
$db = "drib":
ищем месгоголожс.чие iasr (-х '/bin/last" and $]astex = "/от/ lasc")
(-x "/usr/ucb/last" ana Slastex = '/азг7ьсо.' ;ast"):
подсоединяемся к базе даинь.х Sybase
переходим иа базу данных, которую мы будем использовать$dbh->do("use $db") or die "Невозможно перейти к $db: ".$dbh->errstr."\n";
в
создаем таблицу iastinfo, если ее еще не существует unless ($dbh->selectrow_array(q{SELECT name from sysobjects WHERE name="lastinfo"})){
$dbh->do(q{create table Iastinfo (username char(8),
localhost char(40), otherhost varchar(75), when char(18))}) or
die "Невозможно создать таблицу Iastinfo: ".$dbh->errstr."\n"; }
Sthishost = Shostnanie:
$sth = $dbh->prepare(
qq{INSERT INTO lastinfo(username,localhost,otherhost.when) VALUES (?, 'Sthishosf, ?, ?)}) or die
"Невозможно подготовить запрос insert: ". Sdrj.h-^errstr , "\n":
open(LAST."Slastexj") or die "Невозможно выполни:» программу Slastex
while (<LAST>){
next if /"reboot\.s/ or /'shutdown'.s/ or
/"ftp';S/ or / "ivt-rpv.s/:
$wher> = $!non " ".Scare." ". $tme:
Sst1-->sxec-J'te;$j3e',SbcЈt.$/.ter^ close(LAST);
$c)bh->di scanned;
Теперь можно использовать базу данных по назначению. Вот набор простеньких SQL-запросов, которые легко можно выполнить из Perl при помощи интерфейсов DBI или ODBC, о которых мы говорили в главе 7 «Администрирование баз данных SQL»:
-- сколько всего записей в таблице
9 select count (*) from lastinfo;
10068
-- сколько пользователей было зарегистрировано
9 select count (distinct username) from lastinfo;
237
-- сколько различных узлов устанавливали соединение с нашими машинами
select count (distinct otherhost) from lastinfo;
1000
-- на каких локальных машинах регистрировался пользователь
"dr.b"? select distinct localhost from lastinfo where username = "dnb": localhost
hostl host2
Эти примеры должны помочь читателю прочувствовать, как можно «исследовать» данные, когда они хранятся в настоящей базе данный Каждый из этих запросов требует для выполнения лишь около секунды. Базы данных могут быть быстрым, мощным инструментом дл системного администрирования.
Анализ журналов - бесконечная тема для разговора. К счастью, 1 глава снабдила вас кое-какими инструментами и некоторым вдохновением.