2017-07-31 13 views
0

シーケンスを新しいスキーマに移動して、現在のnextvalの値を保持したいので、シーケンスの中にギャップがなく、移動の許可と作成ステートメントは何ですか?シーケンスを新しいスキーマに移動するには?

注:私はSYSや他の管理者ユーザーの役割とパスワードを持っていません。古いスキーマと新しいスキーマにのみアクセスできます。

答えて

2

最も簡単な方法は、1つのスキーマのシーケンスに対してDDLを取得し、スキーマ名を置き換えて他のスキーマで作成することです。以下のステートメントを作成するために

--prepare sample data 
CREATE SEQUENCE my_seq 
START WITH  1000 
INCREMENT BY 1 
NOCACHE 
NOCYCLE; 

--increase sequence number for test 
select my_seq.nextval from dual; 
select my_seq.nextval from dual; 

--copy the sequence 
declare 
    sqltext varchar(512); 
    oldschema varchar(64) := 'my_test_schema1'; 
    newschema varchar(64) := 'my_test_new_schema'; 
begin 
    select dbms_metadata.get_ddl('SEQUENCE',upper('my_seq'),upper(oldschema)) into sqltext from dual; 
    sqltext := replace(sqltext, '"'||upper(oldschema)||'"', '"'||upper(newschema)||'"'); 
    execute immediate sqltext; 
end; 


--permissions 
create any sequence to ... 
+0

ようこそ'user'の代わりに' 'old_schema''を置くのは、SYSとしてではなく、シーケンスの所有者として行うかもしれないからです。 – LauDec

+1

#1は新しいスキーマに接続します #2はmy_userにシーケンスを作成します #3は古いスキーマに接続します #4シーケンスを実行するスクリプトを実行します – are

0
select * from user_sequences where sequence_name = 'sequence_name' 

OR

select * from all_sequences where sequence_owner = 'OLD_SCHEMA' and sequence_name = 'sequence_name' 

はあなたにもそこから最後の番号やその他のパラメータを取得することができます。

CREATE SEQUENCE #SCHEMA_NAME#.#SEQUENCE_NAME# 
    START WITH 21 
    MAXVALUE 999999999999999999999999999 
    MINVALUE 1 
    NOCYCLE 
    CACHE 20 
    NOORDER 
/

ORあなたはヒキガエルのようなサードパーティ製のツールを持っている場合、あなただけの

desc sequence_name 

、それが新しいスキーマに作成するために、古いスキーマからあなたにスクリプトを与えることができます。

関連する問題