質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

6回答

26244閲覧

テーブル定義をコピーしたい

yamaguti

総合スコア185

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/02/07 09:09

お世話になります。

新たなユーザを作成し、
現在の使っているデータベースの、
テーブル1(テーブル数:200)の情報を
テーブル2(テーブル数:0)にまるまる移すことはできるのでしょうか?

テーブルの中身のデータでは、ありません。
全く同じ内容のテーブルを作りたいです。

元となるようなCreate文はどこを探してもなかったので
よろしくお願い致します。

環境は、Oracleになります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/02/07 09:12

テーブルの内容、ではなく、テーブルの構造(主キーやインデックス)を含めて複写したい、ということでしょうか?
yamaguti

2017/02/07 09:15

わかりづらいくてすいません。テーブルのカラム(ご指摘の主キーやインデックス)を複写したいです。
guest

回答6

0

http://d.hatena.ne.jp/kenpoco/20080324/1206327055

Create select 文を使えば実現できると思うのですが、質問と合っていますか?

sql

1CREATE TABLE table2 SELECT * FROM table1;

table1の構成でtable2を作る時に使います。

投稿2017/02/07 09:19

編集2017/02/07 09:21
SatoshieSp

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamaguti

2017/02/07 09:40

ご回答ありがとうございます。 これはテーブルを作りたいユーザが違う場合にも、できるのでしょうか?
guest

0

UNIX 環境と SQL*Plus が使えるなら、一発であるスキーマの全テーブルを別スキーマに構造コピーするバッチが作れますよ。

bash

1sqlplus [DB1 への接続文字列] << SQLEND 2set pagesize 0 3spool tablename.txt 4select TABLE_NAME from ALL_TABLES where OWNER = [DB1スキーマ]; 5SQLEND 6 7while read TABLENAME 8do 9sqlplus [DB2 への接続文字列] << SQLEND 10create table ${TABLENAME} as select * from [DB1スキーマ].${TABLENAME} where 1=2; 11SQLEND 12done < tablename.txt

こんな感じですかね。あるいは事前に tablename.txt を抽出して(前段のsql)、そこから必要なのだけ残して後段のwhile処理流すとかでもよいですし。

投稿2017/02/08 00:37

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

他スキーマに別テーブル名て定義を移行するとして、
GRANT SELECT ON TABLE_NAME1 TO OWNER2;
で移行先にSELECT権を与える。
CONNECT ONWNER2/xxxxxx@DB2

CREATE TABLE TABLE_NAME2 AS
SELECT * FROM OWNER2.TABLE_NAME1
WHERE 0 > 1 ;
-- WHERE句で対象データがない条件を指定する。

ALTER TABLE TABLE_NAME2 ADD CONSTRAINT .... でのPRIMARY KEYの追加。
CREATE INDEX ...
COMMENT ON TABLE ...
COMMENT ON COLUMN ...
統計情報の取得は別に必要。

取得したDDLのOWNERを変更してCREATE文を実行する方法もあり。
http://www.shift-the-oracle.com/plsql/dbms_metadata/

投稿2017/02/07 23:37

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

全くの別環境でリンクもできない等であれば、DataPump等利用して定義をエクスポート/インポートする方法も使えないでしょうか。
スキーマ単位出の移行も可能ですし、エクスポートしたダンプからSQL文を出力することも可能です。

https://blogs.oracle.com/oracle4engineer/entry/data_pumpexpdpimpdp

CONTENT=metadata_only オプションを付ければ、データは除外して定義だけエクスポートできます。
(他に統計など不要なものがあればEXCLUDEオプションも必要)

投稿2017/02/08 01:14

izuminao

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

レコードをコピーせずに構造だけコピーする方法です。

SQL

1CREATE TABLE table2 NOLOGGING PARALLEL 2 AS SELECT * FROM table1 WHERE 1<>1;

投稿2017/02/07 23:41

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

テーブル1(テーブル数:200)の情報を
テーブル2(テーブル数:0)にまるまる移すことはできるのでしょうか?

ではなくて、

DB1(テーブル数:200)の情報を
DB2(テーブル数:0)にまるまる移すことはできるのでしょうか?

でしょうか。
別のDBにテーブルをコピーしたいということ?

別のスキーマでも、DBサーバが同じなら
SatoshieSp さんが提示された方法にスキーマを追加すればいける気がします。

SQL

1CREATE TABLE DB2.dbo.table1 SELECT * FROM DB1.dbo.table1;

# 試してないです

それとも、テーブル数が 200 もあるから 1 つ 1 つやるのは大変ということでしょうか?
であればストアドプロシージャとか作れば出来るとかですかね。
(Oracle は久しく触ってないのであれですが... 多分できますよね)

あるいはデータはいらないんだってば!ということ?
それだったら WHERE 1 = 2 とか、絶対にレコードがヒットしない条件を指定するのはどうでしょうか。

投稿2017/02/07 09:43

編集2017/02/07 09:51
sk_3122

総合スコア1126

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sk_3122

2017/02/07 09:49 編集

Oracle(オラクル)のスキーマってずっとユーザのことだと思っていたのですが違うのでしょうか? http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13137981793 Oracleだと スキーマ = ユーザー (ほぼ同義) なんでしたっけ? (リンク先ではそう言われてましたが) 私が上記で DB1, DB2 と書いているのはその "ユーザー" のことです。
yamaguti

2017/02/07 09:57

DB1(テーブル数:200)の情報を DB2(テーブル数:0)にまるまる移すことはできるのでしょうか? 正確にはこちらになります。申し訳ございません。 ありがとうございます。 ご提示頂いた方法で試させて頂きます。 よろしくお願い致します。
yamaguti

2017/02/07 09:59

200テーブルはなんとかエディタ等を使って頑張ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問