SQL Server 7.0 から SQL Server 2000 へ引っ越す

SERVER


Microsoft SQL Server 2000

Microsoft SQL Server 7.0 を使っていたのですけど、このたびサーバを交換しようと思ったので、それに合わせて Microsoft SQL Server 2000 へデータを引っ越してみることにしました。

最初に SQL Server 7.0 を入れて復旧した後で SQL Server 2000 にアップグレードでもいいのかもしれないですけど、今回は新規に SQL Server 2000 を用意して、そこへ引っ越す感じで作業を行ってみることにします。

 

SQL Server 2000 のインストール

SQL Server 2000 本体のインストール

まずは Windows Server 2003 Standard Edition へ Microsoft SQL Server 2000 Developer Edition をインストールします。

Microsoft SQL Server 2000 Developer Edition の CD-ROM を挿入したら、特に変わったことはなく普通にインストール作業を進めて行きます。メニューから "SQL Server 2000 コンポーネント" から "データベースサーバのインストール" を選択します。

すると、このバージョンの Windows ではサポートされていないとのことを示すダイアログボックスが表示されますけど、Microsoft SQL Server Service Pack 3 にて対応可能とのことなので、そのままかまわずにウィザードにしたがってインストール作業を進めて行きます。

途中、インスタンスは "既定" とし、サービスアカウントはローカルシステムアカウントだと他のサーバとの信頼関係が結べなくなるなどの一部の機能が使えなくなるといった感じみたいなのですけど、普通に使用する分には問題ないようだったので、 "ローカルシステムアカウント" を使用するようにしておきました。

 

Service Pack 3a のインストール

Microsoft SQL Server 2000 本体のインストールが終わったら、続いて Microsoft SQL Server 2000 Service Pack 3a もインストールしておきます。これは Microsoft 社のダウンロードサイトから入手することが出来ます。

今回は新規の SQL Server 2000 へ Service Pack 3a を充てるので特にバックアップ等はせずに進めますけど、"master", "msdb", "model" の 3 つのデータベースへ変更を加えるとのことなので、本来はこれらのデータベースをバックアップしておくのが良いとのことでした。

 

ともあれアーカイブの中の "SETUP.BAT" を実行して、Service Pack 3a の適用を開始します。

するとセットアップウィザードが起動してウィザードの指示に従って進めて行くと、途中で SA アカウントのパスワードを尋ねられましたので、セキュリティ上の観点から、パスワードを設定しておきました。

そして Service Pack 3 の適用項目として、必須となっている "Microsoft Search をアップグレードし SQL Server 2000 SP3 を適用する" にだけチェックを入れて、セットアップを続行します。その次に尋ねられる、エラー発生時の Microsoft 社へのエラー報告はとりあえず無しとしつつ…。

これで質問事項は終わり、しばらく放置しておけば、SQL Server 2000 Service Pack 3 のインストールが完了となりました。

 

データベースの移行に至るまでの試行錯誤

Microsoft SQL Server 7.0 のデータベースを、他のコンピュータで稼働中の Microsoft SQL Server 2000 へ移行する場合、データベースコピーウィザードというものを利用することで、サーバを停止させることなく実現可能とのことでした。

これを使用する場合は、Microsoft SQL Server 7.0 の方を読み取り専用にして処理中にデータが変更されないようにすることと、転送先サーバへは同一名称のデータベースが存在しないように注意する必要があるとのことでした。これについては、同一名称のものが存在するとそれに関してはデータの転送がなされないということのようで、データを破壊してしまうとかそういう注意ではないようでした。

 

資料を探してみてもどうやってデータベースコピーウィザードとやらを進めて行けば良いのかが判らなかったりも舌のですけど、とりあえず Microsoft SQL Server 2000 の Enterprise Manager にて探してみたら、サーバ名のところで右クリックして "すべてのタスク" を選択したところに "データベースコピーウィザード" というメニューが存在してました。

なので早速、データベースの移行作業を行ってみようと思います。

 

まずは Microsoft SQL Server 7.0 の方で、転送したいデータベースを読み取り専用とします。

これは特に難しいことはなく、Enterprise Manager を起動したら該当するデータベースのプロパティを表示して、「オプション」 タグの "アクセス" のところにある 「読み取り専用」 にチェックを入れてあげれば完了です。そうすると Enterprise Manager のデータベース一覧のところの表示が灰色になるので、読み取り専用となっていることが一目瞭然でした。

 

続いて Microsoft SQL Server 2000 の方で、データベースコピーウィザードを起動します。

Enterprise Manager のサーバ名のところで右クリックして 「データベース コピー ウィザード」 を起動し、ウィザードの指示に従って転送作業を進めて行きます。転送元のサーバとして、以前に使用していた Microsoft SQL Server 7.0 を指定して、転送先として今使用中の Microsoft SQL Server 2000 を指定します。

 

…と、ここでエラーとなりました。

ローカルシステムアカウントで SQL Server 2000 を起動させている場合は、ネットワークを越えてデータの転送を行うことが出来ないとのことです。なのでまずはその辺りの調整を行います。

コンピュータに新たにアカウントをひとつ作成して Enterprise Manager からサーバのプロパティを表示、そして 「セキュリティ」 タグの下にある "サービス開始アカウント" で作成したアカウントを指定します。また、Enterprise Manager の 「管理」 にある SQL Server Agent にもこのアカウントを登録しておきます。

とりあえずアカウントを変更したときだけ、Enterprise Manager がハングアップしました。その後は特に問題なく動いているみたいです。

 

アカウントに持たせる権限は一般ユーザでも SQL Server の起動自体には問題は生じないみたいです。

ただしこのアカウントを用いて Microsoft SQL Server 7.0 へ接続することになるので、データベースコピーウィザードを使用するために、このアカウントで Microsoft SQL Server 7.0 の管理を行える必要があります。

 

 

アカウントを調整したので、再びデータベースコピーウィザードを起動してみると、今度はちゃんと先に進むことが出来ました。

移動元のデータベース一覧がリストに表示されるので、必要なものについて 「移動」 または 「コピー」 を選択して次へ進みます。今回は移行作業ではありますけど、いきなり移動するのもなんだか怖いので 「コピー」 にしておくことにしました。

そして、コピーする関連オブジェクトの選択です。

【ログイン】、【Master データベースから共有ストアドプロシージャ】、【MSDB からジョブ】、【ユーザー定義エラーメッセージ】 という項目をコピーしてくれるようで、これはかなり便利そうですね。ディフォルトですべてにチェックが入っていましたので、そのまま次へ進みました。

あとは実行するタイミングをスケジュールすれば、そのタイミングでコピー作業を行ってくれるとのことでした。今回は 「すぐに実行」 を選んだので、直ちに作業開始です。

 

これで放っておけば上手く行くかと思われたのですけど、転送に入るとしばらくしてエラーとなってしまいました。

CDW パッケージがエラーで終了しました

アカウントの権限が足りないのかとも思い、Microsoft SQL Server 2000 起動用のアカウントに管理者権限を追加してみたり、そもそも Administrator アカウントで動かしてみたりなどやってみましたけど、どうにも上手く行かないようでした。

エラーを良く見てみると、転送時に送信元のサーバでデータベースのデタッチ処理が上手く行かないような感じでした。

そういえば、転送元の Microsoft SQL Server 7.0 はシステムアカウントで起動中だったので、ここを Microsoft SQL Server 2000 に設定したアカウントと同じものにしてみました。

すると SQL Server 7.0 が起動できなくなってしまって困ったのですけど、データベース用として用意したディレクトリにこのアカウントが読み書きできるように設定してみたところ上手く動くようになりました。ということは、もしかすると Microsoft SQL Server 2000 の方も、試してみた感じでは問題なく動いてますけど、そのような感じで権限の配慮をしておいたほうが良いかもしれないですね。

 

ともあれ、転送元と先の両方のアカウントをローカルシステムアカウントではないものに変えてみたのですけど、それでもやっぱり同じエラーとなってしまいました。アカウントに管理者権限を与えてみたりもしましたけど、結果は変わらずでした。

 

データベースを移行する

いろいろ試してみた結果…、どうやら、転送元のデータベースを読み取り専用に設定していたのが問題だったみたいです。

読み取り専用のチェックをはずしてみたところ、データベースのデタッチの部分でのエラーがなくなり、そのまま問題なく転送処理が終了しました。ときどき 「データベースは 1 個のアクティブな接続を持っています。」 と出るときがありましたけど、それは転送元の Microsoft SQL Server 7.0 を再起動することで解決することができました。

その他の注意事項としては、SQL Server の起動に使うアカウントは Administrator 権限くらいの必要もあるみたいです。一般ユーザアカウントにしておくと、データベースを転送する際に使用する共有フォルダかなにかの準備のあたりでエラーとなってしまいました。

 

ともあれこの程度に注意すれば、問題なく転送作業を行うことが出来ました。

が、散々失敗したせいか、ユーザーアカウントまわりの転送がどうも上手く行っていないような感じでした。アカウント自体は登録されているのですけど、それのログイン名が割り当てられていないため、SQL Server 認証でのログインには使えなかったのでした。

これはもしかすると Microsoft SQL Server 2000 のディフォルト設定で SQL Server 認証が無効になっていたためなのかもしれないですけど、とりあえず今回の自分の環境では、この辺りの調整を改めて行う必要があったのでした。