|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : mars 2007 Messages : 248 ![]() |
Bonjour
Sans vraiment connaître Sybase, je dois intervenir sur une BD pour supprimer certaines données et rendre impossible toute leur récupération. Pouviez-vous m'indiquer les actions à faire après exécution de la purge via Transact SQL ? Suffit-il de purger le journal des transactions ? Peut-on garantir alors que, même pour le plus chevronné de DBA, toute récupération est devenue impossible ? Cette intervention sur le journal, peut-elle représenter un risque pour la consistance de la base ? Merci mso |
|
|
00
|
|
|
#2 |
![]() ![]() |
Effacer les données dans une table revient en général à marquer des-allouer la ligne, mais ne va pas physiquement changer les données sur le disque tant qu'une autre ligne ne prend pas sa place. Si tu veux que les données soient effectivement illisibles même avec une lecture physique des pages (via dbcc page, par example) alors je suggère de faire la purge en deux fois: d'abord tu fais un update des lignes à purger avec des données bidons, et ensuite tu effaces.
Pour ce qui du transaction log - c'est une queue circulaire qui est tronquée de temps en temps (soit automatiquement si l'option "truncate log on checkpoint" est positionnée pour la base, soit via une opération manuelle ou scriptée de "dump transaction", ou encore via une proc de type sp_thresholdaction). Donc après suffisamment d'activité d'update dans la base la queue circulaire a été complètement utilisée, et les données précédantes ne sont plus lisibles. (reste ensuite évidemment les sauvegardes qui contiennent encore les anciennes données, mais je suppose que celle-là doivent rester dispo...) Michael
__________________
Michael Peppler Membre de TeamSybase - www.teamsybase.com "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson |
|
|
00
|
|
|
#3 | |
|
Membre du Club
![]() Inscription : mars 2007 Messages : 248 ![]() |
Citation:
Mais alors :
Une autre idée: pensez-vous que faire un dump suivi aussitôt d'un load dans la même base, peut résoudre le problème en supprimant définitivement les traces des données d'origine ? Je crois que même là on ne peut pas le garantir ... Merci |
|
|
|
00
|
|
|
#4 | ||
![]() ![]() |
Un dump + load ne devrait rien changer vu que le dump est une copie physique des pages allouées, et le load fait un rechargement de ces pages. Peut-être que les pages non-allouées sont ré-initialisées lors du load, mais j'en doute.
Pour le reste - un update n'est pas nécessairement un delete+insert. Si c'est possible ASE va faire un update "in place", mais c'est vrai que dans bon nombre de cas (existence de trigger, en particulier) ASE va faire un "deferred" update. Je ne vois pas vraiment d'autre moyen de réellement effacer les données - sauf peut-être écrire une routine qui crée des records bidons dans une table bidon utilisant le même segment (même device physique) et remplir la database de cette façon, puis faire un truncate de la table bidon... qqch du genre: Code :
C'est pas très joli, mais cela devrait avoir l'effet voulu. Michael
__________________
Michael Peppler Membre de TeamSybase - www.teamsybase.com "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson |
||
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : mars 2007 Messages : 248 ![]() |
Bonjour Michael
Je suis intéressée par ton idée, mais j'ai une petite crainte: Dans ma future base (copie exacte d'une bd de prod existante) j'aurai 2 devices:
Ma question donc: En exécutant les insertions bidon pour forcer l'écriture/écrasement des données supprimées dans le segment default, ne risque-t-on pas de consommer l'espace du segment system et bloquer ainsi la base ? Comment Sybase peut s'arrêter au segment default, alors qu'il semble "partager" espace disponible du device avec celui de system ? Comment est gérée l'affectation/la distribution d'espace entre ces 2 segments au sein d'un même device? Merci P.S. Je suis en phase d'étude, la base n'existe pas encore et je ne peux pas le tester. |
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : avril 2007 Messages : 15 ![]() |
Oui par défault les egments system et default partage le meme espace physique (même device)
si ce comportement ne convient pas il faut "corriger" la répartition des segments sur les devices avec les procedures sp_extendsegment et sp_dropsegment |
|
|
00
|
|
|
#7 | |
![]() ![]() |
Citation:
Dans le cas particulier la base va se remplir à 100% avec tes inserts, et la table sera ensuite tronquée (libérant ainsi la place). Il y aura un court instant où les tables système ne pourrons pas grandir, mais cela ne devrait pas porter à conséquence puisque ces tables sont en général assez statiques. Donc je ne vois pas de problème fondamental à cet exercice - sauf que la transaction log va se remplir avec tous les inserts. Donc je te suggère de mettre ta base de test en mode "truncate log on checkpoint" pour que la gestion du transaction log soit automatique. Michael
__________________
Michael Peppler Membre de TeamSybase - www.teamsybase.com "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson |
|
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : mars 2007 Messages : 248 ![]() |
Bonjour
D'abord merci à parsonnes m'ayant répondu. Selon le support Sybase l'action du serveur lors du DELETE dépend du type de lock attribué à la table.
Je vais tester ces 2 cas avec bcp demain et vous tiendrais au courant. Toutes mes tables ont l'attribut "lock all page". Mais par précaution, je pense que je vais forcer l'écrasemnt par insert comme Michael l'a suggéré. Merci de votre attention. mso |
|
|
00
|
|
|
#9 |
![]() ![]() |
Pour le cas 1 (table en mode APL), les données peuvent probablement être lues si la ligne éffacée était la dernière sur la page (dans ce cas la compaction des données sur la page ne va pas écrire par dessus la ligne). Ces données peuvent être lues avec un outil OS (od, strings, etc. pour autant qu'on ait le droit en lecture sur le device physique). Et ces données peuvent être lues depuis ASE via dbcc page().
Pour le cas 2 (table en mode DOL) les données ne seront (potentiellement) éffacée que lors d'un reorg rebuild ou reorg compact, ou alors si ASE a besoin de la place pour mettre autre chose. Ceci étant je ne sais pas (et je n'ai jamais fais de tests) à quel point ASE "casse" les données éffacées lors d'un REORG ou d'une opération de delete dans une table APL - donc si on veut être sur je pense qu'une opération de "blanchissage" du style de ce que j'ai suggéré plus haut est recommandée. Michael
__________________
Michael Peppler Membre de TeamSybase - www.teamsybase.com "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson |
|
|
00
|
|
|
#10 |
|
Membre du Club
![]() Inscription : mars 2007 Messages : 248 ![]() |
Bonjour
Voici le résultat de mes tests fait avec dbcc page:
Merci pour vos précieuses idées mso |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com