(57)【要約】データーベースを変換しつつ、このデーターベースの変換の間、データーベース内のデーターをデーターベース・ユーザーに利用可能にする。方法は、データーベース項目の古いコピーに対して新バージョンのメタデーターを作成するステップを含む。更に、この方法は、新バージョンのメタデーターにしたがってデーターベース項目の古いコピーからデーターベースの新しいコピーにデーターを移す間、変換をデーターに適用しながら、データーベース項目の古いコピーにおいて変換すべきデーター項目のコピーを作成するステップを含む。更に、この方法は、データーベース項目の古いコピーからデーターベース項目の新しいコピーにデーターを移す間、データーベースにおけるデーター項目を変換する間データーベースがオンラインに留まることを可能にするためにデーターベース項目の古いコピーに対して行われるユーザー・クエリーにサービスするステップを含む。【選択図】図３
2017534986.tif 000002
【特許請求の範囲】
【請求項１】
データーベースを変換しつつ、前記データーベースにおけるデーターを、前記データーベースの変換中に、データーベース・ユーザーに利用可能にさせるコンピューターで実行される方法であって、前記コンピューターで実行される方法が、当該コンピューターで実行される方法のためのコンピューター実行可能命令を実行する１つ以上のプロセッサーによって実行され、前記コンピューターで実行される方法が、
前記データーベースのデーターベース項目の古いコピーをデーターベース項目の新しいコピーに変換して前記データーベース項目の古いコピーにおける項目を変換するために、前記データーベースのデーターベース項目の古いコピーに対する新バージョンのメタデーターを作成するステップと、
前記新バージョンのメタデーターにしたがって前記データーベース項目の古いコピーにおけるデーター項目を変換するために前記データーベース項目の古いコピーから前記データーベース項目の新しいコピーにデーターを移す間、前記データーベース項目の古いコピーにおける変換すべきデーター項目に変換を適用しつつ、前記データーベース項目の古いコピーにおいて変換すべきデーター項目のコピーを作成するステップと、
前記データーベース項目の古いコピーから前記データーベース項目の新しいコピーにデーターを移す間、前記データーベースにおけるデーター項目を変換しつつ前記データーベースをオンラインに留まらせるために、前記データーベース項目の古いコピーに対して行われるユーザー・クエリーにサービスするステップと、
を含む、コンピューターで実行される方法。
【請求項２】
請求項１に記載のコンピューターで実行される方法において、前記データーベース項目の古いコピーにおいて変換すべきデーター項目のコピーを作成するステップが、前記データーベース項目の古いコピーのスナップショットを抜き出すステップを含む、コンピューターで実行される方法。
【請求項３】
請求項１に記載のコンピューターで実行される方法において、前記データーベース項目の古いコピーに対して行われるユーザー・クエリーにサービスするステップが、前記データーベース項目の新しいコピーおよび前記データーベース項目の古いコピーから前記クエリーにサービスするステップを含み、前記ユーザー・クエリーがデーター更新を含むとき、前記データーベース項目の新しいコピーおよび前記データーベース項目の古いコピーの双方を更新するステップを含む、コンピューターで実行される方法。
【請求項４】
請求項３に記載のコンピューターで実行される方法であって、更に、前記データーベース項目の古いコピーに対するクエリー・プランを、前記データーベース項目の新しいコピーおよび前記データーベース項目の古いコピーに対するクエリー・プランに変更するステップを含む、コンピューターで実行される方法。
【請求項５】
請求項１に記載のコンピューターで実行される方法において、前記データーベース項目の古いコピーに対するユーザー・クエリーにサービスするステップが、前記ユーザー・クエリーがデーターを引き出すことだけを含むとき、前記データーベース項目の古いコピーから前記クエリーにサービスするステップを含む、コンピューターで実行される方法。
【請求項６】
請求項１に記載のコンピューターで実行される方法において、前記データーベース項目の古いコピーをデーターベース項目の新しいコピーに変換するステップが、列を分割するステップを含む、コンピューターで実行される方法。
【請求項７】
請求項１に記載のコンピューターで実行される方法において、前記データーベース項目の古いコピーをデーターベース項目の新しいコピーに変換するステップが、列に対するデーター・プロパティを変更するステップを含む、コンピューターで実行される方法。
【請求項８】
請求項１に記載のコンピューターで実行される方法において、前記データーベース項目の古いコピーをデーターベース項目の新しいコピーに変換するステップが、新しい列を追加するステップを含む、コンピューターで実行される方法。
【請求項９】
請求項１に記載のコンピューターで実行される方法において、前記コンピューターで実行される方法のための前記コンピューター実行可能命令が、１つ以上のコンピューター読み取り可能媒体上に収容される、コンピューターで実行される方法。
【請求項１０】
データーベースを変換しつつ、前記データーベースにおけるデーターを、前記データーベースの変換中に、データーベース・ユーザーに利用可能にさせるためのコンピューティング・システムであって、前記コンピューティング・システムが、
１つ以上のプロセッサーと、
１つ以上のコンピューター読み取り可能媒体と、
を含み、
前記１つ以上のコンピューター読み取り可能媒体が、コンピューター実行可能命令を含み、前記コンピューター実行可能命令が、前記１つ以上のプロセッサーの内少なくとも１つによって実行されると、前記コンピューティング・システムに、
前記データーベースのデーターベース項目の古いコピーをデーターベース項目の新しいコピーに変換して前記データーベース項目の古いコピーにおける項目を変換するために、前記データーベースのデーターベース項目の古いコピーに対する新バージョンのメタデーターを作成するステップと、
前記新バージョンのメタデーターにしたがって前記データーベース項目の古いコピーにおけるデーター項目を変換するために前記データーベース項目の古いコピーから前記データーベース項目の新しいコピーにデーターを移す間、前記データーベース項目の古いコピーにおける変換すべきデーター項目に変換を適用しつつ、前記データーベース項目の古いコピーにおいて変換すべきデーター項目のコピーを作成するステップと、
前記データーベース項目の古いコピーから前記データーベース項目の新しいコピーにデーターを移す間、前記データーベースにおけるデーター項目を変換しつつ前記データーベースをオンラインに留まらせるために、前記データーベース項目の古いコピーに対して行われるユーザー・クエリーにサービスするステップと、 
を実行するアーキテクチャを構成させる、 コンピューティング・システム。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  データーベース・ユーザーがスキーム（例えば、列の形式を変更する）またはデーターの修正(modification)（例えば、名称列を名前および名字という２つの列に分割する）を行わなければならないことは頻繁にあるが、これは大量のデーター更新を必要とする。これは、別のアプリケーション・アップグレードの一部であることもあり、またはスキームの元の設計における何らかの欠陥によることもある。このような処理は、データーベースのテーブルにおける各行上で更新を必要とする場合もある。現在、これらの処理は、オフラインでしか実行できず、アプリケーションに膨大な量の休止時間が発生する。修正が発生している間、データーベース・テーブルはアクセスできないままの状態が続き、いくつかの大きなテーブルが長時間にわたって利用できない事態に発展するおそれがある。
【０００２】
[0002]  更に、これらの変更(change)がアプリケーション・アップグレードの一部であるとき、大抵の場合、新たなアプリケーションを展開できるようになる前に、複数のスキームまたはデーターの変換を行わなければならない。例えば、アプリケーションＶ１はデーターベース・スキームＶ１を必要とするが、アプリケーションＶ２はスキームＶ２を必要とする。
【０００３】
[0003]  本願において特許請求する主題は、あらゆる欠点を解決する実施形態にも、以上で説明したような環境においてのみ動作する実施形態にも限定されない。むしろ、この背景は、本明細書において説明するいくつかの実施形態を実施することができる１つの例証的な技術エリアを示すために設けられたに過ぎない。
【発明の概要】
【課題を解決するための手段】
【０００４】
[0004]  本明細書において例示する一実施形態は、コンピューティング環境において実施することができる方法を含む。この方法は、データーベースを変換しつつ、このデーターベースの変換中に、データーベース内のデーターをデーターベース・ユーザーに利用可能にするステップを含む。この方法は、データーベースのデーターベース項目の古いコピーをデーターベース項目の新しいコピーに変換してデーターベース項目の古いコピーにおける項目を変換するために、データーベースのデーターベース項目の古いコピーに対して、新バージョンのメタデーターを作成するステップを含む。この方法は、更に、データーベース項目の古いコピーにおけるデーター項目を変換するためにデーターベース項目の古いコピーからデーターベース項目の新しいコピーにデーターを移動する間、データーベース項目の古いコピーにおいて変換すべきデーター項目に変換を適用しつつ、データーベース項目の古いコピーにおいて変換すべきデーター項目のコピーを作成するステップも含む。更に、この方法は、データーベース項目の古いコピーからデーターベース項目の新しいコピーにデーターを移す間、データーベースにおいてデーター項目を変換する間データーベースがオンラインに留まることを可能にするために、データーベース項目の古いコピーに対して行われるユーザー・クエリーにサービスするステップも含む。
【０００５】
[0005]  この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を判断するときに補助として使用されることを意図するのでもない。
【０００６】
[0006]  更に他の特徴および利点は、以下に続く説明において明記され、部分的にはその説明から自明であり、または本明細書における教示の実施によって習得することができる。本発明の特徴および利点は、添付する特許請求の範囲において特定的に指摘される手段(instruments)および組み合わせによって、実現および修得することができる。本発明の特徴は、以下の説明および添付する特許請求の範囲から、更に十分明白になり、以下に明記する発明の実施によって習得することができる。
【図面の簡単な説明】
【０００７】
[0007]  以上で列挙した利点および特徴ならびにその他の利点および特徴を得ることができる方法を説明するために、以上で端的に説明した本主題の更に特定的な説明を、添付図面に図示された具体的な実施形態を参照しながら行う。これらの図面は典型的な実施形態を図示するに過ぎず、したがって範囲を限定するように解釈してはならないことを理解した上で、添付図面の使用により、更に具体的および詳細に、実施形態について説明する(described and explained)。図面において、
【図１】図１は、データー項目の新しいコピーおよびデーター項目の古いコピーを含むデーターベースを示す。
【図２】図２は、データーベースを変換する処理(operation)を示す。
【図３】図３は、データーベースを変換する方法を示す。
【発明を実施するための形態】
【０００８】
[0011]  以下の例は、ワシントン州、RedmondのMicrosoft Corporationから入手可能なＳＱＬ  Ｓｅｒｖｅｒ（登録商標）のコンテキストで例示する。つまり、例示される特定のデーターベース・ステートメントは、この実施態様に特定である。しかしながら、他の実施形態が他のデーターベース製品およびそれらの対応するステートメントを使用してもよいことは認められてしかるべきである。これより図１を参照すると、データーベース例１０２が示されている。本明細書におけるある実施形態は、旧バージョン１０４のデーターベース・スキームと、新バージョンのデーターベース・スキームのデーターベース項目の新しいコピーとを実装する(implement)ことができる。更に、実施形態は、旧バージョン１０４のデーターベース・スキームにしたがってデーターベース項目の古いコピー１０８を維持し、更に新バージョンのデーターベース・スキームのデーター項目の新しいコピーにしたがってデーターベース項目の新しいコピー１１０を維持することができる。データーベース１０２がユーザーに利用可能である（即ち、データーベース１０２がオンラインになっている）間にスキームおよびデーター型変更処理を実行することによって、アプリケーション１１２は、データーベース１０２において必要とされる変更が全て完了し終えるまで、旧バージョン１０４のスキームに対して処理することができる。次いで、データーベース・アドミニストレーター１１４はこのスキームを新バージョンのデーターベース項目の新コピーに切り替えることができ、全く停止時間なく（または非常に短い最小限の停止時間で）アプリケーション１１２をアップグレードすることもできる。本明細書における実施形態は、アドミニストレーター１１４からのこのような処理を実行するための実行ロジック(implementation logic)の全てを抽象化することができる。アドミニストレーター１１４は、単に、必要とされる変換を記述するだけでよく、テーブルのようなデーターベース項目の種々のコピーの保守は、システムによって内部で処理される(handled)。
【０００９】
[0012]  例えば、図２を参照すると、ある実施形態では、データー型を古いデーター型から新しいデーター型に変換しつつ、データーを古い列の型から新しい列の型に移すことができる。具体的には、図２は、スキーム変更を示し、もっと大きい数値を列に含ませることを可能にするために、型「ｉｎｔ」の列を型「ｂｉｇ  ｉｎｔ」の列に変更する。古い列におけるｉｎｔ列内のエントリーは、ｂｉｇｉｎｔデーター型に変換され、新しい列に移動される。実施形態はデーターの２つのコピー１０８および１１０を維持することができる。古いコピー１０８における元のデーターを移している背景スレッド１１６は、データーが新しいコピー１１０にコピーされていく(get copied)に連れて、この特定の列に合わせてデーター型を変換するために修正される(modified)。同時更新では、データーの新しいコピー１１０を維持するクエリー・プランの一部が、ここで、Microsoft, CorporationからのＳＱＬ  Ｓｅｒｖｅｒ（登録商標）における「ＣＯＮＶＥＲＴ」演算子１８のようなデーター型変換演算子、またはデーターを新しいデーター型に変換する他の製品における他のデーター型変換演算子のような、データー型変換演算子を注入するために修正される。これはデーター型変換だけを実行しているが、このロジックは、任意のユーザー定義式によってデーターを変換する(transform)ように拡張することができ、アプリケーション・アップグレードによって必要とされる更に一層複雑なシナリオ（名前を２つの列に分割するような）にも対処する。
【００１０】
[0013]  実施形態は、データーベースがオンラインにありユーザーに利用可能である間にデーターベースを移すために以下のフェーズを実行することができる。
[0014]  ・準備フェーズ：このフェーズは、新バージョンのテーブルをメタデーターに追加し、新しい行セット(rowset)を作成し、バージョニングがデーターのスナップショット・スキャンを実行することを可能にする。
【００１１】
[0015]  ・構築フェーズ：構築フェーズは、テーブルの新しいコピー１１０に入力する(populate)ために、Washington州、RedmondのMicrosoft CorporationからのＳＱＬ  Ｓｅｒｖｅｒ（登録商標）におけるＩＮＳＥＲＴ．．．ＳＥＬＥＣＴのような、データーベースにおけるデーターをコピーするステートメントを実行する。データーベース・クエリー・オプティマイザー１２０は、これが「特殊な」データー操作言語であることを知り、データーを旧バージョン１０８から新バージョン１１０にコピーするプランを生成する。図２に示すように、単にデーターベースからデーターを選択する処理が、旧バージョン１０８にアクセスすることができる。データーを挿入、更新、または削除する処理は、旧バージョン１０８および新バージョン１１０双方にアクセスする。
【００１２】
[0016]  ・最終フェーズ：最終フェーズでは、メタデーターを更新するために、非常に短い時間量だけ、テーブルが排他的にロックされ（ＳＱＬ  Ｓｅｒｖｅｒ（登録商標）におけるＳＣＨ−Ｍロックのようなスキーム修正ロックのように）、旧バージョン１０８のテーブルを削除する。スキーム修正ロックは、テーブルの同時アクセスを禁止する。これが意味するのは、スキーム修正ロックは、ロックが解除されるまで、全ての外部処理を阻止するということである。
【００１３】
[0017]  オンライン・スキームおよび／またはデーター変換の間、同時選択処理が旧バージョン１０８のテーブルにアクセスするが、データー操作処理（挿入、更新、および削除のような）は旧バージョン１０８および新バージョン１１０の双方を維持しなければならない。メタデーターが、これは「オンライン」テーブルであり、したがって、図２に示すようにこれを適正に維持するために、特殊なクエリー・プランが生成されることを、クエリー・オプティマイザーに知らせる。
【００１４】
[0018]  このプロセスは、データーベースがオンラインにある間広い範囲の処理をサポートするために再利用することができる。新バージョン１１０のテーブルは、ユーザーによって指定されたデーターベース項目の新しいスキームの新しいコピーを用いて作成される。
【００１５】
[0019]  これを行うために、新バージョン１１０のテーブルの維持を適正に行うことができるように、関連メタデーター(relational metadata)をバージョニングし(versioned)、必要な変換を適用する。更に、ストレージ・エンジン１２２における新しいコピー１１０内の新しい行セットは、新バージョンのスキームのデーターベース項目によって作成される。加えて、テーブル・ビルダー１２４によって実行される、ＳＱＬ  Ｓｅｒｖｅｒ（登録商標）におけるＩＮＳＥＲＴ．．．ＳＥＬＥＣＴステートメントのような、データーを挿入および選択するステートメントが、データーを変換しつつ、それを新バージョン１１０のテーブルにコピーする。クエリー・オプティマイザー１２０は、２つのバージョンのテーブルを確認し、データーをコピーしつつ変換を適用するために、しかるべきクエリー実行プランを生成する。同時データー操作言語処理は、２つのバージョンのスキーム／データーをメタデーターから確認することができ、クエリー・オプティマイザー１２０は、必要とされる変換を適用しつつ、新バージョン１１０のデーターを維持するために特殊なプランを生成する。
【００１６】
[0020]  他の実施態様は、テーブル構築プロセスを使用し、同時更新処理が新バージョン／コピーのデーターを維持する必要はないが、背景タスクが更新のデルタを処理し(process)、それを新バージョン１１０のデーターにコピーしながら、必要とされる変換を適用する。デルタが非常に小さくなったとき、背景タスクがデーターの最後の部分をコピーしこの処理を終わらせる(finalize)ことができるように、テーブルがロックされる。デルタは、例えば、数百から数千程度の処理し(process)なければならない行とすることができる。しかしながら、ある実施形態では、デルタは、移行が速くなり数ミリ秒しか要さないように、十分に小さくしなければならない場合もある。
【００１７】
[0021]  以上の手法は、より包括的であり、ＳＱＬ  Ｓｅｒｖｅｒ（登録商標）のＡＬＴＥＲ  ＣＯＬＵＭＮ処理のように、殆どの列変更(altering)、追加、または削除処理をカバーすることができるが、これに加えて、実施形態は、圧縮列上における特定型変更を、メタデーター専用処理として扱うことができる。これが可能なのは、元の列の型を有する任意の行のフォーマットおよびコンテンツが、新しい列の型による行フォーマットおよびコンテンツと同一である場合である。この場合、実施形態は、行に対する更新は全く行わず、単に、関連エンジンおよびストレージ・エンジン・メタデーターを更新するだけで済ますことができる。現在、メタデーター専用処理として扱われる多くの列変更、追加、または削除処理がある。しかしながら、データー圧縮は、共通して使用され得る更に他の場合をサポートする機会を提供する。
【００１８】
[0022]  データー圧縮が可能な行セットでは、全ての列がストレージ・エンジンに、可変長列として、そして実施形態が使用している圧縮アルゴリズムと組み合わせて格納され、例えば、以下の型変更に対して先の要件が有効である。
【００１９】
●・ smallint→int→bigint  
●・smallmoney→money
●・ char(N)→char(M), ここで、Ｎ≦Ｍ
●・ char(N)→varchar(M) , ここで、Ｎ≦Ｍ
●・ binary(N)→binary(M), ここで、Ｎ≦Ｍ
●・ binary(N)→varbinary(M), ここで、Ｎ≦Ｍ
[0023]  データー定義言語
[0024]  データー定義言語は、スキームまたはデーター変換において使用される処理が「オンライン」処理として行われることをユーザーに指定させる追加のオプションを含むことができる。以下の例は、これは「オンライン」処理であることを示すパラメータを含む、ＳＱＬ  Ｓｅｒｖｅｒ（登録商標）に含まれる、ALTER TABLE．．．ALTER COLUMNステートメントを示す。
【００２０】
【表１】
2017534986.tif 000003
【００２１】
[0025]  パラメータ [WITH ONLINE = ON/OFF]は、どのように処理を実行するか指定する能力を与える。
[0026]   メタデーター
[0027]  オンライン列変更(altering)用のデーター定義言語は、ある実施形態では、オフライン処理と同じロジックに従うことによって開始するが、排他的スキーム修正ロックの代わりに意図共有ロックだけを採用することが異なる。これによって、同時データー操作言語が続行することを可能にする。
【００２２】
[0028]   メタデーター修正
[0029]  メタデーター・チェックは意図共有ロック（即ち、共有ロックをこれら個々のリソース上に置くことによって、階層において低い方の一部の（しかし全部ではない）リソースを読み取るトランザクションの意図を示すロック。これは、他のトランザクションが排他的ロックを取得するのを防止する）の下で行うことができるが、メタデーター更新は特殊な処理(handling)を必要とする。何故なら、これらは通常テーブル上では排他的ロックを必要とするからである。この問題を解決するために、所定の場所で列メタデーターを更新する代わりに、
[0030]  ・列の新しいコピーを、新しいプロパティ（型等）を用いて作成する。これが意味するのは、古い列情報がなおも入手可能であるということである。
【００２３】
[0031]  ・新しい列はメモリー内でのみ作成され、システム・テーブルは更新されない。システム・テーブルが更新されると、実施形態は行ロックを解除するためにこれらを更新するトランザクションをコミットすることになる。これは、復元において問題を生ずる。
【００２４】
[0032]  ・新しい列は、明示的に要求されなければ、同時クエリーによって見えるようにならないように、テーブルの列集合(column collection)には追加されない。これが意味するのは、アルジェブライザー(algebrizer)はなおも全ての列を通常通りにロードすることができ、「オンライン」列を処理する(handle)ために変更は必要ないということである。
【００２５】
[0033]   ロールバックにおけるメタデーター復元
[0034]  データー定義言語のロールバックを扱うために、特殊なロジックも実装される。一般に、メタデーターは、データー定義言語処理が排他的スキーム修正ロックをオブジェクト上に保持しており、他のエンティティは参照を保持できないと仮定しているので、障害の場合、実施形態はオブジェクト全体をメタデーター・キャッシュから単に削除するだけである。ディスク上の一貫性(on-disk consistency)は、トランザクション・ロールバックによって処理されるので、次の要求時に、実施形態は単にオブジェクトをディスクから再ロードするだけでよい。
【００２６】
[0035]  これはオンライン処理であるので、実施形態はテーブル上に意図共有ロックだけを保持する（排他的スキーム変更ロックではない）。実施形態はロールバックにおいて更にロックをかけることができないので、他者がこのオブジェクトに対する参照を抑える(hold)おそれがあり、したがって実施形態は単純にこれをキャッシュから削除することはできない。
【００２７】
[0036]  ロールバックにおいてメタデーターを浄化するために、実施形態は、オンライン列変更処理に特有の新しい仮想ログ・レコードと組み合わせて、参照カウント(ref counting)を使用する。仮想ログ・レコードは、これがロールバックしなければならないディスク上の変更を記述するのではなく、単にメモリー内の値をロールバックする何らかのロジックを実行するためにデーターベース・サーバー・コードへのコール・バックを行うプレースホルダ(placeholder)であるという意味で仮想である。ロールバックするとき、仮想ログ・レコードは、「オンライン」列に中断という印を付けるので、新しいクエリーはそれへの参照を得ることができない。列オブジェクト上に参照がない場合、それを削除する。それ以外の場合、その参照を削除し、参照を解除する最後のエンティティが実際にそれをメタデーター・キャッシュから削除することになる。
【００２８】
[0037]   同時処理の阻止
実施形態はメモリー内メタデーター変更を行うので、実施形態は２つの「オンライン」処理によって、同時アクセスを回避する。この理由のために、実施形態は、同じテーブル上において同時オンライン処理を防止するために特殊なロックを採用する。このロックは、処理全体の期間中保持される。
【００２９】
[0038]  同時クエリー
[0039]  以上で説明したように、新しい列は列集合体に追加されず、明示的に要求されなければ、見えるようにならない。これが意味するのは、アルジェブライザーは常に「古い」列メタデーターを使用し、クエリー・オプティマイザー１２０はこれに基づいてプランを生成するということである。
【００３０】
[0040]  図２に示すように、ＳＱＬ  Ｓｅｒｖｅｒ（登録商標）におけるＳＥＬＥＣＴクエリーのようなデーター選択クエリーは、オンライン・テーブル再構築処理の間、データーベース項目の古いコピー１０８しか使用することができないので、これらは「古い」列を収容する行セットにアクセスしようとする。プラン生成に使用されるメタデーターは、ＳＥにおけるデーターのフォーマットと一致するので、全てのデーター選択クエリーは正しく作用するはずである。
【００３１】
[0041]  実施形態は、列変更処理の間に行われる型変換によって生ずるエラーに関する機能を有することができる。例えば、ユーザーが、列ｃ１が「ｂｉｇｉｎｔ」であるテーブルにアクセスしているが、それが現在「ｉｎｔ」に変更されているとき、挿入された値が「ｉｎｔ」に収まることができない場合、ユーザーは、型「ｉｎｔ」にオーバーフローがあったというエラーを受け取る。しかしながら、ユーザーの観点からは、列の型はまだ「ｂｉｇｉｎｔ」であり、これは、システム・ビューが報告していることである。このため、ある実施形態では、エラーの原因に関して追加の詳細と共にユーザーに警告するために、追加の情報をこれらのエラー・メッセージに追加することができる。
【００３２】
[0042]  例えば、データー変換が所与の行では不可能であるために、列変更処理が取り消されたまたは失敗した場合、単にデーターベース項目の第２コピー（例えば、新しいコピー１１０）を破壊することによって、殆ど即座に、この処理のロールバックを行うことができる。
【００３３】
[0043]  実施形態は、一定の最適化を実施するために、種々の実施態様の特徴を利用することができる。例えば、実施形態はデーターの新しいコピー（例えば、データーベース項目の新しいコピー１１０）を作成するので、処理を高速化し必要なログ空間を縮小するために、最小ロギング(minimal logging)のような最適化を使用することができる。
【００３４】
[0044]  これより、以下の論述において、実行することができる多数の方法および方法のステップについて触れる。方法のステップは、一定の順序で論じられるか、または特定の順序で行われるフロー・チャートにおいて示されることがあるが、具体的に述べられない限りまたは要求されない限り、特定の順序付けは必要でない。何故なら、ステップは、このステップが実行される前に完了する他のステップに依存するからである。
【００３５】
[0045]  これより図３を参照すると、方法３００が示されている。方法３００は、コンピューティング環境において実施することができる。方法３００は、データーベースを変換しつつ、データーベースの変換の間データーベース・ユーザーに、データーベース内のデーターを利用可能にさせるステップを含む。この方法は、データーベースのデーターベース項目の古いコピーをデーターベース項目の新しいコピーに変換してデーターベース項目の古いコピーにおける項目を変換するために、データーベースのデーターベース項目の古いコピーに対する新バージョンのメタデーターを作成するステップ（ステップ３０２）を含む。例えば、図１に示すように、データーベース・スキームの新バージョン１０６が、データーベース項目の既存のコピー１０８に対して作成される。
【００３６】
[0046]  更に、方法３００は、データーをデーターベース項目の古いコピーからデーターベース項目の新しいコピーに移してデーターベース項目の古いコピーにおけるデーター項目を変換する間、データーベース項目の古いコピーにおいて変換すべきデーター項目に変換を適用しつつ、データーベース項目の古いコピーにおいて変換すべきデーター項目のコピーを作成するステップ（ステップ３０４）を含む。これは、新バージョンのメタデーターにしたがって行われる。このように、例えば、データー項目の古いコピー１０８からのデーター項目は、新バージョン１０６のデーターベース・スキームにしたがって、データー項目の新しいコピー１１０にコピーされる。
【００３７】
[0047]  更に、方法３３０は、データーベース項目の古いコピーからデーターベース項目の新しいコピーにデーターを移す間、データーベースにおけるデーター項目を変換する間データーベースがオンラインに留まることを可能にするために、データーベース項目の古いコピーに対して行われるユーザー・クエリーにサービスするステップ（ステップ３０６）を含む。つまり、図２に示すように、ユーザー１２６は種々のデーターベース・クエリーを送ることができ、これらのデーターベース・クエリーは、データーベース項目の古いコピー１０８によってサービスされる。
【００３８】
[0048]  方法３００は、データーベース項目の古いデーターにおける変換すべきデーター項目のコピーを作成するステップが、データーベース項目の古いコピーのスナップショットを抜き出すステップを含む場合に、実施することができる。
【００３９】
[0049]  方法３００は、データーベース項目の古いコピーに対して行われるユーザー・クエリーにサービスするステップが、データーベース項目の新しいコピーおよびデーターベース項目の古いコピーからクエリーにサービスするステップを含み、ユーザー・クエリーがデーター更新を含むとき、サービスするステップがデーターベース項目の新しいコピーおよびデーターベース項目の古いコピーの双方を更新するステップを含む場合に実施することができる。更新は、既存のデーター項目に対する挿入処理、削除処理、変更処理の内少なくとも１つを含むことができる。図２はこれの例を示し、このような処理がユーザーによって要求されたときに、データー項目の古いコピー１０８およびデーター項目の新しいコピー１１０の双方に修正が行われる場合の挿入、更新、および削除処理の更新経路を示す。このような実施形態では、方法３００は、更に、データーベース項目の古いコピーに対して指令される(directed)クエリー・プランを、データーベース項目の新しいコピーおよびデーターベース項目の古いコピー双方に対して指令されるクエリー・プランに変更するステップを含む場合もある。先に示した例では、これはクエリー・オプティマイザー１２０によって実行されてもよい。
【００４０】
[0050]  方法３００は、データーベース項目の古いコピーに対するユーザー・クエリーにサービスするステップが、ユーザー・クエリーがデーターを引き出すことだけを含むとき、データーベース項目の新しいコピーではなく、データーベース項目の古いコピーのみからクエリーにサービスするステップを含む場合に実施することができる。例えば、図２に示すように、コマンドが、データーを修正も、挿入も、削除もしない選択コマンドであるとき、データーベース項目の古いコピー１０８からクエリーにサービスすることができる。
【００４１】
[0051]  方法３００は、データーベース項目の古いコピーをデーターベース項目の新しいコピーに変換するステップが、列を分割するステップを含む場合に実施することができる。例えば、氏名列が名字列と名前列に分割されるのでもよい。
【００４２】
[0052]  方法３００は、 データーベース項目の古いコピーをデーターベース項目の新しいコピーに変換するステップが、列に対するデーター・プロパティを変更するステップを含む場合に実施することができる。例えば、実施形態は列の型を変更するのでもよい。図２に示す例では、型がｉｎｔからｂｉｇｉｎｔに変更される。
【００４３】
[0053]  方法３００は、データーベース項目の古いコピーをデーターベース項目の新しいコピーに変換するステップが、新しい列を追加するステップを含む場合に実施することができる。代わりにまたは加えて、方法３００は、データーベース項目の古いコピーをデーターベース項目の新しいコピーに変換するステップが、列を組み合わせるステップを含む場合に実施することができる。代わりにまたは加えて、方法３００は、データーベース項目の古いコピーをデーターベース項目の新しいコピーに変換するステップが、列を削除するステップを含む場合に実施することができる。
【００４４】
[0054]  更に、方法３００は、例えば、データーベース障害を検出し、データーベース項目の新しいコピーを破棄無視し、データーベース項目の古いコピーを用いてデーターベース処理を継続することによってデーターベースをロールバックすることによってというようにして、データーベースを復元するステップも含むことができる。
【００４５】
[0055]  データーベース項目の古いコピー１０８およびデーターベース項目の新しいコピー１１０双方の使用のために、方法３００のある種の実施形態は、更に、データーベース項目の古いコピーおよびデーターベース項目の新しいコピーの双方を維持する結果実行する必要がなくなったログ処理を識別するステップも含むことができる。
【００４６】
[0056]  更に、以上の方法は、１つ以上のプロセッサーと、コンピューター・メモリーのようなコンピューター読み取り可能媒体とを含むコンピューター・システムによって実施することができる。具体的には、コンピューター・メモリーは、コンピューター実行可能命令を格納することができ、このコンピューター実行可能命令が１つ以上のプロセッサーによって実行されると、以上の実施形態において羅列したステップのような、種々の機能を実行させる。
【００４７】
[0057]  本発明の実施形態は、以下で更に詳しく論ずるような、コンピューター・ハードウェアを含む特殊目的または汎用コンピューターを含む、または利用することができる。また、本発明の範囲内の実施形態は、コンピューター実行可能命令および／またはデーター構造を搬送あるいは格納するために、物理および他のコンピューター読み取り可能媒体も含む。このようなコンピューター読み取り可能媒体は、汎用または特殊目的コンピューター・システムによってアクセスすることができる任意の入手可能な媒体とすることができる。コンピューター実行可能命令を格納するコンピューター読み取り可能媒体は物理記憶媒体である。コンピューター実行可能命令を搬送するコンピューター読み取り可能媒体は送信媒体である。つまり、一例として、そして限定ではなく、本発明の実施形態は、少なくとも２種類の全く異なる種類のコンピューター読み取り可能媒体、即ち、物理コンピューター読み取り可能記憶媒体および送信コンピューター読み取り可能媒体を含むことができる。
【００４８】
[0058]  物理コンピューター読み取り可能記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスク・ストレージ（ＣＤ、ＤＶＤ等のような）、磁気ディスク記憶デバイスまたは他の磁気記憶デバイス、あるいは所望のプログラム・コード手段をコンピューター実行可能命令の形態で、またはデーター構造を格納するために使用することができ、更に汎用または特殊目的コンピューターによってアクセスすることができる任意の他の媒体が含まれる。
【００４９】
[0059]  「ネットワーク」とは、コンピューター・システムおよび／またはモジュールおよび／または他の電子デバイス間における電子データーの移送を可能にする１つ以上のデーター・リンクと定義される。情報がネットワークまたは他の通信接続（ハードワイヤ、ワイヤレス、またはハードワイヤおよびワイヤレスの組み合わせのいずれか）を介してコンピューターに転送または提供されるとき、コンピューターは正しくこの接続を送信媒体と見なす。送信媒体は、所望のプログラム・コード手段をコンピューター実行可能命令の形態で、またはデーター構造を搬送するために使用することができ、汎用または特殊目的コンピューターによってアクセスすることができるネットワークおよび／またはデーター・リンクを含むことができる。また、以上のものの組み合わせもコンピューター読み取り可能媒体の範囲に含まれる。
【００５０】
[0060]  更に、種々のコンピューター・システム・コンポーネントに達すると、コンピューター実行可能命令の形態であるプログラム・コード手段またはデーター構造を自動的に送信コンピューター読み取り可能媒体から、物理コンピューター読み取り可能記憶媒体に（またはその逆に）転送することができる。例えば、ネットワークまたはデーター・リンクを介して受信されたコンピューター実行可能命令またはデーター構造を、ネットワーク・インターフェース・モジュール（例えば、「ＮＩＣ」）内部のＲＡＭにバッファし、最終的にコンピューター・システムにおけるコンピューター・システムＲＡＭおよび／またはそれよりも揮発性が低いコンピューター読み取り可能物理記憶媒体に転送することができる。つまり、コンピューター読み取り可能物理記憶媒体は、送信媒体も利用するコンピューター・システム・コンポーネントに（または主にこれを利用するコンピューター・システム・コンポーネントであっても）含めることができる。
【００５１】
[0061]  コンピューター実行可能命令は、例えば、命令およびデーターを含み、汎用コンピューター、特殊目的コンピューター、または特殊目的処理デバイスに、一定の機能または一群の機能を実行させる。コンピューター実行可能命令は、例えば、バイナリー、アセンブリー言語のような中間フォーマット命令、またはソース・コードであってもよい。構造的特徴および／または方法のステップに特定の文言で本主題について説明したが、添付する特許請求の範囲において定められる主題は、以上で説明した特徴やステップに必ずしも限定されないことは理解されよう。逆に、以上で説明した特徴およびステップは、特許請求の範囲を実現する形態例として開示したまでである。
【００５２】
[0062]  尚、本発明は、多くのタイプのコンピューター・システム構成を有するネットワーク計算環境においても実現できることは当業者には認められよう。コンピューター・システム構成には、パーソナル・コンピューター、デスクトップ・コンピューター、ラップトップ・コンピューター、メッセージ・プロセッサー、ハンドヘルド・デバイス、マルチプロセッサー・システム、マイクロプロセッサー・ベースまたはプログラマブル消費者用電子機器、ネットワークＰＣ、ミニコンピューター、メインフレーム・コンピューター、移動体電話機、ＰＤＡ、ページャ、ルーター、スイッチ等が含まれる。また、本発明は分散型システム環境においても実施することができ、ネットワークを介して（ハードワイヤ接続データー・リンク、ワイヤレス・データー・リンク、またはハードワイヤ接続およびワイヤレス・データー・リンクの組み合わせのいずれかによって）リンクされたローカルおよびリモート・コンピューター・システムの双方がタスクを実行する。分散型システム環境では、プログラム・モジュールはローカルおよびリモート双方のメモリー記憶デバイス内に配置されてもよい。
【００５３】
[0063]  あるいは、または加えて、本明細書において説明する機能を、少なくとも部分的に、１つ以上のハードウェア論理コンポーネントによって実行することもできる。例えば、そして限定でなく、使用することができる例示的なタイプのハードウェア論理コンポーネントには、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、特定用途集積回路（ＡＳＩＣ）、特定用途標準製品（ＡＳＳＰ）、システム・オン・チップ・システム（ＳｏＣ）、複合プログラマブル論理デバイス（ＣＰＬＤ）等が含まれる。
【００５４】
[0064]  本発明は、その主旨や特性から逸脱することなく、他の具体的な形態でも具体化することができる。説明した実施形態は、あらゆる観点において、限定的ではなく例示的であると見なされるものとする。したがって、本発明の範囲は、以上の説明によってではなく、添付した特許請求の範囲によって示される。請求項の均等の意味および範囲に該当する全ての変更は、請求項の範囲内に包含されるものとする。
【図１】
2017534986.tif 000004
【図２】
2017534986.tif 000005
【図３】
2017534986.tif 000006
【国際調査報告】
2017534986.tif 000007
2017534986.tif 000008
2017534986.tif 000009