タグ別アーカイブ: SQLServer

[Oracle初心者運用メモ]SQLServerへのデータ移行

今回は、Oracleというより
SQLServerの技術情報になります。

客先のシステムでOracleを使っていましたが、
Windows Server 2003のサポート終了に伴いDBサーバを新しくすることになり
新サーバのOSに対応したバージョンのOracleを購入するか
SQL Serverに移行するかの検討を行い、
DBの規模がそこまで大きくなかったため、SQL Serverに移行することになりました。

プログラムの方は、Oracle独自のSQL構文を修正、
データ移行は、SQL Server Management Studioの「データのインポート」機能を
使用して移行を行いました。

■データのインポート
コピー元(Oracle側)の指定は
データソースの選択で「.Net Framework Data Provider for Oracle」を選択
ユーザID、Password、Data Sourceを指定します。

インポート

後は、通常のSQL Server間でインポートする時と同様の方法
となりますが、
OracleとSQL Serverでデータ型が異なる項目については
「コピー元のテーブルおよびビューの選択」画面で
テーブル毎に「マッピングの編集」で変換先の型を指定する必要があります。

今回、変換先の型を指定したものは次になります。
<Oracle> DATE ⇒ <SQL Server> datetime
<Oracle> VARCHAR2 ⇒ <SQL Server> varchar ※1バイト文字コードのみ項目の場合

 

テーブル毎に「マッピングに編集」を設定する作業が多少面倒ではありましたが
比較的簡単にデータ移行を行うことができました。

SQL Server移行後のシステムでのデータアクセス速度も
Oracleの時と同じくらいの速度で動作しており安心しました。

 

DB内のオブジェクトを更新日が新しい順に取得

今回は、SQLServerに関する話です。

稼働中のシステムを改修し、本番環境へ反映する際に、
プログラムの入替のみではなく、
データベースの更新作業が必要なことがあります。

あまり考えたくありませんが、
例えば、テーブルやビューにフィールドの追加や
新しく作成したストアドプロシージャやユーザー関数を追加などです。

確実なのは、作業リストを作成し、
改修した機能について、どのテーブル・ビューなどが改修されたか記録を取ることでしょう。

ただし、改修に時間が掛かったり、
複数の機能改修をまとめて反映する際には、
記録漏れが出ることも有ります。

これを回避するため、
DB内のテーブル・ビュー・ユーザー関数を更新された順に取得したいと思います。

該当のDBに対し、以下のSQLを実行します。


SELECT name, modify_date
FROM sys.objects
WHERE type in ('V', 'U', 'FN', 'P')
ORDER BY modify_date desc

sys.objects はデータベース内のオブジェクトを管理しているテーブルです。

SELECT句にはオブジェクト名(name), 更新日(modify_date)を指定します。
WHERE句には抽出する条件を指定します。
今回は、新しく更新された順に、
テーブル名・ビュー名・関数名・ストアドプロシージャが取得できればよいので、
U:テーブル(ユーザー定義)
V:ビュー
FN:スカラー関数
P:ストアドプロシージャ
の4文字をtypeに指定します。
ORDER BYにて、変更日の降順に出力すれば、
変更日が新しい順に更新したテーブル等が確認できる、ということになります。

typeはこれ以外にもありますが、
改修時に変更の頻度が高いのは上記の4つかな、と思いましたので、
この様に記述しています。

sys.objectsについて、詳しくはこちらに記述が有ります。
sys.objects(Transact-SQL)