Navicat Premium数据迁移,去O转Mysql
作者:互联网
1.使用工具Navicat Premium连接oracle和mysql
连接本地oracle需下载对应的oci文件
OCI下载地址
将下载的oci文件解压,Navicat Premium->工具->选项,找到oci配置oci文件解压地址
2.迁移遇到的问题及解决方法
1.oracle的date数据类型迁移到mysql前需要转换为timestamp类型,工具迁移时会将timestamp自动转换为mysql中的datetime数据类型。
这里是引用
由于mysql的date类型只支持存储日期,不能存储时间,navicat在转换时,如果是oracle的date,会自动转成mysql的date,这样会导致mysql的精度不够而报错,所以要提前将oracle的date类型转换成timestamp类型。如果表的数量比较多,手工改太麻烦了,我这里写了个存储过程,自动将oracle中所有表中的DATE类型转换成TIMESTAMP类型:
create or replace procedure convert_date_to_timestamp
/**************************
function: 将数据库中所有的表中含DATE类型的字段改为TIMESTAMP类型;
需要建立下列类型表:
create table type_table_info (
table_name varchar2(30),
column_name varchar2(30),
data_type varchar2(100)
)
***************************/
is
v_query_base_sql varchar2(100) := 'SELECT table_name, column_name, data_type FROM all_tab_cols WHERE table_name = ''';
v_query_table_sql varchar2(150);
v_alter_sql varchar2(100);
type table_type is table of type_table_info%rowtype;
table_array table_type;
begin
DBMS_OUTPUT.ENABLE (buffer_size=>null);
for c_tabs in (
select table_name from user_tables where table_name <> 'type_table_info'
)
loop
v_query_table_sql := v_query_base_sql || c_tabs.table_name || '''';
execute immediate v_query_table_sql bulk collect into table_array;
for i in table_array.first .. table_array.last
loop
--DBMS_OUTPUT.put_line(table_array(i).column_name || ':' || table_array(i).data_type);
if table_array(i).data_type = 'DATE' then
v_alter_sql := 'alter table ' || table_array(i).table_name || ' modify ' || table_array(i).column_name || ' timestamp';
DBMS_OUTPUT.put_line(table_array(i).column_name || ': ' || v_alter_sql);
execute immediate v_alter_sql;
end if;
end loop;
end loop;
end convert_date_to_timestamp;
执行注意:
(1).先建存储过程中的表
(2)在plsql程序窗口编译该段代码
(3)调用存储过程,报错buffer问题已在存储过程加入DBMS_OUTPUT.ENABLE (buffer_size=>null);解决
begin
convert_date_to_timestamp();
end;
2.mysql下max_allowed_packet参数限制
(1)命令行修改(liunx和windows下都可不重启生效)
mysql -u数据库名 -p进入去修改
这里是引用
set global max_allowed_packet = 210241024*10;
注意:
这样修改会报错:mysql> set max_allowed_packet=16MB;
ERROR 1232 (42000): Incorrect argument type to variable ‘max_allowed_packet’
查看是否修改成功
show VARIABLES like '%max_allowed_packet%';
3.迁移支持断点迁移,效率考虑我用了一台机器迁了一部分到本地的sql库中导出为sql文件在跳板机往目的库迁移,期间报错mysql导入错误,提示需要super权限
这里是引用
用户权限表一般在mysql库中,切换到该库
授权用户super权限
update user set Super_priv=‘Y’ where User=‘用户名’;
flush privileges;
3.工具迁移
工具->数据传输,选择源库、目的库,高级中将相关参数设置好即可开始迁移
转载自
https://blog.csdn.net/weixin_40946381/article/details/104003496
https://blog.csdn.net/dd276/article/details/52089216
标签:Premium,name,Mysql,Navicat,sql,mysql,table,array,type 来源: https://blog.csdn.net/weixin_45612169/article/details/122025870