1 つのユーザー スキーマにデータを含む一連のテーブルがあります。それらのコピーを別のユーザーに渡したいです。
これはSQLで実行できますか?
ありがとう
2 人のユーザーが同じデータベースにいて、十分なGRANTS
数が存在する場合は、新しいユーザー スキーマで次のステートメントを実行します。
create table <tablename> as select * from olduser.<tablename>;
以下の一連のステートメントをテキスト ファイルにコピーします。<oldueser>
既存のスキーマ名と<path>
、スプールを書き込む UNIX/Windows マシンのパスに置き換えます。このファイルを既存のスキーマで実行します。name で指定したパスにスプールファイルが書き込まれますtbls.sql
。これtbls.sql
を取得して、テーブルを複製する新しいスキーマで実行します。
set head off
set line 100000
set line 100000
set feedback off
spool <path>/tbls.sql
select 'CREATE TABLE ' || TABLE_NAME ||' AS SELECT * FROM <OLDUSER>.'||TABLE_NAME||';'
FROM user_tables;
spool off
set feedback on
最初のスキーマをエクスポートし、2 番目のスキーマにインポートすることができます。それを妨げる理由がなければ、これを選択します。 ドキュメントはこちらです。
アクセス許可がある場合は、それを行うための小さなスクリプトを作成できます。次のクエリを使用して、ソース ユーザーのすべてのテーブルを選択できます。
SELECT table_name FROM all_tables WHERE owner = <source_schema>
それらすべてをループし、すぐに実行を使用して新しいテーブルを作成します。(ドキュメントはこちら)
execute immediate 'create <dest>.<tablename> as select * from <source>.<tablename>';
dest
およびsource
はスキーマの名前です。
tablename
ループから取得したテーブルの名前です。
はい、コマンド プロンプトで export コマンドを使用して実行できます。
c:\>exp userid=userid(sql admin)/password owner=username(from which user) direct=y file=filename.dmp
を使用してこれをインポートするには
c:\>imp userid=userid(sql admin)/password file=filename.dmp fromuser=username(from which user) touser=username(imported username)
これを使用して、データをダンプ ファイルにエクスポートし、その後、別のユーザーにインポートする必要があります。
create schema2.tablename as select * from schema1.tablename