|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我们只需要把binlog文件反向执行,每个操作都执行逆操作即可。当然也不是所有的event都反转。Table_mapevent必须还是在Rows_log_event每个操作之前。反复怎样查找、删除表中反复的纪录
软件情况:1、WindowsNT4.0+ORACLE8.0.4
2、ORACLE安装路径为:C:ORANT
成绩提出:1、当我们想要为一个表创立独一索引时,假如该表有反复的纪录,则没法创立乐成。办法道理:1、Oracle中,每笔记录都有一个rowid,rowid在全部数据库中是独一的,
rowid断定了每笔记录是在ORACLE中的哪个数据文件、块、行上。
2、在反复的纪录中,大概一切列的内容都不异,但rowid不会不异,以是只需断定出反复纪录中
那些具有最年夜rowid的就能够了,其他全体删除。
3、以下语句用到了3项技能:rowid、子查询、别号。
完成办法:
SQL>createtablea(2bmchar(4),--编码3mcvarchar2(20)--称号4)5/表已创建.SQL>insertintoavalues(1111,1111);SQL>insertintoavalues(1112,1111);SQL>insertintoavalues(1113,1111);SQL>insertintoavalues(1114,1111);SQL>insertintoaselect*froma;拔出4个纪录.SQL>commit;完整提交.SQL>selectrowid,bm,mcfroma;ROWIDBMMC-----------------------------000000D5.0000.000211111111000000D5.0001.000211121111000000D5.0002.000211131111000000D5.0003.000211141111000000D5.0004.000211111111000000D5.0005.000211121111000000D5.0006.000211131111000000D5.0007.000211141111查询到8纪录.查出反复纪录SQL>selectrowid,bm,mcfromawherea.rowid!=(selectmax(rowid)fromabwherea.bm=b.bmanda.mc=b.mc);ROWIDBMMC------------------------------------------000000D5.0000.000211111111000000D5.0001.000211121111000000D5.0002.000211131111000000D5.0003.000211141111删除反复纪录SQL>deletefromaawherea.rowid!=(selectmax(rowid)fromabwherea.bm=b.bmanda.mc=b.mc);删除4个纪录.SQL>selectrowid,bm,mcfroma;ROWIDBMMC------------------------------------------000000D5.0004.000211111111000000D5.0005.000211121111000000D5.0006.000211131111000000D5.0007.000211141111
操作被同步到从库上后,则主从都“回天无力”。 |
|