<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SQL Server (και άλλες databases)</title><link>https://www.dotnetzone.gr:443/cs/forums/28/ShowForum.aspx</link><description>Θέματα που αφορούν τον SQL Server (7.0, 2000, 2005) αλλά και Oracle, Access, DB2, MySQL, κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Delete χωρίς εγγραφή στο transaction log</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/6895.aspx</link><pubDate>Wed, 09 Nov 2005 01:16:11 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6895</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/6895.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=6895</wfw:commentRss><description>Γαμ$%το! Όλα τα ωραία posts πέφτουν όταν λείπω...</description></item><item><title>Απ: Delete χωρίς εγγραφή στο transaction log</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/6893.aspx</link><pubDate>Wed, 09 Nov 2005 00:29:13 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6893</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/6893.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=6893</wfw:commentRss><description>Νομίζω οτι καλύφθηκα. Ευχαριστώ!&lt;br&gt;</description></item><item><title>Απ: Delete χωρίς εγγραφή στο transaction log</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/6890.aspx</link><pubDate>Tue, 08 Nov 2005 23:32:54 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6890</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/6890.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=6890</wfw:commentRss><description>&lt;P&gt;Δεν υπάρχει τρόπος να διαγράψει κανείς εγγραφές χωρίς να καταγραφούν στο transaction log, εκτός και αν εκτελέσει το truncate table. Ο λόγος είναι ότι οι αλλαγές στον SQL Server (αλλά και κάθε άλλη βάση) καταγράφονται πάντα για να αποφευχθεί η περίπτωση να "κτυπήσει" η βάση την ώρα που καταχωρεί τις αλλαγές στο σκληρό και στις εσωτερικές δομές του. Διαφορετικά,θα υπήρχε κίνδυνος να διαγραφεί μια γραμμή αλλά να φαίνεται σαν γεμάτη ή το αντίστροφο.&lt;/P&gt;
&lt;P&gt;Για να μπορέσει κανείς να τροποποιήσει μαζικά πολλές εγγραφές (update, delete) αποφεύγοντας να γεμίσει το transaction log και να κλειδώσει τους άλλους χρήστες ενός πίνακα υπάρχουν μερικοί τρόποι.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Μία λύση είναι να χρησιμοποιήσει ένα static cursor που θα επιστρέφει τα ID των εγγραφών που χρειάζεται να τροποποιηθούν και μέσα στον cursor να εκτελεί τα update/delete. Είναι ίσως μία από τις ελάχιστες φορές που έχει νόημα να χρησιμοποιηθεί ένα cursor. Δεν είναι βέβαια και τόσο γρήγορη λύση επειδή καταλήγει σε πολλές εκτελέσεις του update/delete.&lt;/LI&gt;
&lt;LI&gt;Μια άλλη λύση είναι να σπάσει το delete ή update σε batches χρησιμοποιώντας την εντολή SET ROWCOUNT.&lt;BR&gt;&amp;nbsp; SET ROWCOUNT 1000 &lt;BR&gt;&amp;nbsp; WHILE (1=1) BEGIN&amp;nbsp; &lt;BR&gt;&amp;nbsp; BEGIN TRANSACTION &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UPDATE...set ...,MyLastUpdate='date',...WHERE &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyLastUpdate &amp;lt; 'date'&amp;nbsp; &lt;BR&gt;&amp;nbsp; -- Update 1000 nonupdated rows &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF @@ROWCOUNT = 0 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BEGIN &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COMMIT TRANSACTION &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BREAK &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; END &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COMMIT TRANSACTION &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; END&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Τέλος, η ταχύτητα μπορεί να βελτιωθεί αν το update/delete query περιέχει κάποιο FROM χρησιμοποιώντας table hints όπως το NOLOCK.&lt;/P&gt;</description></item><item><title>Απ: Delete χωρίς εγγραφή στο transaction log</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/6889.aspx</link><pubDate>Tue, 08 Nov 2005 22:44:50 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6889</guid><dc:creator>patrick</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/6889.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=6889</wfw:commentRss><description>&lt;P&gt;Ο μόνος άλλος τρόπος που μπορώ να σκεφτώ είναι να κάνεις export τα δεδομένα που θες να κρατήσεις (ίσως με DTS?) σε ένα αρχείο, και μετά να τα ξαναβάλεις στην βάση με bcp, που μπορεί να παίξει χωρίς logging.&amp;nbsp; Είναι βέβαια σαν να προσπαθείς να πιάσεις το αριστερό σου αυτί με το δεξί σου χέρι πίσω από το κεφάλι σου...&lt;/P&gt;</description></item><item><title>Delete χωρίς εγγραφή στο transaction log</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/6887.aspx</link><pubDate>Tue, 08 Nov 2005 21:36:00 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6887</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/6887.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=6887</wfw:commentRss><description>&lt;P&gt;Το πρόβλημα:&lt;/P&gt;
&lt;P&gt;Υπάρχει μια εφαρμογή που τρέχει live.&lt;/P&gt;
&lt;P&gt;Χρειάζεται να γίνει ένα μεγααααλο delete με τον εξής τρόπο: Delete from sometable where somefield=somevalue. Αυτό θα διαγράψει αρκετές εκατοντάδες χιλιάδες εγγραφές. Δεν θέλουμε όμως να γραφτούν στο transaction log αυτά για διάφορους λόγους. Τα deletes αυτά θα γίνουν σε διάφορους πίνακες οι οποίοι έχουν γενικά constraints.&lt;/P&gt;
&lt;P&gt;Truncate, αλλαγή του recovery κλπ. δεν παίζουν στο συγκεκριμένο σενάριο. &lt;/P&gt;
&lt;P&gt;Η ερώτηση:&lt;/P&gt;
&lt;P&gt;Υπάρχει τρόπος να μην περιληφθούν στο transaction log αυτά τα deletes?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item></channel></rss>