ORACLE 10g:从远程数据库重置序列
ORACLE 10g: Reset Sequences from remote database
我有团队使用的需要复制的远程数据库。我创建了一个数据库 link 和一个可以从远程访问 all_sequences table 的同义词。
create synonym rprod_all_sequences for all_sequences@rprod_production;
现在我创建了一个 sql 文件,它将获取所有用户序列并更改它们以从正确的数字开始。
set serveroutput on
/******************************************************************************/
/* RESET ALL SEQUENCE NUMBERS */
/******************************************************************************/
declare
cursor c_cursor is
select sequence_owner||'.'||sequence_name AS name, TO_CHAR(last_number + 1) AS last_number
from rprod_all_sequences
where sequence_owner not in ('WMSYS','XDB','SYS','SYSTEM','SYSMAN','MDSYS','LBACSYS','EXFSYS','DMSYS','DBSNMP','CTXSYS');
begin
for r_record in c_cursor loop
execute immediate 'alter sequence ' || r_record.name || ' ' ||' INCREMENT BY '|| r_record.last_number ||';';
end loop;
end;
/
exit;
但我总是收到这个错误:
sqlplus@RPROD> @reset_seq.sql
declare
*
ERROR at line 1:
ORA-00911: invalid character
ORA-06512: at line 7
我不确定为什么它会抱怨脚本,因为我单独尝试过它并且它正在运行。抱歉,这可能是一个菜鸟问题。关于原因有什么想法吗?
谢谢。
你在立即执行语句的末尾有一个额外的 ;
。试试这个:
DECLARE
CURSOR c_cursor
IS
SELECT sequence_owner || '.' || sequence_name AS name,
TO_CHAR (last_number + 1) AS last_number
FROM rprod_all_sequences
WHERE sequence_owner NOT IN ('WMSYS',
'XDB',
'SYS',
'SYSTEM',
'SYSMAN',
'MDSYS',
'LBACSYS',
'EXFSYS',
'DMSYS',
'DBSNMP',
'CTXSYS');
BEGIN
FOR r_record IN c_cursor
LOOP
EXECUTE IMMEDIATE
'alter sequence '
|| r_record.name
|| ' '
|| ' INCREMENT BY '
|| r_record.last_number
;
END LOOP;
END;
/
我有团队使用的需要复制的远程数据库。我创建了一个数据库 link 和一个可以从远程访问 all_sequences table 的同义词。
create synonym rprod_all_sequences for all_sequences@rprod_production;
现在我创建了一个 sql 文件,它将获取所有用户序列并更改它们以从正确的数字开始。
set serveroutput on
/******************************************************************************/
/* RESET ALL SEQUENCE NUMBERS */
/******************************************************************************/
declare
cursor c_cursor is
select sequence_owner||'.'||sequence_name AS name, TO_CHAR(last_number + 1) AS last_number
from rprod_all_sequences
where sequence_owner not in ('WMSYS','XDB','SYS','SYSTEM','SYSMAN','MDSYS','LBACSYS','EXFSYS','DMSYS','DBSNMP','CTXSYS');
begin
for r_record in c_cursor loop
execute immediate 'alter sequence ' || r_record.name || ' ' ||' INCREMENT BY '|| r_record.last_number ||';';
end loop;
end;
/
exit;
但我总是收到这个错误:
sqlplus@RPROD> @reset_seq.sql
declare
*
ERROR at line 1:
ORA-00911: invalid character
ORA-06512: at line 7
我不确定为什么它会抱怨脚本,因为我单独尝试过它并且它正在运行。抱歉,这可能是一个菜鸟问题。关于原因有什么想法吗?
谢谢。
你在立即执行语句的末尾有一个额外的 ;
。试试这个:
DECLARE
CURSOR c_cursor
IS
SELECT sequence_owner || '.' || sequence_name AS name,
TO_CHAR (last_number + 1) AS last_number
FROM rprod_all_sequences
WHERE sequence_owner NOT IN ('WMSYS',
'XDB',
'SYS',
'SYSTEM',
'SYSMAN',
'MDSYS',
'LBACSYS',
'EXFSYS',
'DMSYS',
'DBSNMP',
'CTXSYS');
BEGIN
FOR r_record IN c_cursor
LOOP
EXECUTE IMMEDIATE
'alter sequence '
|| r_record.name
|| ' '
|| ' INCREMENT BY '
|| r_record.last_number
;
END LOOP;
END;
/