
お世話になります。
新たなユーザを作成し、
現在の使っているデータベースの、
テーブル1(テーブル数:200)の情報を
テーブル2(テーブル数:0)にまるまる移すことはできるのでしょうか?
テーブルの中身のデータでは、ありません。
全く同じ内容のテーブルを作りたいです。
元となるようなCreate文はどこを探してもなかったので
よろしくお願い致します。
環境は、Oracleになります。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。


回答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総合スコア12
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
総合スコア13707
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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
総合スコア16419
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
全くの別環境でリンクもできない等であれば、DataPump等利用して定義をエクスポート/インポートする方法も使えないでしょうか。
スキーマ単位出の移行も可能ですし、エクスポートしたダンプからSQL文を出力することも可能です。
https://blogs.oracle.com/oracle4engineer/entry/data_pumpexpdpimpdp
CONTENT=metadata_only オプションを付ければ、データは除外して定義だけエクスポートできます。
(他に統計など不要なものがあればEXCLUDEオプションも必要)
投稿2017/02/08 01:14
総合スコア15
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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総合スコア1126
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。