読者です 読者をやめる 読者になる 読者になる

旅モバ

旅、モバイル、サーバ関連(Linux,FreeBSD)、クラウド・Webサービス、その他PCの話題など。

Windows Server 2003+SQL Server2000からWindows Server 2008 R2+SQL Server 2008 R2 Expressへの移行メモ

忘れてしまいそうなので自分用メモとして・・。かなり乱筆というか適当です。

ちなみに、Windows Server 2008 R2でもWindows Server 2003時代に書いたClassic ASPが動きます。そして、SQL Server 2000のデータベースファイルは、SQL Server 2008 R2でもそのままアタッチできます。ASP+SQL Server 2000なシステムはレガシー過ぎて移行できないんじゃないかなんて想像していましたが、簡単すぎて拍子抜けしました。どちらかといえば、移行作業よりも、IISSQL Serverの設定がはまりどころですね。

SQL Server 2000からSQL Server 2008 R2 Expressへのデータベースの移行

SQL Server 2008 R2とSQL Server Management Studioがインストールされており、設定が完了してることが前提。

  1. SQL Server 2000がインストールされたサーバのデータベースをデタッチする
  2. デタッチしたデータベースファイル(.mdf,.ldfファイル)をネットワークやUSBメモリ等経由で、SQL Server 2008 R2 Expressがインストールされたサーバのデータフォルダにコピーする
    (C:\Program Files\Microsoft SQL Server\MSSQL10_50.<インスタンス名>\MSSQL\DATAのはず)
  3. SQL Server 2000と同じデータベースユーザーを追加する
    ([セキュリティ]-[ログイン]を右クリック→[新しいログイン]をクリックでユーザーの追加が可能)
  4. SQL Server Management Studioで、コピーしたデータベースをアタッチする
  5. 以下のSQL文をアタッチしたDBの数だけ実行する
    USE
    EXEC sp_change_users_login 'Update_One', 'hoge', 'hoge'
    ※hoge=データベースユーザー名
    ※EXEC sp_change_users_loginは、DBに属するユーザーの数だけ実行する
    ※参考:SQL Server 別のSQL Serverのバックアップを復元した時にアクセスできなくなり,ログインのプロパティ等でエラーになるのを修復する方法: T_Nary ブログ

SQL ServerODBCする際の事前設定

ODBC設定を行うサーバがSQL Serverが動作するサーバであることが前提。そうでない場合は、サーバー名のlocalhostのくだりを、SQL Serverが動作するサーバのアドレスに変更する。

  1. SQL Server 構成マネージャー」を実行する
    [スタート]-[すべてのプログラム]-[Microsoft SQL Server 2008 R2]-[構成ツール]-[SQL Server 構成マネージャー]をクリック
  2. [SQL Server ネットワークの構成]-[<インスタンス名>のプロトコル]をクリック
  3. [TCP/IP]を右クリック→[有効化]をクリック
  4. [スタート]-[管理ツール]-[データ ソース(ODBC)]をクリック
  5. [システムDSN]タブをクリック
  6. [追加]をクリック
  7. SQL Server」を選択
  8. データソース名はSQL Server 2000のODBC設定と合わせる、サーバーはlocalhostとする
  9. これ以降はSQL Server 2000と同じ設定とする(めんどくさいので適当・・)

SQL Serverにつながらない場合の対処方法

ファイアウォールにより遮断されてODBCがつながらない場合がある。以下の方法でファイアウォールのポリシーを変更して1433ポートへの接続を許可するようにする。

  1. [管理ツール]-[セキュリティが強化されたWindowsファイアウォール]をクリック
  2. 左ペインの[受信の規則]を右クリック→[新規の規則]をクリック
  3. [ポート]を選択して[次へ]をクリック
  4. [特定のローカルポート]で1433と入力して[次へ]をクリック
  5. [接続を許可する]を選択して[次へ]をクリック
  6. 「この規則はいつ適用しますか?」と表示され、ドメイン、プライベート、パブリックの3つが表示される。とりあえず、まずは繋がることが大事なので、すべてチェックして[次へ]をクリック。(本番じゃなくてローカルで動かしていれば後回しでも良いよね?)
  7. 名前を付けて[完了]をクリック

※参考:SQL Server 2008にODBC接続 - 旧cyberarchitect

IISでClassic ASPを使えるようにする

  1. IISマネージャーを開く
  2. [アプリケーションプール]をクリック
  3. [アプリケーションプールの追加](右ペイン)をクリック
  4. 名前を入力して、マネージパイプラインモードは「クラシック」に変更する。その他の項目はそのまま。変更後[OK]をクリック。
  5. Classic ASPを実行したいサイトまたはディレクトリを選択して、[基本設定](右ペイン)をクリック。
  6. アプリケーションプールの[選択]ボタンをクリックし、先ほど追加したアプリケーションプールに変更する。変更後、[OK]をクリック。

IISでClassic ASPのエラーメッセージを表示する

IIS7以降はIIS6までのようにエラーメッセージがデフォルトで表示されないようだ。なので、エラーメッセージが表示されるように変更。

  1. IISマネージャーを開く
  2. エラーメッセージを表示したいサイトを選択
  3. [エラーページ]-[機能設定の編集](右ペイン)の順にクリック
  4. [詳細なエラー]を選択して[OK]をクリック

※参考:IIS7 で ASP のエラー表示をさせる備忘録: 魔法のPC [Magical PC]

Classic ASPスクリプト実行時に親パスがうんぬんと怒られる場合

本来はスクリプト側を修正すべきだけど、とりあえず動かしたいのであれば以下の設定を行う。

  1. IISマネージャーを開く
  2. サイトを選択する
  3. [ASP]をクリックする
  4. [親パスを有効にする]をTrue→Falseへ変更する

※参考Classic ASP の親パスは既定で無効

BASP21のインストール

ASP時代のシステムによってはBASP21なるライブラリを使用している場合がある。
BASP21は以下のサイトよりダウンロード可能。
BASP21 DLL