シーケンスを新しいスキーマに移動して、現在のnextvalの値を保持したいので、シーケンスの中にギャップがなく、移動の許可と作成ステートメントは何ですか?シーケンスを新しいスキーマに移動するには?
注:私はSYSや他の管理者ユーザーの役割とパスワードを持っていません。古いスキーマと新しいスキーマにのみアクセスできます。
シーケンスを新しいスキーマに移動して、現在のnextvalの値を保持したいので、シーケンスの中にギャップがなく、移動の許可と作成ステートメントは何ですか?シーケンスを新しいスキーマに移動するには?
注:私はSYSや他の管理者ユーザーの役割とパスワードを持っていません。古いスキーマと新しいスキーマにのみアクセスできます。
最も簡単な方法は、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 ...
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
、それが新しいスキーマに作成するために、古いスキーマからあなたにスクリプトを与えることができます。
ようこそ'user'の代わりに' 'old_schema''を置くのは、SYSとしてではなく、シーケンスの所有者として行うかもしれないからです。 – LauDec
#1は新しいスキーマに接続します #2はmy_userにシーケンスを作成します #3は古いスキーマに接続します #4シーケンスを実行するスクリプトを実行します – are