|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre habitué
![]() Luis Inscription : avril 2006 Messages : 436 ![]() |
(sql server 2005)
Bonjour a tous, j'ai creer un trigger qui doit ecrir dans un fichier txt lorsque un INSERT est realisé sur une table specifique. J'ai une question et un probleme a vous soumettre. La question est: Le trigger porte sur la table_A qui se trouve sur la base B (par exemple) Dois je creer le trigger en me connectant d'abord a la base de données oB u se trouve ma table_A? Code :
Code :
Ensuite j'ai re creer le trigger et voila que ça recommence, plus d'insert. Est il possible que le trigger bloque les inserts sur la table? Je donne le code du trigger: Code :
|
||||||
|
|
00
|
|
|
#2 | ||||||
|
Membre Expert
![]() ![]() |
il faut créer le trigger dans la base B.
Rapidement, j'ai constaté une petite coquille dans ton code : Tu as déclaré la variable @View_EventID comme étant un entier, mais tu as oublié de la caster lors de la concaténation dans la chaine @OpC_MsgText. Il en est de même pour les autres variables non littérales. Code :
Exemple renvoyant un message d'erreur Code :
Code :
|
||||||
|
00
|
|
|
#3 |
|
Membre habitué
![]() Luis Inscription : avril 2006 Messages : 436 ![]() |
Salut Étienne
Ça donnerait ceci alors? La syntaxe est OK ? Code :
SET @OpC_MsgText = 'MSG: "' + CAST(@View_EventID AS nvarchar) + '|' + @View_EventType + '|' + @View_Module + '|' + @View_Severity + '|' + @View_EventMsg + '|' + CAST(@View_Time AS nvarchar)+ '"' C'est incroyable non? Merci pour tes conseils. |
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() ![]() |
Citation:
Après correction de la procédure, supprime et recrée le trigger sur la base B puis fait le test |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Luis Inscription : avril 2006 Messages : 436 ![]() |
Ok
c'est ça l'erreur... Code :
SQL Server blocked access TO procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component IS turned off AS part of the security configuration FOR this server. A system administrator can enable the USE of 'xp_cmdshell' BY USING sp_configure. FOR more information about enabling 'xp_cmdshell', see "Surface Area Configuration" IN SQL Server Books Online. |
|
|
00
|
|
|
#6 | |||
|
Membre Expert
![]() ![]() |
Citation:
Code :
|
|||
|
00
|
|
|
#7 |
|
Membre habitué
![]() Luis Inscription : avril 2006 Messages : 436 ![]() |
Bonjour
alors voici les dernieres nouvelles, si je fais un INSERT a la manuel le trigger se declenche et creer le fichier txt..ok Mais normalement c'est mon application qui doit creer les inserts et la ça bloque. J'ai enlevé le rollback que j'avais placer dans la section de capture d'erreur. C'est etrange, si je drop le trigger, toutes les transactions en attente s'inserent, et si je creer de nouveau le trigger, les transaction se rebloques. Quelqu'un a deja vu ça? Comment puis-je debeuger un tel comportement? D'avance merci |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() ![]() |
Peux-tu montrer le bout de code de ton appli qui effectue l'INSERT ?
une remarque à propos de cette ligne Code :
SET @cmd = 'echo ' + @OpC_MsgText + ' > E:\temp\VMwareView-events.txt' par contre en faisant Code :
SET @cmd = 'echo ' + @OpC_MsgText + ' >> E:\temp\VMwareView-events.txt' |
|
00
|
|
|
#9 |
|
Membre habitué
![]() Luis Inscription : avril 2006 Messages : 436 ![]() |
Salut
je oeux pas te montrer le code qui fait l'insert car il s'agit de de WMWARE, lorsque tu entre dans l'admin web ça laisse un EVENT dans la base SQL server, et ce que l'on cherche c'est detecter les EVENT et les relier avec le system d'alert OVO de HP. Ce qui explique le fichier txt avec une seule ligne, c'est exactement ce que l'on recherche car OVO peu lire une ligne de txt et recuperer le contenu pour gerer les alertes. Je vais essayer avec un trigger plus simple d'une seule variable, et qui ecrit dans le txt. |
|
|
00
|
|
|
#10 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 670 ![]() |
Bonjour,
Admettons maintenant que votre table subisse un grand nombre d'INSERT ... Cela m'étonnerait beaucoup que votre base de données tienne le coup en terme de vitesse de traitement ... J'aurai plutôt vu un travail de l'Agent SQL Server, planifié pour s'exécuter toutes les minutes, qui viendrait lire cette table pour en extraire les données dans un fichier. On peut faire cela avec BCP, qui exécute ce style de tâche à une vitesse vertigineuse, ou avec un package SSIS. Cela évite par ailleurs d'ouvrir la brèche de xp_cmdshell ... @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#11 |
|
Membre habitué
![]() Luis Inscription : avril 2006 Messages : 436 ![]() |
Bonjour
ha ok une nouvelle voie. J'ai 2 questions par rapport a ce que tu dit. Existe t-il des documents qui parlent de cette breche de securité de xp_cmdshell? Et d'autre part pourrais tu pointer vers la doc des 2 outils que tu preconise? BCP et SSIS, ça m'aiderais bien pour continuer. D'avance merci |
|
|
00
|
|
|
#12 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 670 ![]() |
Bonjour,
Citation:
En tout cas, on peut toujours faire : Et le résultat peut ne pas faire rire du tout ... De la même façon je suppose qu'on peut faire des attaques par injection en tentant d'exécuter une telle commande ... ou d'autres Citation:
Pour SSIS, Fleur-Anne Blain en a fait une très bonne introduction ici. Je pense que cela devrait suffire pour réaliser l'export @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#13 |
![]() ![]() Administrateur de base de données Inscription : août 2007 Messages : 1 159 ![]() |
Pour ajouter une autre possibilite:
- Lancer une fenetre sqlps.exe (ou executer l'executable - Commande dos et ecrire: sqlps) - Utiliser la commande suivante: invoke-sqlcmd -ServerInstance <instanceName> -Query <la Query> | export-csv <fichier de destination> Ca realise un export en csv de la query passee. Il est aussi possible de passer un script directement a sqlps.exe... |
|
|
10
|
|
|
#14 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 670 ![]() |
Ha classe !
Un petit billet ? @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#15 | ||||
|
Membre habitué
![]() Luis Inscription : avril 2006 Messages : 436 ![]() |
Salut a tous,
alors j'ai essayé cette sintaxe: Code :
Et j'ai cette erreur, j'ai verifier le nom de l'instance avec ceci: Code :
SELECT SERVERPROPERTY ('InstanceName') Et l'erreur: Code :
Comment puis je etre sur? A et dans ma Query remarquez que je place le use [base name] avant le select...Je sais pas trop si je peux faire comme ça. D'avance merci |
||||
|
|
00
|
|
|
#16 | ||
|
Membre habitué
![]() Luis Inscription : avril 2006 Messages : 436 ![]() |
J'ai aussi essayé avec BCP et je n'arrive pas a pointer sur ma base, c'est un nom de base avec des espaces:
Code :
|
||
|
|
00
|
|
|
#17 | |||
|
Membre Expert
![]() ![]() |
Citation:
pour contourner les problèmes de crochets et de parenthèses, tu peux créer une vue SQL et l'utiliser dans le select du BCP. autre chose, il faut indiquer le chemin absolu du fichier de sortie. A+ |
|||
|
00
|
|
|
#18 |
|
Membre habitué
![]() Luis Inscription : avril 2006 Messages : 436 ![]() |
Salut etienne
je comprends pas trop, une vue SQL tu dis? Une vue dans mon jargon c'est une representation en memoire, de données extraites par une query, donc la vue appartient a une base.schema. Dans ce cas, je dois quand meme preciser dans quelle base se trouve cette vue n'est ce pas? Pourrais tu me donner un exemple? D'avance merci |
|
|
00
|
|
|
#19 |
|
Membre habitué
![]() Luis Inscription : avril 2006 Messages : 436 ![]() |
ok j'ai trouvé la forme de le faire:
Code :
bcp "select * from [VMware View Events].dbo.VE_event where EventID=(select MAX(EventID)from [VMware View Events].dbo.VE_event)" queryout "E:\temp\ovoman.dat" -T -c |
|
|
00
|
|
|
#20 | |||||
![]() ![]() Administrateur de base de données Inscription : août 2007 Messages : 1 159 ![]() |
Citation:
J'ai ete legerement incomplet dans la commande: invoke-sqlcmd -ServerInstance <instanceName> -Query <la Query> | export-csv <fichier de destination> Une commande efficace en powershell et disponible avec sqlps donc est la commande get-help qui s'utilise comme ceci par exemple pour vous retourner l'aide sur la commande Invoke-Sqlcmd: Et pour en avoir des exemples d'utilisation: -------------------------- EXAMPLE 1 -------------------------- C:\PS>Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance" NB: Elsuket, je ferai un petit billet la dessus apres les fetes |
|||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com