正直なところ、あなたはすでに最も簡単な答えをほのめかしていると思います。
まず、データアクセス層を更新して、新しいスキーマと古いスキーマの両方を処理します。挿入と更新は、同期を維持するために、新しいスキーマと古いスキーマの両方を更新する必要があります。クエリは、この時点でレコードのソースである古いスキーマのみを確認する必要があります。
次に、すべてのデータを古いスキーマから新しいスキーマにコピーします。
次に、データアクセスを更新して、新しいデータをクエリします。これにより、古いデータは最新の状態に保たれますが、2つのデータセットが同期しなくなるような変更を加える前に、新しいデータを完全にテストできます。また、ローリングアップデートを容易にするのにも役立ちます(つまり、新旧両方のデータアクセスコードを持つアプリケーションは引き続き同時に機能します。
最後に、データアクセス層を更新して、新しいスキーマにのみアクセスし、古いデータを削除します。
この最終段階を除いて、問題が発生した場合はいつでも前のバージョンにロールバックできます。