连接本地oracle需下载对应的oci文件
OCI下载地址
将下载的oci文件解压,Navicat Premium->工具->选项,找到oci配置oci文件解压地址
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;
工具->数据传输,选择源库、目的库,高级中将相关参数设置好即可开始迁移
转载自
https://blog.csdn.net/weixin_40946381/article/details/104003496
https://blog.csdn.net/dd276/article/details/52089216