• ベストアンサー
  • すぐに回答を!

テーブル自体のバックアップ

教えてください。 今オラクルのDBにTEST1テーブルが存在するとします。 ------TEST1--------------------- id varchar(5) Primary Key name varchar(20) old int -------------------------------- 今このテーブルとまったく同じデータを持ち、同じ構成のテーブルTEST2を 作成したいと考えています。 (1)create table TEST2( id varchar(5) primary key, name varchar(20), old int ); (2)insert into TEST2( id, name, old) values (select id, name, old from TEST1); としてTEST2テーブルを作成して、TEST1のデータを格納していますが、 他の方法はないでしょうか? たとえばこんなコマンドはありませんが、 COPY TEST1 TEST2 とか、 オラクルマネージャみたいなもので、 コピペして、名前をTEST2にする とかなんでもいいです。 TEST1のバックアップをとりたいのですが・・・・ すみません、わかりづらい説明で。 宜しくお願い致しますm(_ _)m

  • 653
  • お礼率36% (138/382)

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数2770
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.4

こんにちわ。 Create table test2 as select * from test1; でOk です。 上記SQL 文は、Create table 文 (の拡張) ですので Rollback Segment を使用しない分、Insert 文で データを投入するより高速に処理できます。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 同じ構成の2つのテーブルの更新について

    はじめまして、下のような2つの同じ構成のテーブルがあった場合に create table test1 ( key1 varchar(8) not null, key2 varchar(4) not null, key3 varchar(6) not null, key4 varchar(11) not null, suryo int(9), kingaku int(11), constraint test1_key primary key (key1,key2,key3,key4) ); create table test2 ( key1 varchar(8) not null, key2 varchar(4) not null, key3 varchar(6) not null, key4 varchar(11) not null, suryo int(9), kingaku int(11), constraint test2_key primary key (key1,key2,key3,key4) ); 10万件のtest1テーブルに 5件のtest2テーブルの内容をキー集計した結果を test1に反映するにはどうのようなSQL文を書けば、効率的なのでしょうか? 片方のテーブルはデータ量が多く、もう片方は数件の更新処理となります。 宜しくお願いいたします。 ・処理前 (test1テーブル) key1,key2,key3,key4,suryo,kingaku "20070521","1111","111111","11111111111",10,1000 "20070521","2222","222222","22222222222",5,5000 "20070521","3333","333333","33333333333",1, 100 (test2テーブル) key1,key2,key3,key4,suryo,kingaku "20070521","2222","222222","22222222222",10,30000 ↓ ・処理後 (test1テーブル) key1,key2,key3,key4,suryo,kingaku "20070521","1111","111111","11111111111",10,1000 "20070521","2222","222222","22222222222",15,35000 "20070521","3333","333333","33333333333",1, 100

    • ベストアンサー
    • MySQL
  • MySQL SELECTの指定について

    まず、御覧頂きありがとうございます。 早速質問なのですが、 CREATE TABLE `hoge` ( `id` int(8) NOT NULL, `name` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `hoge` (`id`, `name`) VALUES (1, 'hogeA'), (2, 'hogeB'), (3, 'hogeC'), (4, 'hogeD'); CREATE TABLE `test` ( `id` int(8) NOT NULL, `name` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `test` (`id`, `name`) VALUES (1, 'testA'), (4, 'testD'); という値が入ってるテーブルがあるとします。(長くなってすみません) で、 hoge.id と test.id が重複した場合 test.name を表示させたいです。 期待値としては id,name 1.testA 2,hogeB 3,hogeC 4,testD になります。 業務でJoinを使うようなテーブル構造にそもそもしないというのもあり、クリティカルなSQLコードに不慣れで御知恵を借りたく質問させて頂きました。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Using temporary; Using filesort を回避したい

    はじめまして。よろしくお願いします。 下記の場合、Using temporary; Using filesort を回避するには どうしたらよいでしょうか。 次の 2 つのテーブルがあります。 CREATE TABLE `test1` ( `f1` int(11) NOT NULL, `f2` int(11) NOT NULL, PRIMARY KEY (`f1`,`f2`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `test1` VALUES ('1', '2'); INSERT INTO `test1` VALUES ('1', '3'); INSERT INTO `test1` VALUES ('1', '4'); INSERT INTO `test1` VALUES ('2', '1'); INSERT INTO `test1` VALUES ('2', '3'); CREATE TABLE `test2` ( `f1` int(11) NOT NULL, `f2` varchar(20) default NULL, `f3` varchar(20) default NULL, PRIMARY KEY (`f1`), KEY `ix_f2_f3` (`f2`,`f3`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `test2` VALUES ('1', 'A', 'a'); INSERT INTO `test2` VALUES ('2', 'B', 'b'); INSERT INTO `test2` VALUES ('3', 'C', 'c'); INSERT INTO `test2` VALUES ('4', 'D', 'd'); 次の SELECT を実行すると Using temporary; Using filesort が 現れてしまいます。 explain select test2.f2, test2.f3 from test1, test2 where test1.f1 = 1 and test1.f2 = test2.f1 order by test2.f2, test2.f3; order by ... をなくすと問題ないのですが、ソートは必要です。 複数のキーに対してORDER BYを実行する場合 インデックスを使用できないとあるので ix_f2_f3 は使用されず Using filesort となるのはわかるのですが、 Using temporary となる理由と回避方法がわかりません。 ご教示よろしくおねがいいたします。

その他の回答 (3)

  • 回答No.3
  • bourbon
  • ベストアンサー率46% (18/39)

exportユーティリティを使うのはどうでしょうか? 【exp ユーザー名/パスワード tables=表名 file=ファイル名】 が基本構文です。OSファイルとしてバックアップしておけます。 DBオブジェクトに戻す場合はimportユーティリティを使用します。 【imp ユーザー名/パスワード tables=表名 file=ファイル名】 としてバックアップしたファイルを指定すれば元通りになります。 exp/impユーティリティはたくさんのオプションがありますので、 「ユーティリティ」マニュアルでご確認ください。 マニュアルはダウンロードできます。ただし登録が必要。

参考URL:
http://otn.oracle.co.jp/document/index.html

共感・感謝の気持ちを伝えよう!

  • 回答No.2

もし、仕事でやってるなら、何らかの支援ツールを使ってもいいんではないかと思います。 以前ORACLE標準ツールでシコシコやっていたんですが、下記URLのツールを使って、飛躍的に効率UPしたことがあります。 また、ものによっては、効率UPとSQLの勉強も出来るのもあります。 探せば、いろいろ出てくると思います。

参考URL:
http://www.sint.co.jp/jisseki/html/products.html

共感・感謝の気持ちを伝えよう!

  • 回答No.1

CREATE TABLE test2 AS SELECT * FROM test1;

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 複数テーブルで ID の一意性を保つ

    Debian GNU/Linux 3.1 で psql 8.1.2 を使用しています。 下記の要領でテーブルを作成し、2つのテーブルでIDが重ならないようにしようと意図しました。 CREATE TABLE t1 ( t1_id int2 UNIQUE NOT NULL, t1_name text NOT NULL ); NOTICE: CREATE TABLE / UNIQUE will create implicit index "t1_t1_id_key" for table "t1" CREATE TABLE CREATE TABLE t2 ( t2_id int2 UNIQUE NOT NULL, t2_name text NOT NULL ); NOTICE: CREATE TABLE / UNIQUE will create implicit index "t2_t2_id_key" for table "t2" CREATE TABLE CREATE FUNCTION unique_t12_id(int2) RETURNS BOOLEAN AS 'SELECT NOT ( EXISTS(SELECT * FROM t1 WHERE t1_id = $1) AND EXISTS(SELECT * FROM t2 WHERE t2_id = $1) );' LANGUAGE SQL; CREATE FUNCTION ALTER TABLE t1 ADD CONSTRAINT con_unique_t12 CHECK (unique_t12_id(t1_id)); ALTER TABLE ALTER TABLE t2 ADD CONSTRAINT con_unique_t12 CHECK (unique_t12_id(t2_id)); ALTER TABLE ところが実際は上手くいきませんでした。 INSERT INTO t1 VALUES(1, 'test1'); INSERT 0 1 INSERT INTO t2 VALUES(2, 'test2'); INSERT 0 1 INSERT INTO t2 VALUES(2, 'test3'); ERROR: duplicate key violates unique constraint "t2_t2_id_key" # ここまでは期待通りの挙動です INSERT INTO t2 VALUES(1, 'test4'); INSERT 0 1 ここで制約が働いて欲しかったのですが、素通りでINSERTされています。 下記のように、操作後の関数の戻り値は「偽」なのでこの操作は制約に引っかかると思うのですが 何故意図したように動かないのでしょうか。 SELECT *,unique_t12_id(t2_id) FROM t2; t2_id | t2_name | unique_t12_id -------+---------+--------------- 2 | test2 | t 1 | test4 | f (2 rows) スペースが詰まって読みづらい箇所もありますが、よろしくお願いします。

  • テーブルにはったインデックスは、ビューに対しても効力があるのか

    環境:RedHat Linux AS3.0 / PostgresSQL 7.3.6 Publicスキーマにインデックス付きのテーブルを作成し、 複数のスキーマにビューを作成してそのテーブルをそのまま参照したいと思っています。 (スキーマの数が非常に多いので、実体をひとつにし、  ディスク容量を抑えるのが目的です。) 環境のイメージは以下の通りです。 ◆Publicスキーマにテーブル作成------- create table TEST_TABLE ( id int, data varchar ); ◆test_tableにインデックスを作成------- create unique index TEST_KEY on TEST_TABLE ( id ); ◆test_schemaスキーマを作成------- create schema TEST_SCHEMA; ◆test_schemaスキーマにビューを作成------- create view TEST_SCHEMA.TEST_VIEW as select id, data from TEST_TABLE ; このような環境にて「TEST_VIEW」にSELECTをかけた場合、 「TEST_KEY」は踏襲されるのでしょうか? ビューに対してインデックスは作成できないようなので、 テーブルに対してはられたインデックスはビューでも生きている のではないかと考えたのですが、 上記認識で合っているかどうか ご存知の方がいらっしゃいましたらご教授頂けると助かります。 宜しくお願い申し上げます。

  • Timestampの値を自動的に挿入することは可能でしょうか

    Oracle10gを使用してテーブルを作るところなのですが、タイムスタンプをOracle側で自動的に挿入することは可能でしょうか? つまり CREATE TABLE TEST ( ID NUMBER PRIMARY KEY, NAME VARCHAR(10), ENTRY TIMESTAMP ); というテーブルを作成した場合、データをinsertする際にOracleが勝手にその瞬間の時間を格納するようにしたいです。 insert into test values (1, 'taro'); とすると1, 'taro', 現在時刻がデータベースに格納される。。 初心者ですみませんがご存知の方いらっしゃいましたらご教示下さい。 宜しくお願いします。

  • Oracleでテーブルを作成する際に、インデクスの作成先を指定したい。

    以下のようにテーブルを作成しようとしてます。 CREATE TABLE TEST_USER.M_USER ( ID char(4), NAME varchar2(40) NOT NULL), CONSTRAINT PK_USER PRIMARY KEY(ID) ); さて、プライマリキーを定義しているので、インデクスが作成されるはずです。 この作成先のテーブルスペースを指定したいのですが、方法が解りません。 CREATE TABLEの紹介をしているサイトにものっていなくて、途方にくれています・・・。 CONSTRAINT句を使えばいいのでしょうか?

  • 簡単に正規化したい

    プログラム素人です。 初心者なのでこんなテーブルを思いつくのですが、これってカラムをいちいち作らないといけないので後のメンテが大変な気がします CREATE TABLE hoge( id INT PRIMARY KEY, item1 VARCHAR(255), value1 INT, item2 VARCHAR(255), value2 INT, item3 VARCHAR(255), value3 INT ); こんな感じのテーブルにどんどんINSERTしていきたいのです CREATE TABLE hoge( id INT PRIMARY KEY, item VARCHAR(255), value INT ); 聞きたいこと MYSQL側 IDにPRIMARY KEYが付いているのですが2つ同じPRIMARY KEYはINSERTでききませんよね?どうすればいいでしょうか? perl側 IDごとにまとめて取得して配列に入れる方法はありますか? idが1のアイテムを全部取得して配列に入れる方法がわかりません(他にいい方法があったらお願いします) よろしくお願いします

    • ベストアンサー
    • MySQL
  • カラムで括ったMAX値のselect

    Mysql5.0.18です よろしくお願いします テーブル:test_tblです key:キー name:生徒氏名 test_name:テストの名前 value:点数 下記のようなデータを用意しました key  name  test_name  value 1    A    test1   30 2    A    test2   50 3    B    test1   40 4    B    test2   80 5    C    test1   90 6    C    test2   90 下記のように 生徒(name)毎の最高点のレコードを1件づつ抽出したいのですが 可能でしょうか? key  name  test_name  value 2    A    test2   50 4    B    test2   80 5    C    test1   90 私は下記のsqlでチャレンジしてダメでしたTT Select test_tbl.key, test_tbl.name, test_tbl.test_name, Max(test_tbl.value) as value From test_tbl Group By test_tbl.name Order By test_tbl.name Asc, test_tbl.test_name Asc 結果は・・・ key  name  test_name  value 1    A    test1   50 3    B    test1   80 5    C    test1   90 です・・・ Max関数を使えば、生徒のMAX点が出力されるのは 分かるのですが、そのMAX点のレコードを抽出するには・・・ という所で行き詰っています よろしくお願いします

    • ベストアンサー
    • MySQL
  • Primary Key について

    PostgreSQLのPrimary Keyについて質問があります。 ---------------------------------- create table test_db ( id int8, name varchar(32), day date, constraint PK primary key( id, name)); ---------------------------------- 上記のようにtest_dbを作成しました。 データをinsertする際、 id:[1] name:[watanabe] day:[2003-05-29] id:[2] name:[watanabe] day:[2003-05-29] とするとデータが格納されてしまいます。 idとnameの両方が一致したデータは格納できないと 思うのですが、 id, name各々test_db内に対して一意なデータとして 扱いたいのですがどのようにすればいいでしょうか? [例] id:[1] name:[watanabe] day:[2003-05-29](格納済) (name:watanabeは存在するためエラー) id:[2] name:[watanabe] day:[2003-05-29] (id:1は存在するためエラー) id:[1] name:[simada] day:[2003-05-29] (正常格納) id:[2] name:[simada] day:[2003-05-29] --------------------------------------- わかりづらくて申し訳ありませんが、 宜しくお願いいたします。

  • [materialized]マテリアライズドビューの検索

    マテリアライズドビューを作成し、selelct文を発行致しましたら、 『"TEST2":無効な識別子です。』とエラーが出てしまいました。 下記の様に、テーブル、View、マテリアライズドビューを作成した後、 select文を作成しました。 View、マテリアライズドビュー、select文のいずれかで間違いが有ると思うのですが、どの様に修正を行えば良いのかが分かりません。 ですのでエラーを回避する方法を教えて頂きたく思っております。 宜しくお願い致します。 ■テーブル1作成 Create table TEST_TBL1 ( Test1 nchar(6), Test2 nchar(6) ); ■テーブル2作成 Create table TEST_TBL2 ( Test1 nchar(6), Test2 nchar(6) ); ■レコード追加 INSERT INTO TEST_TBL1 (Test1, Test2) VALUES (1,1); INSERT INTO TEST_TBL1 (Test1, Test2) VALUES (2,2); INSERT INTO TEST_TBL2 (Test1, Test2) VALUES (3,3); INSERT INTO TEST_TBL2 (Test1, Test2) VALUES (4,4); ■ビュー作成 create view TEST_VIEW as select A.rowid AROWID,A.Test1 ID,A.Test2 TITLE,3 MARKER from TEST_TBL1 A union all select B.rowid AROWID,B.Test1 ID,B.Test2 TITLE,4 MARKER from TEST_TBL2 B; ■ログ作成 create materialized view log on TEST_TBL1 with sequence,rowid (Test1, Test2) including new values; create materialized view log on TEST_TBL2 with sequence,rowid (Test1, Test2) including new values; ■マテビュー作成 create materialized view TEST_MVIEW REFRESH FAST on demand as select * from TEST_VIEW; ■データ抽出 Select TEST1 FROM TEST_MVIEW WHERE TEST2 = '1'; ご回答の程、宜しくお願い致します。

  • PHPでMySQLに登録されているデータのMAXと他のフィールドからデータの取得

    PHPでMySQLの最新のデータを取得し、そのデータのデータ番号を取得しようとしています。 テーブルは ID(INT型、AUTO_INCREMINT) | name(VARCHAR型) | t_touroku(DATATIME型) 1 | test1 | 2005-12-1 12:11:10 2 | TEST2 | 2005-12-2 12:56:10 となっています。 ここから最新のデータt_tourokuを検索しそのデータのIDを取得したいのですが、どうにもうまいことできません。 この場合ですと、IDの2を取りたいんです・・・。 MAXを使えばいけると思ったのですが、最新のデータしか取得できずIDを取得できませんでした・・・。 どうか、お知恵を貸して下さい。 よろしくお願いします。 バージョンは PHP 4.3.10 MySQL 3.23.58 です。

    • ベストアンサー
    • PHP
  • 単体テストレベルのテストデータの作成方法

    単体テストレベルのテストデータの作成方法 以前、このような質問をさせていただきました。 http://okwave.jp/qa/q4951742.html いまだに同じ悩みを抱えておりまして、皆様どのようにしているのだろうか、あらためてご質問させていただきたいと思います。 あるいは、「このサイトで質問するよりもっと適切ながある」ということでしたら、そのサイトを教えていただけないでしょうか。 より具体的な例で質問させていただきたいと思います。 例えば、次のようなテーブル群があったとします。 ※OracleベースのDDL(適当&適宜省略(^^;)で示しております。 ※同一カラム名の個所は、それぞれのテーブルにひもづいています。 ※単純な例なので、各テーブルの関連はテーブル名でお分かりになるかと思います... CREATE TABLE 受注テーブル ( 受注ID VARCHAR2(10) PRIMARY KEY, 顧客ID VARCHAR2(10) 受注日 DATE, ); CREATE TABLE 受注明細テーブル ( 受注ID VARCHAR2(10), 製品ID VARCHAR2(10), 数量 NUMBER(10,0), PRIMARY KEY (受注ID, 製品ID) ); CREATE TABLE 顧客マスタ ( 顧客ID VARCHAR2(10) PRIMARY KEY, 顧客会社名 VARCHAR2(100), ); CREATE TABLE 製品マスタ ( 製品ID VARCHAR2(10) PRIMARY KEY, 製品名 VARCHAR(100), 仕入先ID VARCHAR2(10) ); CREATE TABLE 仕入先マスタ( 仕入先ID VARCHAR2(10) PRIMARY KEY, 仕入先会社名 VARCHAR2(100) ); 正常系のテストパターンが(仮に)数十あるものとして、各パターンごとに0件から10件程度のデータを作成したいです。 皆様どのようにテストデータを作成しているのでしょうか。 あるいは、上記の例ではたかだか5テーブルのリレーションではありますが、ここでは省略した各種カラムにひもづく別のマスタ群が多数あるとした場合はどうでしょうか。 上記のテーブルの例で言えば「注文テーブル」用のデータを作成しつつ、それにひもづいた正しい「注文明細テーブル」用データを作成するだけでもしんどいと思ってしまいます。 さらに、関連するマスタ群として「顧客マスタ」や「仕入先マスタ」などなど多数ある場合、それぞれの関連を見ながら「正しいデータ(つまりテストデータ自体が間違っている、という事態を避けたい)」を作成するのが難しいと感じてしまいます。