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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük