Salut a tous.

Bon j'ai un petit souci avec ma base postgresql 8.1.
En effet, il a ete mis en place sur le serveur linux (Ubuntu 6.06 lts) une procedure (en perl, planifiee chaque nuit) qui permet dans un premier temps de faire vacuum sur sur toutes mes bases (y'en a 183), vacuumdb, puis un reindexdb, et enfin, une sauvegarde avec pg_dump.

Voila ce script :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#! /usr/bin/perl
 
# day of week
use POSIX qw(strftime);
my $day=strftime("%a", localtime());
 
my $argument = $ARGV[0]; # just in case
my $pgdir = "/home/postgresql/";
my $pgbin = $pgdir."bin/";
my $savedir = $pgdir."/dumpdatabase/".$day."/";
my $dblist = $savedir."list.out";
my $pguser = "postgres";
my $pgport = "5442";
my $savedirwin = $pgdir."mnt/devwin1/phptmp/dumpdatabase/";
 
system("rm -rf $savedir");
system("rm -rf $savedirwin".$day."/");
system("mkdir $savedir");
 
# vacuum databases
system("echo \"Performing vacuum on all databases\"");
system($pgbin."vacuumdb -a -U $pguser -p $pgport"); 
system("echo \"Performing reindex on all databases\""); 
system($pgbin."reindexdb -a -U $pguser -p $pgport");
 
# create database list
system($pgbin."psql -U $pguser -p $pgport -l > $dblist");
 
unless(open(INPUT, $dblist))
{
	die("cannot open $dblist\n");
}
 
my $i=0;
while(<INPUT>)
{
	$line=$_;
	chomp($line);
 
	if($i>2)
	{
		my $start=1;
		my $end=index($line, "|");
 
		# for each database		
		if($end!=-1)
		{
			my $dbname=substr($line, $start, $end-1);
			$dbname =~ s/^\s+//; # trim spaces
			$dbname =~ s/\s+$//;
 
			if($dbname !~ m/^$pguser$/) # do not dump/restore maintenance database
			{
				system("echo \"Performing vacuum large objects on '$dbname'\"");
				system($pgbin."vacuumlo -U $pguser -p $pgport $dbname");
 
				system("echo \"Dumping '$dbname'\"");
				system($pgbin."pg_dump -O -U $pguser -p $pgport -i -Ft $dbname > ".$savedir.$dbname.".tar");
 
				if($day !~ m/^Fri$/) # delete blobs if not Friday
				{
					system($pgdir."scripts/dropblob.sh ".$savedir." ".$dbname);
				}
			}
		}
	}
	$i++;
}
 
system("echo \"Copying $savedir to $savedirwin\"");
system("cp -r $savedir $savedirwin");
system("echo \"All done\"");
Le probleme, c'est que ce script tourne depuis plusieurs annees, sans aucun probleme, mais depuis quelques jours, il plante regulierement...
Et apparement, ca plante pendant le reindexage. Et suite a ca, postgresql n'est plus accessible (j'ai des database failure).
Je fais ecrire dans un fichier ce qu'il se passe, mais je n'ai pas de message d'erreur. Donc j'ai tente de faire un reindexdb a partir d'une fenetre de commande, et la, je me rends compte que le reindexdb plante de facon aleatoire. Une fois sur une base, une autre fois sur une autre, pas tout le temps sur la meme table (chaque base comporte les memes tables). Et j'ai eu par exemple aujourd'hui deux messages d'erreur differents :

1)- reindexdb: reindexing of database "xxxx" failed: ERROR: could not sync relation 1663/146801/35984216: Input/output error

2)- reindexdb: reindexing of database "yyyy" failed: ERROR: PANIC: could not fdatasync log file 24, segment 53: Input/output error

Par contre, la ca plante, mais ca ne me bloque pas ma base...

Donc voila, je ne sais pas ce qu'il peut se passer.

Si quelqu'un a une petite idee, merci de bien vouloir eclairer ma lanterne...

Merci d'avance, jinpol...