Bonjour,

Voici mon code actuel pour compacter mes bases :

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
 
public static void compression (String backupdirectory){
		Connection conn = conn1; 
		String nom = "Base1";
		for (int i = 0; i <= 2; i = i+1 )
		{
			switch (i)
			{
			case 1:
				conn = conn2;
				nom = "Base2";
				break;
			case 2:
				conn = conn3;
				nom = "Base3";
				break;
			}
			try
			{
				CallableStatement cst = conn.prepareCall
						("CALL SYSCS_UTIL.SYSCS_DISABLE_LOG_ARCHIVE_MODE(?)");
				cst.setInt(1, 1);
				cst.execute();
				cst.close();
 
				PreparedStatement stmt =  conn.prepareStatement("SELECT tablename as TableName, " +
						"SYSCS_UTIL.SYSCS_CHECK_TABLE(schemaname, tablename) AS OK " +
						"FROM sys.sysschemas s, sys.systables t WHERE s.schemaid = t.schemaid and t.tabletype = 'T'");
				ResultSet results = stmt.executeQuery ();
 
				String maTable = null;
 
				SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMdd" );
				String backupdirectory ="C:/Essai/backup" + nom + sdf.format(new Date( System.currentTimeMillis()));
 
				cst = conn.prepareCall
						("CALL SYSCS_UTIL.SYSCS_CHECKPOINT_DATABASE()");
				cst.execute();
				cst.close();
 
				cst = conn.prepareCall
						("CALL SYSCS_UTIL.SYSCS_DISABLE_LOG_ARCHIVE_MODE(?)");
				cst.setInt(1, 1);
				cst.execute();
				cst.close();
 
				while(results.next())
				{
					maTable = results.getString("TABLENAME");
					System.out.println("ma table : " + maTable);
 
					PreparedStatement stmt1 =  conn.prepareStatement("SELECT * FROM TABLE(SYSCS_DIAG.SPACE_TABLE(?, ?)) AS T");
					stmt1.setString(1, user);
					stmt1.setString(2, maTable);
					System.out.println("stmt: " + stmt1.toString());
					ResultSet results1 =   stmt1.executeQuery ();
					if (results1.next())
					{
						System.out.println("ESTIMSPACESAVING : " + results1.getString("ESTIMSPACESAVING"));
						System.out.println("NUMFREEPAGES : " + results1.getString("NUMFREEPAGES"));
					}
 
					cst = conn.prepareCall
							("CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE(?, ?, ?)");
					cst.setString(1, user);
					cst.setString(2, maTable);
					cst.setShort(3, (short) 1);
					cst.execute();
 
					System.out.println("Fin compression table " + maTable );
				}
 
				results.close();
				conn.commit();
 
				cst = conn.prepareCall
						("CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE_AND_ENABLE_LOG_ARCHIVE_MODE(?, ?)");
				cst.setString(1, backupdirectory);
				cst.setInt(2, 1);
				cst.execute(); 
				cst.close();
				System.out.println("backed up database to "+backupdirectory);
 
				cst.close();
				System.out.println("compressed database to " + nom);
			}
			catch (SQLException sqlExcept)
			{
				sqlExcept.printStackTrace();
			}
		}
	}
Mes 2 principales bases font 270 Mo une fois compacté alors que si je recréé une autre base en y recréant les tables et en important les données, elles passent à moins de 17 Mo....
Je ne vois pourquoi je n'arrive pas à reduire d'avantage...