SQLServer Oracle

Coucou les jeunes, petit problème d’optimisation par ce lundi matin.

Voilà ma situation, j’ai un DTS qui s’amuse à faire quelques opérations sur un SQL Server. Une fois fait, il balance les données dans une base Oracle par le biais d’une connection OleDB Oracle (pas celle fournie par Microsoft).

Mon petit problème c’est que c’est lent. Et pourtant il n’y a que 5 colonne de copier (mais 250.000 lignes).

J’ai un peu cherché par le net mais sans trouver grand chose (ou mal cherché), donc connaissez vous quelques astuces pour accelerer la copie de données entre SQLServer et Oracle ?

J’ai un peu essayé sur les paramètres de transformations mais y a rien de convaincant…

Essais de désactiver certaines contraintes/trigger, d’utiliser des jointures triées, d’augmenter la taille des caches.

a+

C’est déjà tout fait de ce coté là.

Y a quand même une chose qui me choque, c’est qu’un DTS, avec une transformation simple, d’une connection SQL vers une connection OleDB Oracle, ça prend des plombes…

Et quand je passe par une solution SQLServer -> Fichier Texte -> Oracle SQLLoader, ça booste comme c’est pas permis…

J’avais jamais pensé qu’OleDB était si nul entre 2 bases différentes…

J’en profite pour poser une autre question…

Soit une grosse requête avec dedans :

SELECT
  … pleins de champs
(
CASE
 WHEN EXISTS (SELECT TOP 1 * FROM PRICE WHERE ADHESIONCOST = TP_PRICE)
THEN CASE ADHESIONNUMBER
 WHEN 1 THEN (SELECT TP_CODE FROM PRICE WHERE ADHESIONCOST = TP_PRICE AND TP_ADHESIONNUMBER = 1)
 ELSE (SELECT TP_CODE FROM PRICE WHERE ADHESIONCOST = TP_PRICE AND TP_ADHESIONNUMBER IS NULL)
END
 ELSE NULL
 END
) AS ACCOUNT_TARIF,
  … pleins de champs
FROM ADHESION
WHERE
 … pleins de trucs

Avoir rajouté ce CASE ralentit le traitement… C’est optimisable ? Surement, parce qu’un case imbriquée, c’est pas malin…

Edit: Fautes.
Ce message a été édité par Xas le 06/04/2004

un select dans une clause select c’est pas bien.

J’ai plus de temps.

Il faut que tu fasses une requête qui ressemblerai plutôt à quelque chose comme cela (schématiquement):

SELECT plein de champs
FROM ADHESION (jointures) PRICE
WHERE clause_where

Tu mets bien les jointures qu’il faut.
Tu rajoutes les clauses WHERE nécessaires
Tu rajoutes des IN ou EXISTS au niveau des clauses WHERE si nécessaire.

Et enfin dans une dernière étape seulement tu utilises des CASE au niveau du select.

Dans ton cas ce ne sont pas les CASE qui ralentissent réellement ta requête, c’est l’architecture même de ta requête qui est à revoir de fond en comble