MSDE FunClub
Microsoft Data Engine FunClub
現在までのアクセスカウント数
Since 2006.05.12
最終更新日:2006/5/12
 
 [MSDE FunClub TOP]  > [MSDE 技術サポート情報]   > [SQL Server 2000 データベースを MSDE 2000 に移動する] 
 
SQL Server 2000 データベースを
MSDE 2000 に移動する
 
 
SQLServer2005時代でも
開発の基本は T-SQL
上巻で T-SQL の基礎作り
 
SQLServer2005時代でも
運用の基本はバックアップ
下巻でバックアップ手法を学びましょう
PASSJ人気コンテンツで学んだ後は下巻でさらなる学習を!
 
SQLServer必携の書
ご購入をお願いします
 

 
 
MSDE FunClub
メニュー
■ MSDE 2000
技術情報一覧に
戻る
■ MSDE 2000
初心者向け
メーリングリスト
ご案内
■ MSDE 2000
技術者向け
メーリングリスト
ご案内
■ MSDE FunClub
HOME へ戻る
 
マイクロソフト
関連ページ
■ 文書番号:305365
ログイン転送タスクを使用して SQL Server ログインを移動すると、DTS パッケージがエラー メッセージ "エラーを特定できません" で失敗する
■ 文書番号:314546
SQL Server を実行しているコンピュータ間でデータベースを移動する方法
■ 文書番号:240872
SQL Server を実行しているサーバー間でデータベースを移動するときに、権限の問題を解決する方法
■ 文書番号:274463
SQL Server 2000 のデータベース コピー ウィザードの説明とトラブルシューティング
■ 文書番号:268361
SQL Server 2000 Enterprise Edition から SQL Server 2000 Standard Edition にデータベースを移動するための効果
■ 文書番号:324321
エラー 15401 のトラブルシューティング方法
■ 文書番号:224071
SQL Server のデタッチとアタッチ機能を使用して SQL Server データベースを新しい場所に移動する方法
■ 文書番号:314823
SQL Server の Service Pack を削除する方法
■ 文書番号:264474
SQL Server の別のビルドにデータベースのシステム バックアップは復元できません
■ 文書番号:238678
MSDE: RebuildM で master DB が見つからない
■ 文書番号:253817
SQL Server の master ファイルとデータベース ファイルが破損した場合に最後のトランザクション ログをバックアップする方法
■ 文書番号:273572
ソース ディレクトリが CD 上にあると、Rebuildm.exe ユーティリティが応答を停止する
■ 文書番号:221465
RESTORE ステートメントでの WITH MOVE オプションの使用
■ 文書番号:274188
対応するログインの存在しないユーザー
■ 文書番号:246133
SQL Server 7.0 または SQL Server 2000 サーバー間でログインおよびパスワードを転送する
■ 文書番号:307775
Microsoft SQL Server の障害復旧に関する資料
■ 文書番号:829386
Server サービスが実行
されていないと
MSDE 2000 を
インストールできない
■ 文書番号:290211
最新のSQLServer 2000
Service Pack の入手方法
■ 文書番号:306908
SQL Server 2000
Service Pack で修正された
不具合の一覧
■ 文書番号:322336
MSDE システム管理者の
パスワードを
確認および変更する方法
■ 文書番号:889615
SQL Server 2000 に
接続するときに "SQL Server の
信頼関係接続に関連付け
られていません" というエラー
メッセージが表示されることがある
■ 文書番号:328306
エラー メッセージ
SQL Server が存在しないか、アクセスが拒否されました" の原因
 
 
SQL Server データベースの移動
 
[SQL Server データベースの移動:事前確認-00010]

SQL Server 2000 で運用しているデータベースを、自分のPCにインストールして持ち帰って仕事をしなければいけません。
実際に運用しているデータベースをどのような手順で作業をすれば、移動ができますか?

この文書では、SQL Server 2000 で運用しているデータベースを、MSDE 2000 に、移動する例を取り上げます。

SQL Server から MSDE へのデータベースの移動は、その動作保証は受けられなかったと思います。

たまたま、ここで解説している手順で操作をしたら、『うまく動いた、ラッキー!』という程度の話として考えて下さい。

そのため、見落としている項目があると思います。お気付きの点がございましたら、ご指摘をお願いします。

まず最初にやるべきことは、運用中のSQL Server 2000のバージョンを確認して下さい。
ここで言うバージョンとは、サービスパックの適用状況のことです。

SQL Server 2000 に、サービスパック1(SP1)、SP2、SP3、SP4などの、どのサービスパックを当てている状態でしょうか?

具体的には、

SELECT @@VERSION

を実行して表示される、8.00.**** の一番右側の番号を調べて下さい。

D:\>osql -E
1> SELECT CAST(@@VERSION AS VARCHAR(50))
2> GO

 --------------------------------------------------
 Microsoft SQL Server  2000 - 8.00.760 (Intel X86)

(1 件処理されました)
1> QUIT
8.00.760 なので、760番の数字は、SP3が適用された例です

あるいは、エラーログの内容からバージョン番号を調べる方法もあります。
この方法は、SQL文を実行しなくてもバージョン番号を調べることができるので、こちらの方法をおすすめします。

現在運用中の、SQL Server のバージョン番号を、まず最初に確認しましょう。

 
 
[SQLServer データベースの移動:事前確認-00020]

なぜ、バージョン番号にこだわるのでしょうか?

同じ、SQLServer 2000 なら、サービスパックを当てようが当てまいが、同じ8.00のメジャー番号は一致しているので問題は無いと思います。

このような考えはダメですか?

SQLServer や MSDE のデータベースシステムに、サービスパック(SP)を当てることは、データベースシステムのプログラムを修正するだけだと勘違いする方が多いので注意が必要です。

サービスパックを当てるとプログラムはもちろん修正されます。さらに、masterデータベースやmsdbデータベースなどのシステムデータベースの内容も一緒に修正が行なわれます。

このシステムデータベースを修正するという点が、非常にやっかいな問題を引き起こします。

サービスパック1番(SP1)が当たったmasterデータベースは、サービスパック1番(SP1)が当たったデータベースプログラムと一緒に運用をしなければいけません。サービスパック2番(SP2)が当たったデータベースプログラムに、サービスパックを当てていないmasterデータベースを復元することはできません。

このように、データベースプログラムに当てているサービスパック番号と、システムデータベースに当てているサービスパック番号は、必ず一致させないと、正しい動作保証は受けられないのです。

ですから、SQLServer や MSDE のデータベースシステムに新しくサービスパックを当てると言うことは、まったく新しいバージョンにするということと考えて、差し支えありません(そのような慎重姿勢で、サービスパックを当てましょう)。

サービスパックを当てると、それまでにバックアップをして保存したシステムデータベースは、新しいサービスパックを当てた環境では何の役にもなりません。サービスパックを当てた直後に、もう1度最初から、システムデータベースのバックアップを行ないます。

また、masterデータベースの再構築と呼ばれる特別な操作を行なうとき、データベースシステムのプログラムはサービスパックが当たった状態なのに、masterデータベースなどのシステムデータベースの物理ファイルを製品出荷時のCD-ROMを指定するといった誤った操作をしないためにも、サービスパックを当てた直後のシステムデータベースの物理ファイルを手元に保存しなければいけません。

masterデータベースの再構築とは、masterデータベースが壊れてデータベースサービスが立ち上がらなくなった場合の、最後の復旧手段です。システムデータベースの物理ファイルからシステムデータベースを構築します(データベースサービスが起動しないため、backup database文によってバックアップされたバックアップファイルは一切使うことができない最悪の状況に陥っています)。そのとき、サービスパックの適用状況が問われます。データベースシステムのプログラム側にサービスパックを当てているのであれば、そのサービスパックを当てた状態のシステムデータベースの物理ファイルが必要となります。サービスパックを当てた直後の、システムデータベースの物理ファイルのコピーは、お持ちですか?

今回は、SQLServer 2000 で運用しているデータベースを MSDE 2000 に移動します。このとき、masterデータベースの中に記録されている『ログイン情報』も一緒に、MSDE 2000 に、移動しました。masterデータベースを移動させるので、サービスパックの適用状況を、SQLServer と MSDE との間で、一致させたわけです(なお最初にも述べましたが、SQLServer データベースのmasterデータベースを MSDE 側に移動させることは、保証されておりません)。

なお、ユーザが作成したユーザデータベースに関しては、サービスパックの適用状況に関係なく、互換性が保たれます。システムデータベースを取り扱うときだけ、サービスパックの適用状況を強く意識するようにしましょう。

 
 
[SQL Server データベースの移動:事前確認-00030]

SQL Server 2000 に、サービスパックを適用したときの、バージョン番号がどのように変化するか、教えて下さい。

 
マイクロソフトサポート文書番号321185
によれば、

リリースSqlservr.exe
製品版(サービスパック無し)2000.80.194.0
SQL Server 2000 SP12000.80.384.0
SQL Server 2000 SP22000.80.534.0
SQL Server 2000 SP32000.80.760.0
SQL Server 2000 SP3a2000.80.760.0
SQL Server 2000 SP42000.8.00.2039

となります。

MSDE 2000 についても、サービスパックを当てたときのバージョン番号は同じです。

SP3 と SP3a は、大きな違いはありません。SP3 が当たっていれば、わざわざ SP3a にする必要はありません。

SQL Server 2000 のサービスパックの詳細は、マイクロソフトサポート文書番号306908を参照して下さい。

 
 
[SQLServer データベースの移動:MSDEインストール-00040]

現在運用している SQLServer のバージョン番号は、760番で、SP3 が当たっていました。ここから、MSDEにデータベースを移動する場合、どのような、MSDEをインストールすればよろしいですか?

760番のSP3が当たっているMSDEは、MSDE 2000 Release-A に相当します。
マイクロソフト社のここから、ダウンロードできます。

なお、2039番のSP4が当たっているMSDEは、SQL2000.MSDE-KB884525-SP4-x86.EXEというファイルからインストールすることができます。
マイクロソフト社のここから、ダウンロードできます。

MSDE 2000 Release-A のインストールについては、『MSDE 2000 Release-A インストール』を参照下さい。

MSDE 2000 SP4 の新規インストールについては、『MSDE2000 SP4 新規インスタンス インストール プログラム』を参照下さい。

 
 
[SQL Server データベースの移動:MSDEインストール-00050]

SQL Server からデータベースを移動するために、MSDEをインストールしたいと思います。何か注意事項はありますか?

今回は、SQL Server で登録されているログイン情報も、一緒に、MSDE側に移動します。これは、masterデータベースを移動することでログイン情報が移ります(実際の操作は、SQL Server 側でバックアップされたmasterデータベースのバックアップファイルを、MSDE側で復元操作を行います)。

MSDE側では、masterデータベースの内容を現在と違うものに復元しますので、万が一、失敗したら、大変なことになります。

そこで失敗しても、その影響が最小限になるように、新しいMSDEのデータベースサーバー(インスタンスという)を使って、その操作を行なって下さい。

移動先にまだMSDEがインストールされていなければ、問題はありません。

もし、すでにMSDEがインストールされているときは、すでにインストール済みのMSDEのデータベース環境を使わずに、もう1つ、新しいMSDEのインストールを行ないます(別のインスタンスのインストール)。

MSDE 2000から、同一コンピュータ上に、複数個のデータベースサーバーをインストールすることができます。この機能を使えば、万が一、今回のデータベースの移動操作で失敗事故が発生しても、すでにインストール済みのMSDEインスタンスに対しては、何の影響も与えることはありません。

このような安全策を取って、慎重に作業を進めて下さい。

 
 
[SQLServer データベースの移動:MSDEインストール-00060]

MSDE2000 Release-A を入手し、既定のフォルダ位置に、圧縮ファイルを展開しました。どのように、インストールをすればよろしいですか?

SQLServer 側のバージョンが、760番のSP3が当たっている状態なので、同じバージョン番号に相当する MSDE2000 Release-A の新しいデータベースサーバー(インスタンスのこと)をインストールすることにします。

インスタンスの名前を、ここでは、「MVTEST」とします。

次のような、インストールコマンドを、「ファイル名を指定して実行」で、入力して下さい。

C:\MSDERelA\setup.exe SAPWD="sa_password" INSTANCENAME="MVTEST" DISABLENETWORKPROTOCOLS=0 SECURITYMODE=SQL
(1行で入力します)

MVTESTという名前のインスタンスが、インストールされます。

MSDE 2000のインストール(MVTESTインスタンスのインストール) C:\Program Filesフォルダの中の、Microsoft SQL Server フォルダに、MSDE2000 がインストールされます。

MSSQLサブフォルダは、MSDE2000の既定のインスタンスです(デフォルトのデータベースサーバー)。

MSSQL$MVTEST サブフォルダが、MVTESTインスタンス名に対応した、MSDE2000 のデータベースサーバーです。

 
 
[SQL Server データベースの移動:サーバーネットワークの設定-00070]

MVTESTインスタンスをインストールしました。

この MSDE 2000 データベースサーバーに、簡単に接続できるように、待ち受けポート番号を、1500番に設定したいと思います(SQL Server の、標準のポート番号は、1433番です。1433番は、既定のインスタンスのデータベースサーバーが使用します)。

どのようにすれば、よろしいですか?

サーバーネットワークユーティリティを起動して、待ち受けポート番号の設定を行ないます。

MSDE 2000 をインストールしても、プログラムメニューには、サーバーネットワークユーティリティが作成されません。しかし、ユーティリティのコマンドは、MSDE 2000 と一緒に、インストールされます。

次のコマンドを、「ファイルイ名を指定して実行」で、入力します。

"C:\Program Files\Microsoft SQL Server\80\Tools\Binn\SVRNETCN.exe"
(1行です)

サーバー ネットワーク ユーティリティで、MSDE 2000のインスタンスのネットワークを変更する。拡大表示します サーバー ネットワーク ユーティリティ を使って、MSDE 2000 データベースサーバーの、サーバー側ネットワークのパラメータを設定します。

MVTESTインスタンスを選択して、TCP/IPネットワークのプロパティを表示します。

サーバー ネットワーク ユーティリティで、MSDE 2000のインスタンスのTCP/IPの待ち受けポート番号を変更する。拡大表示します TCP/IPネットワークの、ポート番号を、1500番に設定します。
サーバー ネットワーク ユーティリティで、ポート番号を変更したら、データベースサービスを再起動して下さい。

また、MSDE 2000をインストールしたコンピュータの、ネットワークカードのIPアドレスも調べておきます。

 
 
[SQLServer データベースの移動:クライアントネットワークの設定-00080]

MVTESTインスタンスの、MSDE2000データベースサーバーに、SQLServerをインストールしたコンピュータから接続できるようにしたいと思います。

どうすればよいですか?

SQLServerが動作しているデータベースサーバー上のコンピュータから、MSDEをインストールしたコンピュータに接続ができるように設定をしておくと、SQLServerに付属するEnterprise ManagerやクエリアナライザがMSDE2000に対しても使えるようになり、何かと便利です。

MSDE(データベースサーバー側)から見た場合、SQLServerが動作しているコンピュータは、クライアント側コンピュータに相当します。そのためネットワークの設定は、クライアント側のネットワーク環境の設定となります。

そのためのコマンドが、「クライアント ネットワーク ユーティリティ」(cliconfg.exeコマンド)です。このコマンドは、Windowsのコマンドとして組み込まれています。

C:\WINDOWS\system32\cliconfg.exe などにあります(Windowsのバージョンによってフォルダ名が多少違う)。

このコマンドを起動します。

クライアント ネットワーク ユーティリティで、MSDE 2000のインスタンスへ接続を行なうクライアント側ネットワークを変更する。拡大表示します クライアント ネットワーク ユーティリティ を使って、MSDE 2000 データベースサーバーに接続を行なう、クライアント側コンピュータのネットワークを設定します。

「別名」の「追加」によって、サーバー別名を登録します。

クライアント側から、できる限り簡単にMSDE2000データベースサーバーへ接続するためには、インスタンス名をあまり意識しないで済むようにしたいと思います。

そこで、ポート番号1500番で待ち受けているMSDE2000のインスタンスに、クライアント側から勝手に名前を付けて(サーバー別名と言う)、この名前を使って接続ができるようにしたいと思います。

クライアント ネットワーク ユーティリティで、サーバー別名を登録する。拡大表示します サーバー別名を登録します。

別名の名前は、MSDE2000のインスタンス名と同じにします(異なる名前でも良い)。

サーバーのIPアドレスと、ポート番号(1500番)を入力します。

このように、サーバー別名を登録したら、このクライアントコンピュータからMSDE2000のMVTESTインスタンスに接続ができるようになります。

クライアント ネットワーク ユーティリティで定義された、サーバー別名を使って接続を行なう。拡大表示します クライアント ネットワーク ユーティリティ で定義された、サーバー別名を使って、クエリアナライザから接続を行ないます。

接続先のSQLServerの名前は、サーバー別名で定義を行なった、MVTESTです。

サーバー名の表示を行なう。拡大表示します 接続先サーバーの、サーバー名を表示します。

MVTESTインスタンスとして動いているサーバーに、正しく接続していることがわかります。

osqlコマンドを使って、MSDEデータベースサーバーに接続を行なうときは、-Sスイッチに指定する接続先サーバー名に、サーバー別名で定義したMVTESTを指定します。
C:\>osql -S MVTEST -U sa -P sa_password
1> SELECT CAST(@@SERVERNAME AS VARCHAR(50))
2> GO

 --------------------------------------------------
 SUPER\MVTEST

(1 件処理されました)
1> QUIT

 
 
[SQL Server データベースの移動:シングルユーザモードでのデータベースサービスの起動-00090]

ログイン情報の転送を、まず最初に、行ないたいと思います。どのような点に注意をすればよろしいでしょうか?

SQL Server から MSDE に移動を行なうユーザデータベースの中に含まれているデータベースユーザ情報は、SQL Server で管理されたログイン情報と対応付けが行なわれています。

データベースユーザが、dboユーザとguestユーザだけから構成されていれば、このユーザ情報はどのデータベースサーバー環境でも一致するため、特別な配慮は必要ありません。

ところが、その他のユーザ名が登録されているのが普通です。

ユーザデータベースを現在の運用環境から、別のデータベースサーバーに移動した場合、ログイン情報とユーザ情報との対応関係が一致しない部分が発生します。

このようなトラブルを防ぐためには、ユーザデータベースだけを移動する操作では不十分で、ログイン情報も一緒に移動しないといけません。

ログイン情報は、masterデータベースのsysxloginsシステムテーブルによって管理されます。

このテーブルの内容を、移動先のMSDEデータベースサーバーの同じsysxloginsシステムテーブルに上書きすれば、ログイン情報が一致することになります。

この上書き操作をできる限り簡単に済ませようと考えて、ここでは、SQL Server 側でバックアップされたmasterデータベースを、MSDE側で復元する操作を取りたいと思います。

masterデータベースの復元操作』を行ないます。

masterデータベースの復元操作を行なうときは、データベースサービスを『シングルユーザモード』と呼ばれる特別な起動方法で立ち上げる必要があります。

 
 
[SQLServer データベースの移動:シングルユーザモードでのデータベースサービスの起動-00100]

シングルユーザモードで、データベースサーバーを立ち上げる、具体的な方法を教えて下さい。

あるデータベースサーバーのインスタンスを、シングルユーザモードで立ち上げる場合は、コマンドプロンプトのカレントディレクトリ位置を、そのインスタンスが収録されているBinnディレクトリ位置にします。


C:\>cd "C:\Program Files\Microsoft SQL Server\MSSQL$MVTEST\Binn"    

C:\Program Files\Microsoft SQL Server\MSSQL$MVTEST\Binn>    
MVTESTインスタンスの場合に、カレントディレクトリ位置を変更します。

データベースサービスが動いていないことを確認してから、そのカレントディレクトリ位置から、次のようなコマンドを入力して、シングルユーザモード専用のデータベースサービスを立ち上げます。

C:\Program Files\Microsoft SQL Server\MSSQL$MVTEST\Binn>sqlservr -s MVTEST -c -m  (リターンキー)
-s スイッチで、インスタンス名を指定します
-c スイッチで、起動時間を短縮します
-m スイッチで、シングルユーザモードで立ち上げます

シングルユーザモードで起動したデータベースサーバーのサービスを止めるときは、CTRL+Cのキー操作をします

 
 
[SQL Server データベースの移動:masterデータベースの復元前の事前調査-00110]

masterデータベースを復元したら、何か困ることが起きますか?
もし困ることがあれば、それを事前に防止することはありませんか?

masterデータベースを復元するということは、そのmasterデータベースをバックアップしたデータベースサーバーの環境と同じ環境が必要になります(ドライブ名やフォルダ名などの完全一致)。

masterデータベースの中には、そのデータベースサーバーで運用している個々のデータベースのファイル名が、完全パスの形式で記録されています。
例えば、あるデータベースの物理ファイルは、ドライブE:の、あるディレクトリの中の、あるファイルだというような情報です。

そのファイルが存在しないと、masterデータベースを復元した後に、様々なトラブルが発生します。

データベースサービスを立ち上げたとき、masterデータベースの中に記録されているこれらの物理ファイルの情報を参照して、該当するデータベースを開きます。

もし、一般ユーザが作成したデータベースを構成する物理ファイルが見つからない場合は、そのデータベースは利用できないと判断して、そのデータベースをスキップします。

ところが、システムデータベースであるmsdbとmodelを構成する物理ファイルが見つからないと、事情が異なります。致命的なエラーが発生したと判断し、データベースサービスは起動しません。

ここで、問題があります。masterデータベースをバックアップしたSQL Server上にある、msdbとmodelシステムデータベースの物理ファイルと同じファイルが、復元を行うMSDEのコンピュータ上に存在しますか?(物理的なパスが一致しますか?)

一般的には、SQL Server では、システムデータベースの記憶場所を、既定のフォルダ位置からその場所を変更したりします。例えば、D:\DATABASE\MSSQL\Data に変更するなど。

このように、システムデータベースを既定の位置から変更している場合は、その変更された位置と同じ場所に、システムデータベース(msdbとmodel)の物理ファイルを置いておく必要があります。

もしMSDE側で、その位置に物理ファイルを置いておくのに何か支障がある場合は、データベースサービスを起動した後に、物理ファイル位置の変更を行なうことができます。しかし、データベースサービスそのものが起動しなければ、何の操作をすることもできませんので、masterデータベースを復元した直後のデータベースサービスの起動では、支障のある位置に、物理ファイルを置いて下さい。

どうしても、同じ位置に、物理ファイルを置くことができない場合(例えばドライブ名が存在しないなど)は、トレースフラグ3608番を付けて、データベースサービスを起動することができます。

マイクロソフトサポート文書番号224071

 
 
[SQLServer データベースの移動:masterデータベースの復元前の事前調査-00120]

バックアップしたmasterデータベースは、既定のデータベースサーバーで、既定のフォルダを使っています。
何か困ることがありますか?
もし困ることがあれば、それを事前に防止することはありませんか?

SQLServerでバックアップを取ったmasterデータベースは、既定のデータベースサーバーで、フォルダ位置を変更していません。

C:\Program Files\Microsoft SQL Server\MSSQL\Data のフォルダの中に、システムデータベースが収録されていました。

この場合、このフォルダと同じものが、MSDE側にも存在し、MSDE側の既定のデータベースサーバーとなっています。

MSDE側のMVTESTインスタンスを使ってmasterデータベースを復元すると、MVTESTインスタンスのmsdbとmodelシステムデータベースを使うのではなく、物理パスが一致する既定のサーバーのmsdbとmodelシステムデータベースを使うことになります。

MSDE側の既定のデータベースサーバーが動いているときには、MVTESTインスタンスサーバーは、立ち上がりません。

このような問題を考慮し、MVTESTインスタンスを立ち上げるときは、既定のサーバーを止めて、速やかに、物理ファイルの移動などの復旧処理を行なって下さい。

 
 
[SQL Server データベースの移動:masterデータベースの復元前のbackupフォルダの作成-00130]

masterデータベースを復元する前に、フォルダを作成しておく必要があります。それはどのフォルダですか?

masterデータベースを復元するときは、「再起動チェックポイントファイル」と呼ばれるシステムファイルが、backupフォルダの中に作成されます。

ところが、backupフォルダが、MSDEをインストールした直後には、存在しません。

このためシステムファイルが作成できずに、エラーメッセージが表示されます(このエラーは無視しても大丈夫だが、念のため、backupフォルダを作成しておきます)。

MVTESTインスタンスの場合は、

C:\Program Files\Microsoft SQL Server\MSSQL$MVTEST\backup

という、backupフォルダを作成して下さい。
 
 
[SQLServer データベースの移動:masterデータベースの復元操作の実行-00140]

準備ができました。masterデータベースを復元する操作を教えて下さい。

SQLServer 側で、masterデータベースと、msdbデータベースのバックアップを実行します。

msdbデータベースの中には、ジョブが含まれているので、そのジョブもMSDE側に移します(移したジョブが正しく動く保証はありません。通常は、ジョブの中のSQL文等の修正が必要になります)。

バックアップを実行する命令は、

backup database master to disk = 'バックアップファイル名 master.bak'
backup database msdb to disk = 'バックアップファイル名 msdb.bak'

です。このバックアップファイルをMSDE側に持ってきます。

MSDEのMVTESTインスタンスをシングルユーザモードで起動して下さい。

シングルユーザモードでデータベースサーバーを立ち上げたら、OSQLコマンドやクエリアナライザ等で、次のmasterデータベースを復元する命令を入力します。

C:\>osql -S MVTEST -U sa -P sa_password
1> restore database master from disk='d:\bak\master.bak'
2> go
master データベースが正常に復元されました。SQL Server をシャットダウンしています。
SQL Server がこのプロセスを終了中です。

C:\>
OSQLコマンドを実行するクライアントでは、サーバー別名MVTESTを登録しています。

d:\bak\master.bakバックアップファイルから、masterデータベースが復元されます。

これで、masterデータベースが復元されましたので、ログイン情報がMSDEのMVTESTインスタンスに移ったことになります。

 
 
[SQL Server データベースの移動:データベースサービスの起動とログイン-00150]

masterデータベースを復元しました。次の操作を教えて下さい。

データベースサービスを起動する前に、システムデータベースmsdbとmodelの物理ファイルが、SQL Server側の環境と同じ場所にあることを確認して下さい。同じ場所にあることを確認したら、MSDEのMVTESTインスタンスを通常の方法で起動します。

masterデータベースを復元したので、SQL Serverログインに必要なパスワードが、変更された可能性があります。

SQL Server で運用しているときのログイン情報となります。

saログインのパスワードも変わっていると思います。SQL Server側で使っているパスワードを使います。

なお、MSDE側とSQL Server側と、saのパスワードが違う場合は、その変更処理をしましょう。


C:\>osql -S MVTEST -U sa -P sa_password
ユーザー 'sa' はログインできませんでした。

C:\>osql -S MVTEST -E
1> exec sp_password @new='sa_password' , @loginame='sa'          
2> go
パスワードは変更されました。
1> quit

C:\>osql -S MVTEST -U sa -P sa_password
1> quit

C:\>
saログインのパスワードを、MVTESTインスタンスをインストールしたときに指定したパスワードに戻しました。

 
 
[SQLServer データベースの移動:msdbデータベースの復元-00160]

saログインパスワードを変更しました。次の操作を教えて下さい。

ジョブなどが記録された、msdbシステムデータベースを復元します。

ジョブを定義しているSQL文の中には、サーバー名などが埋め込まれている場合がありますので、そのままでは正しく動きません。

msdbシステムデータベースを別の環境の上に復元したときは、ジョブの中身を1つ1つ確認して修正を行なって下さい。


C:\>osql -S MVTEST -U sa -P sa_password
1> restore database msdb from disk='d:\bak\msdb.bak'
2> go
ファイル 1 で、データベース 'msdb'、ファイル 'MSDBData' の 2072 ページが処理され
ました。
ファイル 1 で、データベース 'msdb'、ファイル 'MSDBLog' の 1 ページが処理されまし
た。
RESTORE DATABASE は 2073 ページを 0.830 秒で正常に処理しました (20.452 MB/秒)。
1> quit

C:\>

msdbシステムデータベースを復元しました。

 
 
[SQL Server データベースの移動:データベースサーバー名の変更-00170]

msdbを復元しました。次の操作を教えて下さい。

masterデータベースをSQL Serverから持って来て、そのまま復元しましたので、SQL Server側と同じ情報が登録されています。

その中で困るのは、データベースサーバー名です。データベースサーバー名の名前が、SQL Server側と同じ名前になっています。

具体的にはSQL文の@@servernameの値です。


C:\>osql -S MVTEST -U sa -P sa_password
1> select cast(@@servername as varchar(30))
2> go

 ------------------------------
 ここに表示される名前がSQL Server側の名前と一致する   

(1 件処理されました)
1> quit
本来の正しい名前は、「コンピュータ名\インスタンス名」の形式です。

そこで、@@servernameが返す値を正します。

次のような操作によって、正しい名前が返るようになります。


C:\>osql -S MVTEST -U sa -P sa_password
1> exec sp_dropserver 'SQLServer側のサーバー名です(削除を行なうサーバー名です)'
2> go
(1 件処理されました)
(1 件処理されました)
1> exec sp_addserver 'SUPER\MVTEST' , 'local'
2> go
(1 件処理されました)
(1 件処理されました)
(1 件処理されました)
(1 件処理されました)
(1 件処理されました)
1> quit

sp_dropserverで、サーバー名を削除します。@@servernameが表示した名前をそのまま指定します。

sp_addserverで、サーバー名を登録します。インスタンス名付きの正しい名前を登録します。この例のコンピュータ名はSUPERとしています。インスタンス名は、MVTESTです。
2番目のパラメータは、必ずlocalとして下さい。


C:\>osql -S MVTEST -U sa -P sa_password
1> select cast(@@servername as varchar(30))          
2> go

 ------------------------------
 SUPER\MVTEST

(1 件処理されました)
1> quit

C:\>

データベースサーバー名が、正しくなりました。

 
 
[SQLServer データベースの移動:亡霊?となっているユーザデータベースの削除-00180]

データベースサーバー名が正しくなりました。次の操作を教えて下さい。

masterデータベースの中には、そのデータベースサーバーで運用しているユーザデータベースの名前が記録されています。

MVTESTインスタンスでは、現在のところ、ユーザデータベースは1個も存在しません(システムデータベースだけあります)。

しかしmasterデータベースの中には、SQL Server側で運用していたユーザデータベースの名前が覚えられており、そのユーザデータベースが存在しないというエラーが発生しています。

そこでこの亡霊のようなユーザデータベースを全部削除して、きれいな状態にしましょう。

C:\>osql -S MVTEST -U sa -P sa_password
1> select cast(name as varchar(30)) from master.dbo.sysdatabases        
2> go

 ------------------------------
 master
 tempdb
 model
 msdb
 ユーザデータベース名
 ユーザデータベース名
 ユーザデータベース名
 ユーザデータベース名
 ユーザデータベース名
 ユーザデータベース名
(10 件処理されました)
1> drop database ユーザデータベース名
2> go
1> drop database ユーザデータベース名
2> go
(以下、同様)
1> quit

データベース名の一覧表を表示して、その中で、システムデータベースを除いたユーザデータベースを、1件1件削除します。

 
[SQL Server データベースの移動:目的のユーザデータベースを復元する-00190]

亡霊を削除しました。次の操作を教えて下さい。

いよいよ、目的となっているユーザデータベースを復元します。

SQL Server側でバックアップされたユーザデータベースを、MSDE側のMVTESTインスタンスで復元します。

C:\>osql -S MVTEST -U sa -P sa_password
1> restore database データベース名 from disk='バックアップファイル名'    
2> go

移動を行なうユーザデータベースを復元します。ファイル移動のオプション指定が無いときは、バックアップ命令を実行したときと同じフォルダの中に、ファイルが復元されますので、物理ファイルのパス情報が一致します。

もしドライブ構成などが異なる場合は、restore命令で、ファイル移動のオプションを定義して下さい。

ユーザデータベースの復元ができたら、念のため、データベースチェックをしましょう。
1> dbcc checkdb('データベース名')
2> go
(メッセージが表示されます。途中省略)
CHECKDB はデータベース 'データベース名' で 0 個のアロケーション エラーと 
0 個の一貫性エラーを見つけました。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管
理者に相談してください。
エラーが0個(エラーが存在しない)であることを、確認して下さい。

以上の操作によって、SQL Server で運用しているデータベースを、MSDE側のMVTESTインスタンス環境に移動することができました。

 
 
 
MSDE FunClubに関するご意見・ご要望等ございましたら、
msdefun@horikawa.ne.jp までご連絡下さい。
MSDEを始めとする各種データベースシステムの開発、コンサルタントに関するご要望等は、
msdedev@horikawa.ne.jp までご連絡下さい。