• ベストアンサー

SQL2005で同構成の2つのDBを1つにまとめたいと考えております。

SQL2005で同構成の2つのDBを1つにまとめたいと考えております。 現在、定期的に決められた時間のLogをサンプリングして、 DBにためるような事をしております。 しかし、実行するたびにDBができてしまい一つに集約したいと 思ってますが、その際クエリとかでガッチャンコできるのでしょうか? もしくは、バックアップを取ってそれを1つのDBにがっちゃんこなんかできるのでしょうか? ご存知の方、ご教授いただければと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

#1です。 説明の都合上、以下の通りとしましょう。 ・テーブル1:データベース db1、スキーマ dbo、テーブル hogehoge ・テーブル2:データベース db2、スキーマ dbo、テーブル hogehoge ・両者のテーブルレイアウトは同じ(ID, hoge, hoge1, hoge2)とします。 1) TOP 10をクエリで実行する場合 SELECT TOP 10 hoge,Count(*) FROM ( SELECT * FROM db1.dbo.hogehoge UNION ALL SELECT * FROM db2.dbo.hogehoge) tmp GROUP BY hoge ORDER BY COUNT(*) DESC 2) 毎回UNION ALLを指定するのが大変ならば、上記をViewにします。 Viewはdb1に作っても、db2につくっても、全く別のdb3に作っても構わないです。 CREATE VIEW v_hogehoge AS SELECT ID, hoge, hoge1, hoge2 FROM db1.dbo.hogehoge UNION ALL SELECT ID, hoge, hoge1, hoge2 FROM db2.dbo.hogehoge 上記を作ったデータベースで、 SELECT TOP 10 hoge,Count(*) FROM v_hogehoge GROUP BY hoge ORDER BY COUNT(*) DESC 3) 1)や2)の方法では、どうしてもパフォーマンスは悪くなりますから、 db3に2つのテーブルを統合したテーブルを作ってもよいなら、以下の通りです。 CREATE DATABASE db3 GO USE db3 GO CREATE TABLE dbo.hogehoge (ID int, hoge varchar(10), hoge1 varchar(10), hoge2 varchar(10)) GO INSERT INTO dbo.hogehoge SELECT * FROM db1.dbo.hogehoge UNION ALL SELECT * FROM db2.dbo.hogehoge GO ・上記例のテーブルのデータ型は適当です。実際のテーブル作成スクリプトが必要ならば、SQL Server Management Studioで、db1またはdb2のhogehogeテーブルを右クリックすると、スクリプトを 出力するオプションがあります。 (通常は主キーやNOT NULL制約もついているはずですので、この方法でスクリプトを出力してテーブルを作ります) ・対象のテーブルは1つだけでも、他のマスタテーブルとの関連(外部キー制約)がついている場合は、そのマスタテーブルを先に作らないといけません。 ・テーブルを別に作るということは、すでにあるdb1、db2のテーブルとは別物になるということです。  1)2)の方式では、結局db1,db2のhogehogeを参照していることには変わりないので、db1,db2のhogehogeのデータが変わればそれは反映します。  でも、3)の方式では、データを入れ替えないと反映しません。 以上、若干詳しめに書いてみました。参考にしてください。

その他の回答 (1)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

技術的には、実行のつどデータベースを作成しないようにすることも、複数の同一レイアウトのDBを統合することも可能です。 ただし、データベースのリストアでは実現できません。 前者は実行モジュールの変更が必要でしょうし、後者は別に統合用スクリプトを書く必要があるでしょう。 具体的な方法は詳細情報がないとコメントしようがないですが。。

Snoop15
質問者

お礼

ご解答ありがとうございます。 現在やりたい事としましては、2つのテーブルから、Top10を出すなどが行いたいと考えてます 詳細としましては、カラムの設定など全て同じのテーブルが2つあります。 テーブル1 テーブル2 の集計をおこないたいのですが、2つを合わせて 集計したいと思ってます 1.テーブル1とテーブル2を1つのテーブルへ合体させる 2.もしくは、クエリで2つのテーブルのデータを元に集計できる その際使用するクエリを教えていただければと思います。

関連するQ&A