Jelenleg egy MS SQL Server 2008 R2 DB kiszolgálóm van használatban egy termelési alkalmazással.
Az alkalmazás új fejlesztéséhez most meg kell növelni a táblázatban a varchar(100)
oszlop hosszát.
Ennek hossza a prod DB meglévő oszlopát növelni lehet az aktuális adatok befolyásolása nélkül?
Ezt a változást a munkaidőn kívüli időben kell befejezni a szolgáltatás megszakításának elkerülése érdekében?
Válasz
Ha varchar(100 - 8000)
-re (azaz bármi másra, mint varchar(max)
) növeli, és ezt a TSQL-en keresztül hajtja végre, nem pedig az SSMS GUI-n keresztül
ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
és nem változtatja meg az oszlop semmisségét NULL
-ről NOT NULL
( amely lezárná a táblázatot, miközben az összes sort érvényesítik és potenciálisan írják ) vagy NOT NULL
és NULL
bizonyos körülmények között , akkor ez csak a metaadatok gyors változása. Lehet, hogy meg kell várnia egy SCH-M
zárat az asztalon, de miután rájön, hogy a változás nagyjából azonnali lesz.
Az egyik figyelmeztetés, amellyel tisztában kell lenni: hogy a SCH-M
lezárás várakozása alatt más lekérdezéseket blokkolunk, ahelyett, hogy a sor előtte ugranánk, ezért érdemes megfontolni egy SET LOCK_TIMEOUT
először.
Ügyeljen arra is, hogy a ALTER TABLE
utasítás, amelyet kifejezetten megadsz NOT NULL
, ha ez az eredeti oszlopállapot, különben az oszlop megváltozik a NULL
engedélyezéséhez.