--==============================================================
-- migrate data define and body
--==============================================================
--**************************************************************migrate data begin**************************************
--open screen output
set serveroutput on;
--**********************************************package declare begin*********************************
create or replace package migration_package is
--declare procedures
--define cursor type
type sp_cursor is ref cursor;
--insert data into mapper table
procedure insert_auditmapper_data(mapperId in number, listenerName in varchar2, affectRows out number);
--insert data into the relation of mapper and listener table
procedure insert_xrefmapperlistener_data(mapperId in number, listenerId in number, affectRows out number);
--insert mapper id, Mapper Selector for GAL_PUBLIC_KEY_FIELD table
procedure update_publickeyfield_data(listenerId in number, mapperId in number, listenerName varchar2, u_pkf_affectRows out number, affectRows out number);
--migrate data
procedure migrate_data(isSuccessFlag out number);
end;
/
--**********************************************package declare end*********************************
--**********************************************package body begin*********************************
create or replace package body migration_package is
--insert data into mapper table
procedure insert_auditmapper_data(mapperId number, listenerName varchar2, affectRows out number) is
begin
--execute part
insert into GAL_AUDIT_MESSAGE_MAPPER (MAPPER_ID, MAPPER_NAME, MAPPER_DESCRIPTION, CREATED_BY, CREATION_DATE) values(mapperId, substr(listenerName||'_Mapper',1,255), substr('create a mapper for Listener: '||listenerName,1,255), 0, sysdate);
affectRows:= SQL%ROWCOUNT;
end;
--insert data into the relation of mapper and listener table
procedure insert_xrefmapperlistener_data(mapperId number, listenerId number, affectRows out number) is
begin
--execute part
insert into GAL_XREF_MAPPER_LISTENER (MAPPER_ID, LISTENER_ID, CREATED_BY, CREATION_DATE) values(mapperId, listenerId, 0, sysdate);
affectRows:= SQL%ROWCOUNT;
end;
--insert mapper id, Mapper Selector for GAL_PUBLIC_KEY_FIELD table
procedure update_publickeyfield_data(listenerId number, mapperId number, listenerName varchar2, u_pkf_affectRows out number, affectRows out number) is
v_publicKeyId gal_public_key_field.public_key_field_id%type;
begin
--execute part
--insert mapper id
update GAL_PUBLIC_KEY_FIELD set mapper_id=mapperId where listener_id=listenerId;
u_pkf_affectRows:= SQL%ROWCOUNT;
--get public key id
select PUBLIC_KEY_FIELD_ID_SEQ.NEXTVAL into v_publicKeyId from dual;
--insert Mapper Selector
insert into GAL_PUBLIC_KEY_FIELD (PUBLIC_KEY_FIELD_ID, MAPPER_ID, FIELD_NAME_DESCRIPTION, CONSTANT_VALUE, IS_XML_FIELD, FIELD_TYPE, CREATED_BY, CREATION_DATE, DEFAULT_VALUE)
values(v_publicKeyId, mapperId, substr('Mapper Selector for '||listenerName,1,255), substr('Mapper Selector for '||listenerName,1,255), 'N', 'Mapper Selector', 0, sysdate, 'N');
affectRows:= SQL%ROWCOUNT;
end;
--insert data base on GAL_LISTENER TABLE
procedure migrate_data(isSuccessFlag out number) is
--define cursor var
m_cursor sp_cursor;
--define v_listenerId var
v_listenerId gal_listener.listener_id%type;
--define v_listenerName var
v_listenerName gal_listener.listener_name%type;
--define v_mapperId var
v_mapperId gal_audit_message_mapper.mapper_id%type;
affectRows number;
u_pkf_affectRows number;
mapper_affectRows number;
xref_affectRows number;
u_pkf_amount number;
i_pkf_amount number;
v_listeners_amount number;
begin
--execute part
dbms_output.put_line('migration data begin...');
mapper_affectRows:=0;
xref_affectRows:=0;
u_pkf_amount:=0;
i_pkf_amount:=0;
--get the listener rows amount
select count(distinct listener_id) into v_listeners_amount from GAL_LISTENER;
dbms_output.put_line('the GAL_LISTENER table rows amount: '||v_listeners_amount);
open m_cursor for select distinct listener_id, listener_name from GAL_LISTENER;
loop
fetch m_cursor into v_listenerId, v_listenerName;
exit when m_cursor%notfound;
--get mapper id from sequence
select MAPPER_ID_SEQ.NEXTVAL into v_mapperId from dual;
--dbms_output.put_line('listener_name...'||v_listenerName);
--insert data into mapper table
affectRows:=0;
insert_auditmapper_data(v_mapperId, v_listenerName, affectRows);
--sum the affect rows
mapper_affectRows:=mapper_affectRows+affectRows;
affectRows:=0;
--insert data into the relation of mapper and listener table
insert_xrefmapperlistener_data(v_mapperId, v_listenerId, affectRows);
--sum the affect rows
xref_affectRows:=xref_affectRows+affectRows;
affectRows:=0;
u_pkf_affectRows:=0;
--insert mapper id for GAL_PUBLIC_KEY_FIELD table
update_publickeyfield_data(v_listenerId, v_mapperId, v_listenerName, u_pkf_affectRows, affectRows);
--sum the affect rows
u_pkf_amount:=u_pkf_amount+u_pkf_affectRows;
i_pkf_amount:=i_pkf_amount+affectRows;
end loop;
affectRows:=mapper_affectRows+xref_affectRows+u_pkf_amount+i_pkf_amount;
dbms_output.put_line('Below are the execute result: ');
dbms_output.put_line('insert GAL_AUDIT_MESSAGE_MAPPER table rows amount: '||mapper_affectRows);
dbms_output.put_line('insert GAL_XREF_MAPPER_LISTENER table rows amount: '||xref_affectRows);
dbms_output.put_line('update GAL_PUBLIC_KEY_FIELD table rows amount: '||u_pkf_amount);
dbms_output.put_line('insert GAL_PUBLIC_KEY_FIELD table rows amount: '||i_pkf_amount);
dbms_output.put_line('affect rows amount: '||affectRows);
dbms_output.put_line('migration data end.');
isSuccessFlag:=1;
--close cursor
close m_cursor;
--dbms_output.put_line('close cursor!');
Exception
when DUP_VAL_ON_INDEX then
isSuccessFlag:=-1;
rollback;
raise_application_error(-20001, 'An error was encountered: insert duplicated data!'||' And the detail error info: '||SQLERRM);
when others then
isSuccessFlag:=-1;
rollback;
raise_application_error(-20001, 'An error was encountered1 - '||SQLCODE||' -ERROR- '||SQLERRM);
end;
end migration_package;
/
--***********************************************package body end************
--************************************migrate data end***********************
--==============================================================
-- migrate data and update database version
--==============================================================
declare
isSuccessFlag number;
begin
--call procedure migrate_data
migration_package.migrate_data(isSuccessFlag);
if isSuccessFlag=1 then
execute immediate 'alter table GAL_PUBLIC_KEY_FIELD drop COLUMN LISTENER_ID';
dbms_output.put_line('drop listener_id from gal_public_key_field table successfully!');
UPDATE GAL_SETTINGS SET SETTING_VALUE = '5.0.0' WHERE SETTING_NAME = 'DATABASE VERSION';
commit;
end if;
end;
/
--clean operation
drop package migration_package;
exit;
分享到:
相关推荐
本篇将详细讲解如何利用C#编程语言实现Oracle数据库视图的迁移。 首先,我们需要理解C#的基本语法和Oracle数据库的连接方式。C#提供了ADO.NET框架,通过System.Data.OracleClient或Oracle.ManagedDataAccess.Client...
6. 批量生成脚本:在迁移向导中,可以批量生成脚本,例如unload_script和oracle_ctl脚本,用于数据导出和导入。 7. 数据导出和导入:使用unload_script脚本可以从源数据库中生成数据导出文件,然后使用oracle_ctl...
Oracle 数据库跨平台迁移技术研究 Oracle 数据库跨平台迁移技术是指将 Oracle 数据库从一个平台迁移到另一个平台的过程。这种迁移可能会遇到字节序问题,因为不同的操作系统平台可能具有不同的字节序。为了解决这个...
12. Oracle常用Script 13. Oracle常用数据字典 14. ORACLE回滚段管理(上) 15. ORACLE回滚段管理(下) 16. Oracle基于Client-Server的性能调整 17. Oracle数据库的安全策略 18. ORACLE数据库简介 19. ...
2. **脚本创建 (script_creation)**:这部分脚本可能包含创建数据库对象(如表、索引、存储过程、触发器等)的模板,或者用于自动化数据库维护的脚本,例如数据导入导出、备份恢复、性能调优等。 3. **等待事件分析...
2. 数据导入导出:MyEclipse DB Browser支持数据的导入导出功能,这对于数据迁移或备份非常有用。 3. 表结构修改:可以创建新表,修改现有表的结构,如添加、删除或修改字段。 4. 错误处理:如果遇到错误,检查SQL...
SQL>@/path/to/script.sql ``` **如何Drop Offline数据文件** 当数据文件处于离线状态时,可以通过以下命令将其删除: ```sql ALTER DATABASE DATAFILE '/path/to/datafile.dbf' DROP; ``` **如何修改DBFILES** ...
[oracle@localhost script]$ imp Import: Release 8.1.7.4.0 - Production on Mon Feb 9 13:59:02 2004 ... Username: cams Password: ... Import file: expdat.dmp > /tmp/2004020601.dmp Enter insert buffer size...
Toad是一款功能强大的Oracle数据库管理工具,其DBA菜单中的"Generate Schema Script"选项可以方便地导出DDL。用户只需连接到目标数据库,选择对应的Schema,设定必要的条件,执行后即可保存或复制DDL脚本。同样,PL/...
5. 预处理与后处理脚本:`impdp user/pass directory=dir_name dumpfile=table.dmp pre_sql='sql_script.sql' post_sql='sql_script.sql'` - 可以在导入前后执行自定义的SQL脚本。 三、注意事项 1. 安全性:确保...
"script" 文件可能包含了数据库脚本,用于自动化一些实施过程,比如创建用户、表、索引、存储过程等,或者用于数据迁移和数据加载的 SQL 脚本。 总的来说,Oracle 数据库实施手册是 IT 专业人士实施和管理 Oracle ...
在Oracle中,脚本(Script)是用于执行一系列SQL命令或PL/SQL语句的文本文件,通常用于数据库的创建、数据操作、表结构修改等任务。通过编写和运行Oracle脚本,我们可以高效地自动化数据库管理工作。 标题"ORACLE...
0 2 * * * /path/to/exp_script.sh > /path/to/log_file.log 2>&1 ``` 以上内容总结了Oracle数据库逻辑备份的基本原理、工具使用方法及常见应用场景,希望对读者理解和掌握Oracle逻辑备份有所帮助。
SQL*Plus可以配合`SQL*Loader`工具进行大量数据的导入和导出,方便数据迁移和备份。 10. **报表和输出** SQL*Plus的结果可以重定向到文件,或者通过`SPOOL`命令创建报表。例如,将查询结果保存到`output.txt`: ...
Oracle数据库作为市场上主流的企业级数据库之一,其从10g升级到11g的过程是一个重要的系统迁移任务。 #### 升级环境 - **数据库旧版本**:10.2.0.4 - **数据库新版本**:11.2.0.2 - **操作系统版本**:Solaris 10 -...
6. **数据泵传输(DBMS_DATAPUMP)**:Oracle Data Pump API可以用来在后台进行大规模的数据迁移。它提供了更底层的控制,适用于开发自定义的数据迁移解决方案。 7. **SQL Developer**:Oracle的免费图形化数据库...
CONVERT DATABASE命令是Oracle数据库系统中用于在不同操作系统平台之间迁移数据库的一种高级工具。这个命令允许用户将一个数据库从Linux环境迁移到Windows环境,或者其他支持的平台,而无需进行完整数据库的备份和...
5. **数据迁移**: 虽然不是专门的数据迁移工具,但在某些情况下,SQL Plus 可以辅助完成简单的数据迁移任务。 #### 四、SQL Plus 基本命令介绍 1. **登录与退出**: 使用 `conn` 命令连接到数据库实例,使用 `exit`...
比如,这些脚本可能专门用于数据迁移、数据库升级、性能调优或者安全审计。tar是一种常见的Unix/Linux系统下的文件打包格式,通过解压这个文件,DBA可以获取到更多的实用工具和脚本,这些脚本可能需要在Linux或Unix...
首先,需要确保服务器上的Oracle客户端工具安装并配置正确,然后使用SSH连接命令,例如`ssh user@hostname`,接着在远程服务器上启动`sqlplus`,输入数据库连接信息,最后执行脚本文件,如`@script.sql`。...