仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4864|回复: 18
打印 上一主题 下一主题

[学习教程] 绝无经由的ACCESS数据库向MySQL疾速迁徙小法式(一)

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-16 00:23:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果你需要额外的功能的话,MySQL的普及性实际上可以让你发现总有一个厂商会提供准确的解决方案,而这个方案会满足你的需要和需求。近日,自己为了将为公司开辟的一个信息办理体系从之前试运转的开辟机械上(Windows NT + IIS4.0 + access)迁徙至一台真实的linux办事器上(Apache1.3.12 + php 4.03 + MySQL 3.23.26),个中数据库中的几十个表的内容迁徙,入手下手让我小费了一些周折,从网上也下载了一些MySqL的客户软件或是数据库办理软件,写得较好的软件均无数据迁徙功效,但其迁徙体例不过乎两种,一种是采取文件引入体例,此种体例在处置数据库中有和分隔符不异的字符时,会发生毛病,特别是在处置ACCESS中的Memo字段,很轻易失足,最初招致导出后的数据不是多了就是少了。而另外一种撑持ODBC直接导入的功效较强,根基可无毛病地导入各个表的内容,但很遗憾,这必需是创立在ACCESS中表格的字段是英文是才可以,如在ACCESS中字段是中文名,普通也失足,不克不及胜利导入。
为此我只好花了点工夫写了两个小法式,用于将ACCESS数据库的内容向MySQL迁徙,经利用,后果还不错,特在此写出贡献给列位一试或评判。

先概述一下利用办法,
1,将ACCESS的数据库创立一个"system DSN";
    2,依据ACCESS数据库中各表的称号,在MySQL中创立响应的各个空表;
3,运转fdlist.php;
    4,运转import.php;
    5,每运转一次3,4步可迁徙一个表,然后修正fdlist.php中的ACCESS源表名和MySQL中的方针表名,再运转3,4步,直至迁徙一切的表,

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以下为 fdlist.php源法式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~      
<html>
<head>
<style type=text/CSS>
body,td,li,div,p,PRe,a,b,h1,h2,h3,h4 {font-family:verdana;font-size:9pt;line-height : 18px;color:#a00000 }  
</style>
</head>
<?  

     $dbconnection = @mysql_connect("yourmysqlserver", "mysqlaccount", "mysqlpassWord")  
      
         or die ("can not connect to database server");
      
     @mysql_select_db("yourdatabase")   
               
              or die("<p style='font-size:9pt;font-family:verdana;color:#803333;font-weight:bold'>No Database,</p>") ;  

     $odbc_table = "youroriginaltable" ;    // The original table name in your ODBC database

     $mysql_table = "yournewtable" ;        // The new table name in your Mysql Database.


      
?>

<body bgcolor=#f0f0f0 topmargin=0 leftmargin=0 text=#a00000>

<br>
<div style="font-size:24pt;font-family:times;font-weight:bold;color:#00a000">Fields List of Two tables</div>
<hr size=1 color=#900000>

<?

     $conn = odbc_connect("task", "", "");
      
     $odbc_query = "select * from " . $odbc_table . " where 1=2";
      
     $recordsid = odbc_exec($conn, $odbc_query);
      
     $idcounts = odbc_num_fields( $recordsid ) ;

     $fdlist1 = "" ;
      
     for ( $i = 1 ; $i <= $idcounts ; $i ++)  
      
         $fdlist1 .=   odbc_field_name($recordsid,$i)."," ;
      
     echo "<div> Fd1 = " . $fdlist1 ;
      
     $fdlist1 = substr($fdlist1,0,strlen($fdlist1)-1) ;
      
     $fdlist2 = "" ;

         
     $sqlquery = "select * from " . $mysql_table . " where 1=2 " ;  
      
     $records2 = mysql_query ($sqlquery) ;
                  
     $idcount2 = mysql_num_fields ( $records2 ) ;
      
      
      
     for ( $i = 0 ; $i < $idcount2 ; $i++)
      
         $fdlist2 .= mysql_field_name($records2,$i )."," ;
         
     echo "<div> FD2 = " . $fdlist2 ;

     $fdlist2 = substr($fdlist2,0,strlen($fdlist2)-1) ;
         
     $fp = fopen ("fdlist.txt","w") ;
      
     fwrite ($fp,$ctable) ;
      
     fwrite ($fp,"n");
      
     fwrite ($fp,$fdlist1) ;
      
     fwrite ($fp,"n");
      
     fwrite ($fp,$etable) ;
      
     fwrite ($fp,"n") ;
      
     fwrite ($fp,$fdlist2) ;
      
     fclose($fp) ;
         
     odbc_close($conn);

     if ( $idcount2 != $idcounts )  {
      
         echo "<hr size=1 color=#900000>".  
              
             "<div style='font-size:20pt;font-family:times;font-weight:bold'> The fields of two tables doesn't match" ;

         echo "<br><br>ODBC_table Fields = " . $idcounts;

         echo "<br><br>MySQL_table Fields = " . $idcount2;
     }
?>


</body>
</html>

~~~~~~~~~~~~~~~~~~~
未完接(二)
~~~~~~~~~~~~~~~~~~~ 这种服务也提供了足够的监控功能来跟踪性能和使用情况,在问题发生时将发出通知并生成一定深度的分析报告。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-2-16 00:49:36 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
因胸联盟 该用户已被删除
板凳
发表于 2015-2-25 16:28:19 | 只看该作者
入门没那么困难,精通没那么容易
柔情似水 该用户已被删除
地板
发表于 2015-3-7 23:33:39 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
小妖女 该用户已被删除
5#
发表于 2015-3-15 16:23:29 | 只看该作者
也可谈一下你是怎么优化存储过程的?
若相依 该用户已被删除
6#
发表于 2015-3-17 01:10:16 | 只看该作者
一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
海妖 该用户已被删除
7#
发表于 2015-3-22 19:11:02 | 只看该作者
SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
深爱那片海 该用户已被删除
8#
发表于 2015-3-24 13:38:39 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
山那边是海 该用户已被删除
9#
发表于 2015-4-2 11:55:18 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
莫相离 该用户已被删除
10#
发表于 2015-4-7 17:54:37 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
兰色精灵 该用户已被删除
11#
发表于 2015-4-14 22:31:05 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
不帅 该用户已被删除
12#
发表于 2015-4-16 21:38:32 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
金色的骷髅 该用户已被删除
13#
发表于 2015-5-4 06:10:24 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
再见西城 该用户已被删除
14#
发表于 2015-6-29 22:27:12 | 只看该作者
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
分手快乐 该用户已被删除
15#
发表于 2015-7-10 06:26:34 | 只看该作者
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
透明 该用户已被删除
16#
发表于 2015-7-10 19:33:46 | 只看该作者
比如日志传送、比如集群。。。
精灵巫婆 该用户已被删除
17#
发表于 2015-7-18 01:05:35 | 只看该作者
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
再现理想 该用户已被删除
18#
发表于 2015-7-20 18:38:40 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
活着的死人 该用户已被删除
19#
发表于 2015-7-25 20:16:39 | 只看该作者
总感觉自己还是不会SQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-28 16:24

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表