Dbcc shrinkdatabase (transact-sql)
adatbázis_neve | adatbázis_id | 0
A tömörítendő adatbázis neve vagy azonosítója. Ha 0 van megadva, az aktuális adatbázist használja.
Az adatmentés után az adatbázisban maradt szabad terület százalékos aránya.
Tömöríti az adatokat a fájlokban az elosztott oldalaknak a fájl végéről a nem kezelt oldalak helyére történő mozgatásával a fájl elején. A target_percent argumentum opcionális.
A fájl végén található szabad terület nem kerül vissza az operációs rendszerbe, és a fizikai fájlméret nem változik. Ezért, ha a NOTRUNCATE argumentum meg van adva, akkor az adatfájlok tömörítése elhanyagolható.
A NOTRUNCATE argumentum csak az adatfájlokra vonatkozik. A naplófájl nincs hatással.
Felszabadítja az összes szabad területet a fájl végén az operációs rendszerhez, de nem mozgatja a fájlban lévő oldalakat. Az adatfájl csak az utolsó kiválasztott mértékig csökken. A target_percent argumentum nem kerül feldolgozásra, ha a TRUNCATEONLY argumentum meg van adva.
A TRUNCATEONLY argumentum befolyásolja a naplófájlt. Csak az adatfájl csonkításához használja a DBCC SHRINKFILE utasítást.
Tiltja az összes információs üzenetet 0-tól 10-ig.
A megadott adatbázis összes adatainak és naplófájljainak tömörítéséhez adja ki a DBCC SHRINKDATABASE parancsot. Egy adott adatfájl vagy naplófájl tömörítéséhez a megadott adatbázisban adja ki a DBCC SHRINKFILE parancsot.
A DBCC SHRINKDATABASE műveletek leállíthatók a folyamat bármely szakaszában, és az összes elvégzett munka mentésre kerül.
Az adatbázis mérete nem lehet kisebb, mint az adatbázis minimális mérete. A minimális méret az adatbázis létrehozásakor megadott méret, vagy az utolsó méret, amelyet kifejezetten a fájlméret-művelet határoz meg, például DBCC SHRINKFILE vagy ALTER DATABASE. Például, ha 10 MB méretű, majd 100 MB-ig terjedő adatbázisot hoztak létre, akkor csak 10 MB-ra lehet tömöríteni, akkor is, ha az összes adat törlődik az adatbázisból.
Működés DBCC SHRINKDATABASE megadása nélkül a paraméter NOTRUNCATE vagy TRUNCATEONLY egyenértékű DBCC SHRINKDATABASE műveletet a paraméter NOTRUNCATE elvégzése után DBCC SHRINKDATABASE a TRUNCATEONLY paraméterrel.
A tömöríthető adatbázisnak nem kell egyfelhasználós üzemmódban lennie. Más felhasználók is együttműködhetnek az adatbázisban, amikor tömörítik. Ez vonatkozik a rendszer adatbázisaira is.
Nem lehet tömöríteni az adatbázist, amíg biztonsági másolatot készít. Ezzel szemben egy tömörítési művelet során nem készíthet biztonsági másolatot az adatbázisról.
DBCC SHRINKDATABASE parancs
A DBCC SHRINKDATABASE utasítás egyszerre tömöríti az adatfájlokat, és a naplófájlok, mintha mindegyike egy összefüggő folyóirat-poolot jelentene. A fájlok tömörítése mindig a végéről történik.
Tegyük fel, hogy létezik egy adatbázis, az mydb néven. amely rendelkezik egy adatfájllal és két naplófájllal. Minden adat és naplófájl 10 MB méretű, az adatfájl pedig 6 MB adat.
Összetevő Az Adatbázis motor kiszámolja az egyes fájlok célméretét. Ez az a méret, amelyre az adatfájlt tömöríteni kell. Ha a DBCC SHRINKDATABASE utasítás a target_percent argumentummal van megadva. akkor a komponens adatbázismotor kiszámolja a célméretet úgy, hogy a tömörítés után a fájlban a szabad terület cél_percent százaléka jött létre. Például, ha megadja a target_percent argumentumot, amelynek értéke 25, hogy tömörítse az mydb-adatbázist. összetevő Az Adatbázis motor kiszámolja a 8 MB-os fájl méretét (6 MB adat és 2 MB szabad terület). Ezért a komponens adatbázismotor az adatfájl utolsó 2 MB-ról minden adatot átmásol az adatfájl első 8 MB-in található szabad területére, majd tömöríti a fájlt.
Tegyük fel, hogy az adatbázis adatállománya mydb 7 MB adatot tartalmaz. Amikor a target_percent érték 30-as értéket ad meg, akkor ezt az adatfájlt 30% -ra tömörítheti. Ugyanakkor a target_percent 40-es értékének beállítása nem teszi lehetővé az adatfájl tömörítését, mert az Adatbázis-motor nem tudja csökkenteni a fájlt olyan méretre, amely kisebb, mint az adatok jelenleg. Ez a helyzet más módon is képviselhető: a kívánt szabad terület 40 százaléka + a teljes adatfájl 70 százaléka (7 MB 10 MB) több mint 100 százalék. Mivel a szabad százalékban kifejezett százalékos arány és az adatfájl által elfoglalt aktuális százalék meghaladja a 100-at (10 százalék), a cél_size bármely értékét. A 30-nál nagyobb érték nem tömöríti az adatfájlt.
A naplófájlokhoz az adatbázismotor-összetevő a cél_percent argumentumot használja a teljes napló célméretének kiszámításához. Ezért a target_percent argumentum a tömörítés után a naplóban lévő szabad terület mennyisége. A teljes napló célméretét ezután újraszámolják az egyes naplófájlok célméretére.
A DBCC SHRINKDATABASE utasítás megpróbálja azonnal összenyomni a fizikai naplófájlokat a célméretre. Ha nem része a logikai log nem kerül a virtuális log fájlokat, amelyek mérete meghaladja a cél méret a log fájlt, a fájl sikeresen csonka és DBCC SHRINKDATABASE nyilatkozat nélkül befejeződik az üzeneteket. Azonban, ha része a logikai napló tárolja a virtuális naplók túl a megadott méretű, a Database Engine felszabadítja annyi helyet, mint lehetséges, majd létrehoz egy tájékoztató üzenet. Jelentés leírja a lépéseket meg kell tennie, hogy mozog a logikai log ki a virtuális naplók végén a fájlt. Miután az összes akció DBCC SHRINKDATABASE nyilatkozatot lehet használni, hogy kiszabadítsa a fennmaradó helyet.
Mivel a naplófájl csak a virtuális naplófájl határába tömöríthető, a naplófájl a virtuális naplófájlméretnél kisebb méretre nem tömöríthető, még akkor sem, ha nem használja. A naplófájlok létrehozása vagy kiterjesztése során dinamikusan választja ki a virtuális naplófájl méretét az Adatbázis-motor.
ajánlások
Az adatbázis-tömörítés tervezésekor vegye figyelembe a következő információkat.
A tömörítési művelet legnagyobb hatása akkor érhető el, ha egy olyan művelet után kerül alkalmazásra, amely sok fel nem használt helyet hoz létre, például egy táblázat csonkolása vagy egy táblázat törlése után.
A legtöbb adatbázishoz szükség van szabad helyre a szokásos napi műveletek elvégzéséhez. Ha az adatbázis tömörítését rendszeresen végezzük, de ismét megnöveli a méretét, ez azt jelenti, hogy a tömörítés alatt szabad tér a normál működéshez szükséges. Ilyen esetekben az adatbázis újbóli tömörítése értelmetlen.
A tömörítési művelet nem szünteti meg az indexek töredezettségét az adatbázisban, és általában még erősebb fragmentációhoz vezet. Ez egy másik ok, amiért nem szabad rendszeres tömörítést végezni.
Ne állítsuk be az AUTO_SHRINK adatbázis paramétert BE ok nélkül.
Problémák elhárítása
A tömörítési műveleteket blokkolhatja egy elkülönítési szinttel futó tranzakció, amely a sorok verziókezelésén alapul. Például, amikor végez egy nagyszabású eltávolítási művelet elkülönítési szintje alapján sorban verziószámozást, a manuális DBCC ZSUGORODÓ adatbázist, majd, mielőtt egy tömörített fájlt, akkor várjon a befejezése a törlési művelet. Ebben az esetben a művelet DBCC SHRINKFILE és DBCC SHRINKDATABASE kiadási információs üzenetet (5202 és 5203 az SHRINKDATABASE az SHRINKFILE) a hiba log SQL Server 5 percenként az első órában, majd egy üzenetet óránként. A hibaüzenet például a következő hibaüzenetet tartalmazza:
Ez azt jelenti, hogy a zsugorodási művelet blokkolta ügylet pillanatfelvétel, amelyek időpecsétje régebbi, mint a védjegy 109 képviselő az utolsó tranzakció befejeződik a tömörítési művelet. Ez is azt mutatja, hogy az oszlopokat transaction_sequence_num first_snapshot_sequence_num vagy dinamikus vezetés képviselet sys.dm_tran_active_snapshot_database_transactions (-SQL) értékét tartalmazza 15. Ha az oszlopok vagy transaction_sequence_num first_snapshot_sequence_num bevezetése tartalmaznak kevesebb, mint az utolsó végrehajtott művelet kompressziós lépésben (109), a tömörítési művelet várni fogja a tranzakciók befejezését.
Ezt a problémát az alábbi módszerek valamelyikével oldhatja meg:
Hagyja abba a tranzakció végrehajtását, amely blokkolja a tömörítési műveletet.
Zárja le a tömörítési műveletet. Minden befejezett munka mentésre kerül.
Amíg a tömörítési művelet vár a blokkoló tranzakció befejezésére, semmit sem kell tenni.