Секционированные таблицы и индексы SQL Server 2005 - Управление второй каскадной таблицей ("выключаемой")

ОГЛАВЛЕНИЕ

 

Управление второй каскадной таблицей ("выключаемой")

  1. Создайте вторую каскадную таблицу - это пустая таблица, которая будет хранить данные отключаемой секции.

    CREATE TABLE SalesDB.[dbo].[OrdersOctober2002]
    (
    [OrderID] [int] NOT NULL,
    [EmployeeID] [int] NULL,
    [VendorID] [int] NULL,
    [TaxAmt] [money] NULL,
    [Freight] [money] NULL,
    [SubTotal] [money] NULL,
    [Status] [tinyint] NOT NULL,
    [RevisionNumber] [tinyint] NULL,
    [ModifiedDate] [datetime] NULL,
    [ShipMethodID] [tinyint] NULL,
    [ShipDate] [datetime] NOT NULL,
    [OrderDate] [datetime] NOT NULL,
    [TotalDue] [money] NULL
    ) ON [FG1]
    GO

  2. Проиндексируйте каскадную таблицу - она должна иметь такой же кластерный индекс, как и таблица, в которую планируется добавить секцию (секция станет этой таблицей).

    ALTER TABLE [OrdersOctober2002]
    ADD CONSTRAINT OrdersOctober2002PK
    PRIMARY KEY CLUSTERED (OrderDate, OrderID)
    ON [FG1]
    GO

Исключите старые данные из секционированной таблицы и добавьте новые.

  1. Отделите старые данные от основной таблицы - переключите их во вторую каскадную таблицу.

    ALTER TABLE Orders
    SWITCH PARTITION 1
    TO OrdersOctober2002
    GO

  2. Измените функцию секционирования для того, чтобы удалить граничную точку октября 2002.

    ALTER PARTITION FUNCTION TwoYearDateRangePFN()
    MERGE RANGE ('20021031 23:59:59.997')
    GO

  3. Следующий оператор удаляет ассоциацию между файловой группой и схемой секционирования. Другими словами, FG1 больше не является частью схемы секционирования. А поскольку вы будете размещать новые данные всё в тех же 24 секциях, то вам придется сделать FG1 "next used" секцией. Иначе говоря, это будет следующая используемая секция.

    ALTER PARTITION SCHEME TwoYearDateRangePScheme
    NEXT USED [FG1]
    GO

  4. Измените функцию секционирования для того, чтобы добавить новую граничную точку октября 2004.

    ALTER PARTITION FUNCTION TwoYearDateRangePFN()
    SPLIT RANGE ('20041031 23:59:59.997')
    GO

  5. Измените ограничение целостности базовой таблицы (если такое существует) для того, чтобы расширить диапазон данных. Поскольку добавление ограничения целостности может стать дорогостоящей операцией (из-за проверки данных), то в данном случае наилучшее решение - это растянуть диапазон дат вместо удаления и пересоздания ограничения целостности. Пока у нас есть только одно ограничение целостности (OrdersRangeYearCK), но на будущее мы создадим два.

    ALTER TABLE Orders
    ADD CONSTRAINT OrdersRangeMaxOctober2004
    CHECK ([OrderDate] < '20041101')
    GO

    ALTER TABLE Orders
    ADD CONSTRAINT OrdersRangeMinNovember2002
    CHECK ([OrderDate] >= '20021101')
    GO

    ALTER TABLE Orders
    DROP CONSTRAINT OrdersRangeYearCK
    GO

  6. "Включите" новые данные из первой каскадной таблицы.

    ALTER TABLE OrdersOctober2004
    SWITCH TO Orders PARTITION 24
    GO