異なるDBの値比較方法
- 異なるDBの値比較方法について考えています。まったく同じジョブの内容でスケジューリング方法を変えて実行し、その前後でDBの内容が同一かを検証する方法を教えてください。
- DBはOracle9で、テーブル数は約100強で、エクスポートすると約500MBです。検証方法としては、処理前に本番データをエクスポートし、それを検証環境にインポートしてスケジュールを実行し、同じ結果を得られるかを検証します。
- 現在考えている方法としては、DBをDBリンクで接続し、オブジェクトブラウザのオブジェクト比較機能を使う方法や、検証用のプロシージャを作成して比較する方法、エクスポートファイルをUNIXでソートしてuniqコマンドで比較する方法があります。
- ベストアンサー
異なるDBの値比較方法
まったく同じジョブの内容でスケジューリング方法を変えて実行した時、その前後でDBの内容が同一であるか検証する方法を考えています。 DBはoracle9、テーブル数は約100強、エクスポートすると約500MBです。 検証方法は、処理前に本番データをエクスポートし、それを検証環境にインポート、検証環境でスケジュールを実行して、まったく同じ結果を得られるかを検証します。 以下の案を思いつきましたが、イマイチぴんときません。何かいい方法を教えてください。 案1 DBをDBリンクで接続し、オブジェクトブラウザのオブジェクト比較機能を使う。 →簡単にできるが、結果を得るの時間がかかりすぎる。 案2 DBをDBリンクで接続し、検証用プロシージャを作成して比較する。 →user_tables, user_tab_columnsなどを使うプロシージャの作成が面倒。 案3 処理実行後に、本番と検証環境でそれぞれテーブルごとにエクスポートし、エクスポートファイルをUNIXでソートした上で、uniqコマンドで比較する。 →これが現実的?
- mercez
- お礼率50% (2/4)
- Oracle
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
案3のエクスポートは、オラクルのエクスポート形式だと、 バイナリ形式(独自フォーマット)ですので、ソートができません。 CSVなどのテキスト形式で抜き出す必要があります。 その際、ORDER指定すれば、抜き出した後にソートの手間は 割愛できると思います。
関連するQ&A
- 2つの同じDBの比較について
Oracle8iにて1つのDBに2人のユーザを作成し、同じテーブル構成に同じデータをimportしています。これから2つの環境にてそれぞれテストを行うのですが(あるアプリケーションを動かします)、1日の終わりにこの2人のユーザのテーブルを比較したいと考えています。各ユーザのテーブルは100個あるのですが、これらを比較する方法はありますか? 思い付くのはお互いのユーザの各テーブルをselectで抽出してMIFES(テキストツール)で比較なんてのしか思い付かなくて・・・ 是非簡単な方法があればご教授よろしくお願いします。
- ベストアンサー
- その他(データベース)
- ASPから異なる複数のDBサーバーに接続する方法
ASPの質問です。WEBサーバーと複数のDBサーバーがあります。 ADODB.Connectionでオラクルサーバーに接続し、データベースオブジェクトを作成しています。 別々のDBサーバーにあるテーブルを結合して利用したいのですが、ASPで可能でしょうか? 例えば"select * from A,B where A.ID=B.ID"というSQL文を実行する(AとBは別々のDBサーバーにある)。 とりあえず、代替案で検討しているのは片方のDBサーバーにデータベースリンクで他方のDBサーバーのVIEWを作ろうかと思っています。できればASPで解決したいのですが、よろしく御願いします。
- 締切済み
- Microsoft ASP
- Access Oracle環境の切替方法
ODBCにてOracleに接続を行うAccessを作成し、ユーザに使用頂いております。 2つのサーバがあり、それぞれOracleの本番環境、テスト環境としています。 (双方に作成したテーブルのDB名、スキーマ名は同一です) 開発用端末である自分の端末には、テスト用サーバへ接続するためのtnsnames.oraが、またユーザの端末には、本番用サーバへ接続するためのtnsnames.oraがセットされています。 自分の端末にて開発・テストが済んだら、ユーザの端末にAccessファイルを配布。 しかしこの度、テスト用サーバが撤去されることになりまして、、、これまで本番環境として使用していたサーバにテスト環境を同居させた場合、Accessファイルを変更する事なく 本番⇔テスト を切り替えるようテスト環境を構築する方法はありますか? テーブルはリンクして使用しております。DB名やスキーマ名を別名で作成をと考えましたが、Access内で指定されるのでNGですよね。。。 よろしくお願いします。
- 締切済み
- Oracle
- ORA-01722: 数値が無効です
よろしくお願いします ORACLEのストアドプロシージャを実行した際、 上記のような結果が出ました。 調査した結果、ストアドプロシージャ内でのSQLで SELECT ・・・ FROM A_table WHERE A_table.a_date > 20050120 ; のようなものがあり、 A_tableのa_dateカラムが文字列型であり、 数値型との比較を行っているための エラーと確認が取れました。 しかし、 私が確認をとったのはシステムのテスト環境なのですが、 本番の環境はまったく同じプロシージャで エラーが出ていないようなのです。 なぜなのでしょうか??? 考えられる原因がある方がいらっしゃいましたら 是非教えてください。 よろしくお願いいたします。
- ベストアンサー
- Oracle
- トリガーを使ったリモートDBの更新方法
いつもお世話になっております。 先に質問の内容を言うと、トリガーを使って、別のDBの同一テーブルの登録・更新をすることが可能かどうか?ということです。 現在は、とあるテーブル(以下Aテーブル)を登録・更新した場合、登録データを履歴ログテーブルに入れ、1日に一回決められた時間に履歴ログテーブルをファイルに出力し、別のDBに送った後にログを元に登録するという流れになっている処理があります。 それを、できる限りリアルタイムで更新できないかという話がでてきまして、その手段として質問の内容が可能かどうかということです。 以下の方法を試みましたが、どちらも問題があり、解決できそうにありませんでした。 ・dblinkを使用 ⇒新たにインストールが必要であり、現状の環境でということなので却下。 ・トリガーから呼ばれる関数に、Cのソースからコンパイルされた動的にロードされるオブジェクトを読み込んで、オブジェクト内からリモートDBに接続に行く ⇒postgreSQLのCのオブジェクトを読み込む関数を作る際に、DB接続関数「PQconnectdb」が未定義とかで認識してくれない。 上記2つ以外にリモートDBに繋ぎにいく手段をご存知の方がいましたら、ぜひともご教授いただきたいと思いますm(_ _)m
- ベストアンサー
- PostgreSQL
- DBから抜き出した値を表示する方法
FORMで入力された値をもとにデータベースから値を拾ってきて それを画面に表示させる、という処理をしたいと思っています。 具体的には、usersという「名前」と「ID」が格納されたテーブルがあり、 名前を入力するとその名前に紐付いたIDを表示させるというものです。 usersテーブルには、 id | name --------- 1 | abc 2 | def 3 | ghi というようなデータが入っています。 下記のように書いているのですが、 IDを拾ってきてくれません。 何を入力しても「あなたのIDはです」 と表示されます。 FORMで入力した値が"abc"なら 「あなたのIDは1です」と表示したいです。 echo $user_name; を実行すると入力した名前が出てくるので データベースから抜き出す処理がうまくいっていないと考えてます。 つたない文章になってしまい、 申し訳ありませんが、 お助けいただければと思います。 よろしくお願いいたします。 ------- <?php if ($_SERVER['REQUEST_METHOD']=="POST") { foreach($_POST as $k => $v) { if(get_magic_quotes_gpc()) { $v=stripslashes($v); } $v=htmlspecialchars($v); $array[$k]=$v; } extract($array); $con = mysql_connect('localhost', '【ユーザー名】', '【パスワード】'); if (!$con) { exit('DBに接続できませんでした。'); } $result = mysql_select_db('【データベース名】', $con); if (!$result) { exit('データベースを選択できませんでした。'); } $db = mysql_query('SELECT * FROM users where name='.$user_name, $con); $db = mysql_fetch_array($db); $message="あなたのIDは".$db['id']."です"; echo $message; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language ?>" lang="<?php print $language->language ?>" dir="<?php print $language->dir ?>"> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>テスト</title> </head> <body> <form action="<?= $_SERVER['PHP_SCRIPT']; ?>" method="post" accept-charset="UTF-8"> <b>名前:</b><br> <input type="text" name="user_name" value="" /> <br><br> <input type="submit" value="ID確認" /> <INPUT type="reset" name="reset" value="リセット"> </form> </body> -------
- ベストアンサー
- PHP
- DBリンクエラーについて
DBリンクにて、プロシージャ(PKG)を起動すると エラーが発生してしまいました。 いろいろ調査したのですがよくわかりませんでした。。 申し訳ありませんが教えてください。 何か制約があるんでしょうか? ●エラー内容 ⇒【ORA-02064 分散処理はサポートされていません】 ●プロシージャ内容 ⇒ 更新処理(UPDATE文(副問合せ含む) ●環境 ⇒【ORACLE9i 9.2.0.6.0】
- ベストアンサー
- Oracle
- gitbucketのDB移行時のACTIVITY
gitbucketの実行環境を、Windows上でのJava実行(gitbucket.war起動)から、Dockerコンテナ内での実行に移行しようとしています。これまでのgitbucket設定・環境・ユーザーの入ったdatabaseを新環境に移行したいのですが、旧環境からexportしたSQLファイルを新環境にimportすると"ACTIVITY"テーブルが無いと怒られます。 新しいgitbucketではACTIVITYテーブルは存在しないのでしょうか? 旧gitbucket環境:バージョン4.31.2(H2) Win+Java 新gitbucket環境:バージョン4.38.5(mysql)WSL2+Docker 試したこと。 ◯旧gitbucketでexportするときに、ACTIVITYを外してSQLをエクスポートすると、新環境でエラー無くimportできました。もちろん、ACTIVITYに関する履歴は新gitbucketの管理画面には表示されませんでした。 ◯新gitbucket環境において、旧環境から移行せずに、適当なレポジトリを作って適当にファイルをpushして履歴が表示されるか(ACTIVITYテーブルが生成されるか)を確認してみました。gitbucketの管理画面では履歴が表示されますが、System AdministrationのData export/importやDatabase Viewerを開いてみても、ACTIVITYテーブルは存在しませんでした。では、push履歴はどこに保存されているのだろう? ACTIVITYテーブルの履歴は新gitbucketに移行できなくても大して問題はないのですが、移行できるならしたいし、gitbucketのバージョンアップ(4.31.2→4.38.5)の間にACTIVITYテーブルが廃止された(あるいはexportできなくなった)のであればそれはそれで諦めもつきます。 ご存じの方いらっしゃいましたら、ご教示下さい。
- 締切済み
- その他([技術者向] コンピューター)
- 異なるDB間の同期
サーバ1 OS:Windows2003Server DB:SQL Server2005 サーバ2 OS:Windows2000Server DB:SQL Server2000 サーバ2からサーバ1へODBC、HTTP、FTP可 サーバ2のDBは(サーバ1ではない)別サーバから 更新、削除、登録が行われます。このときにサーバ1の DBと同期を取る方法を検証しています。 例えば、サーバ2のAテーブルが更新された場合に トリガーなんかでサーバ1のAテーブルを更新する。 みたいな方法です。 ほかに簡単にできる方法とか、 特殊な方法でやらないとできないとか、 まったくできないとか 何か情報いただけないでしょうか。
- 締切済み
- SQL Server
お礼
結局、回答を拝見する前に、テキスト形式で出力するストアドプロシージャを作成しました。 おっさるとおりソートできませんでしたので、面倒でしたがそうするしか方法がなく。