oracle迁移到mysql生成主键索引脚本
除了使用下面sql脚本也可以考虑expdp contents=metadata_only+impdp sqlfile=xxx的方式。
1.创建函数–使用DBMS_LOB.SUBSTR函数将Clob转换为Varchar的代码示例:
CREATE OR REPLACE FUNCTION clob_to_varchar(c CLOB) RETURN VARCHAR2 AS BEGIN RETURN DBMS_LOB.SUBSTR(c, DBMS_LOB.GETLENGTH(c), 1); END; /
复制
2.准备SQL脚本:(可自行调整)
SELECT T.TABLE_NAME , --表名 T.INDEX_NAME , --索引名 I.UNIQUENESS , --是否非空 I.INDEX_TYPE , --索引类型 C.CONSTRAINT_TYPE , --键类型 clob_to_varchar(WM_CONCAT(T.COLUMN_NAME)) COLS, clob_to_varchar(CASE WHEN C.CONSTRAINT_TYPE = 'P' OR C.CONSTRAINT_TYPE = 'R' THEN --主键和外键创建脚本拼接 'ALTER TABLE ' || T.TABLE_NAME || ' ADD CONSTRAINT ' || T.INDEX_NAME || (CASE WHEN C.CONSTRAINT_TYPE = 'P' THEN ' PRIMARY KEY (' ELSE ' FOREIGN KEY (' END) || WM_CONCAT(T.COLUMN_NAME) || ');' ELSE --索引创建脚本拼接 ALTER TABLE `XXX` ADD INDEX XXX (`XXX`);--UNIQUE 'ALTER TABLE `' || T.TABLE_NAME || '` ADD ' || (CASE WHEN I.UNIQUENESS = 'UNIQUE' THEN I.UNIQUENESS || ' ' ELSE 'INDEX ' END) || T.INDEX_NAME || '(`' || WM_CONCAT(COLUMN_NAME) || '`);' END) SQL_CMD --拼接创建脚本 FROM USER_IND_COLUMNS T, USER_INDEXES I , USER_CONSTRAINTS C WHERE T.INDEX_NAME = I.INDEX_NAME AND T.INDEX_NAME = C.CONSTRAINT_NAME(+) AND I.INDEX_TYPE != 'FUNCTION-BASED NORMAL' --排除基于函数的索引 AND (T.TABLE_NAME LIKE 'DES_%' or T.TABLE_NAME LIKE 'TEST_%') --特定表规则 --AND (C.CONSTRAINT_TYPE != 'P' or C.CONSTRAINT_TYPE is null) --排除主键索引 GROUP BY T.TABLE_NAME, T.INDEX_NAME, I.UNIQUENESS, I.INDEX_TYPE, C.CONSTRAINT_TYPE;
复制
3.执行2的查询得到类似结果:
4.创建索引并记录时间参考:
[root@lnpg ~]# cat idx2.sql select now(); create index DES_SERVICEID on DES_SERVICE (SERVICEID); select now(); create index IDX_DES_SERVICE1 on DES_SERVICE (ACCESSNBR, AREACODE); select now(); create index IDX_DES_SERVICE2 on DES_SERVICE (SERVICEID, RECORDSTATUS); select now(); create index IDX_DES_SERVICE3 on DES_SERVICE (ACCESSNBR); select now(); create index IDX_DES_SERVICE4 on DES_SERVICE (DEFAULTUSERID); select now(); alter table DES_SERVICE add constraint PK_DES_SERVICE primary key (SERVICEID, SERVICEIDSEQ); select now(); [root@lnpg ~]# more idx2.sh mysql -ugistar -p1qazXSW@ -h192.168.207.143 -A -D resdb < idx2.sql [root@lnpg ~]# nohup ./idx2.sh > ./idx2.log & [1] 17529 [root@lnpg ~]# nohup: 忽略输入重定向错误到标准输出端 [root@lnpg ~]# [root@lnpg ~]# [root@lnpg ~]# [root@lnpg ~]# [root@lnpg ~]# tail -f idx2.log mysql: [Warning] Using a password on the command line interface can be insecure. ^C [root@lnpg ~]# more idx2.log mysql: [Warning] Using a password on the command line interface can be insecure. [root@lnpg ~]# tail -f idx2.log mysql: [Warning] Using a password on the command line interface can be insecure. now() 2024-02-22 09:47:30 now() 2024-02-22 10:08:53 now() 2024-02-22 10:35:41 now() 2024-02-22 10:56:08 now() 2024-02-22 11:22:25 now() 2024-02-22 11:41:59 now() 2024-02-22 14:31:31 ^C [1]+ 完成 nohup ./idx2.sh > ./idx2.log 新开窗口观察: mysql> show index from DES_SERVICE; mysql> select * from mysql.innodb_index_stats where database_name='resdb' and table_name='DES_SERVICE';
复制
last_update这个字段显示的是最后一次表中所有索引的更新时间,只要任意一个索引变化,全部都显示相同的时间,不是某个索引创建后的时间。
每创建一个索引就会全部变更时间:
创建完成后如图:
相关参考:
https://blog.csdn.net/jycjyc/article/details/136214062
最后修改时间:2024-02-22 14:40:09
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
940次阅读
2025-03-17 11:33:53
MySQL8.0统计信息总结
闫建(Rock Yan)
570次阅读
2025-03-17 16:04:03
Oracle DataGuard高可用性解决方案详解
孙莹
399次阅读
2025-03-26 23:27:33
MySQL生产实战优化(利用Index skip scan优化性能提升257倍)
chengang
389次阅读
2025-03-17 10:36:40
MySQL数据库当前和历史事务分析
听见风的声音
360次阅读
2025-04-01 08:47:17
墨天轮个人数说知识点合集
JiekeXu
342次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
333次阅读
2025-04-08 09:12:48
MySQL 生产实践-Update 二级索引导致的性能问题排查
chengang
333次阅读
2025-03-28 16:28:31
Oracle SQL 执行计划分析与优化指南
Digital Observer
303次阅读
2025-04-01 11:08:44
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
282次阅读
2025-03-24 09:42:53
热门文章
oracle19c rac grid安装报错的快速处理libasmclntsh19.ohso libasmperl19.ohso client_sharedlib' of makefile
2023-03-15 12944浏览
奇怪的ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
2021-11-26 8336浏览
oracle19c rac+asm-->oracle 19c single+fs的adg搭建(实战于生产)
2021-11-11 5793浏览
(1)一次失败的割接经历:麒麟linux6.5+oracle 12c rac打PSU补丁
2022-09-21 5704浏览
gpu p2p多卡训练运行不正常问题
2023-03-09 5340浏览