首页 后端开发 php教程 DB2表数据迁移 db2命令 db2下载 db2数据库入门教

DB2表数据迁移 db2命令 db2下载 db2数据库入门教

Jul 29, 2016 am 08:52 AM
db2 迁移

系统用到一个远程数据库。地点在USA,连接速度特别慢。DBA又不给导数据库
只好自己写一个数据库表迁移的方法。但是只能一次一张表慢慢的导。使用PHP编写

<code><span><?php </span><span>//原数据库</span><span>$databaseOri</span> = <span>'原数据库名称'</span>;
    <span>$hostnameOri</span> = <span>'IP地址'</span>;
    <span>$portOri</span> = <span>'端口号'</span>;
    <span>$userOri</span> = <span>'用户名'</span>;
    <span>$passwordOri</span> = <span>'密码'</span>;
    <span>$csOri</span>=<span>"DATABASE=$databaseOri;HOSTNAME=$hostnameOri;PORT=$portOri;PROTOCOL=TCPIP;UID=$userOri;PWD=$passwordOri;"</span>;
    <span>$dbOri</span> = db2_connect (<span>$csOri</span>, <span>$userOri</span>, <span>$passwordOri</span>);
    <span>//目标数据库</span><span>$databaseDes</span> = <span>'要转移到的数据库的名称'</span>;
    <span>$hostnameDes</span> = <span>'IP地址'</span>;
    <span>$portDes</span> = <span>'端口号'</span>;
    <span>$userDes</span> = <span>'用户名'</span>;
    <span>$passwordDes</span> = <span>'密码'</span>;
    <span>$csDes</span>=<span>"DATABASE=$databaseDes;HOSTNAME=$hostnameDes;PORT=$portDes;PROTOCOL=TCPIP;UID=$userDes;PWD=$passwordDes;"</span>;
    <span>$dbDes</span> = db2_connect (<span>$csDes</span>, <span>$userDes</span>, <span>$passwordDes</span>);

    <span>//执行sql的方法</span><span><span>function</span><span>fetcher</span><span>(<span>$db</span>, <span>$query</span>,<span>$par</span> = array<span>()</span>)</span>{</span><span>$stmt</span> = db2_prepare(<span>$db</span>, <span>$query</span>);
        <span>$res</span>=<span>array</span>();
        <span>if</span>(<span>$stmt</span>) {
          <span>//print_r($stmt);</span><span>$ex</span> = db2_execute(<span>$stmt</span>,<span>$par</span>);
          <span>if</span>(<span>$ex</span>) {
            <span>try</span>{
                <span>while</span>(<span>$row</span> = db2_fetch_assoc(<span>$stmt</span>)) {
                    array_push(<span>$res</span>, <span>$row</span>);
                } 
            }<span>catch</span>(<span>Exception</span><span>$e</span>){}
          }<span>else</span>{
            print_r(<span>$query</span>);
          }
        }
        <span>return</span><span>$res</span>;
    }

    <span>//插入数据库的方法</span><span><span>function</span><span>insertIntoDes</span><span>(<span>$db</span>, <span>$query</span>,<span>$par</span> = array<span>()</span>)</span>{</span><span>$stmt</span> = db2_prepare(<span>$db</span>, <span>$query</span>);
        <span>$res</span>=<span>array</span>();
        <span>if</span>(<span>$stmt</span>) {
          <span>$ex</span> = db2_execute(<span>$stmt</span>,<span>$par</span>);
          <span>if</span>(!<span>$ex</span>){
            print_r(<span>$query</span>);
          }
        }
        <span>return</span><span>$res</span>;
    }

    <span><span>function</span><span>transferDB</span><span>(<span>$tableName</span>,<span>$dbOri</span>,<span>$dbDes</span>)</span> {</span><span>//拼出要转移的table的所有字段名</span><span>$tableCloums</span> = fetcher(
            <span>$dbOri</span>,
            <span>"select NAME from sysibm.syscolumns where tbname='"</span>.<span>$tableName</span>.<span>"'"</span>,
            <span>array</span>()
        );
        <span>$tableParams</span> = <span>""</span>;
        <span>$insertParamsLength</span> = count(<span>$tableCloums</span>);
        <span>for</span>(<span>$temp</span>=<span>0</span>;<span>$temp</span>$insertParamsLength</span>;<span>$temp</span>++){
            <span>$tmpName</span> = <span>$tableCloums</span>[<span>$temp</span>][<span>"NAME"</span>];
            <span>$tableParams</span> = <span>$tableParams</span>.<span>$tmpName</span>;
            <span>//print_r($tableCloums[$temp]["NAME"]);</span><span>if</span>(<span>$temp</span> $insertParamsLength - <span>1</span> ){
                <span>$tableParams</span> = <span>$tableParams</span>.<span>","</span>;
            }
        }
        <span>//找出table的主键</span><span>$resultKeyArray</span> = fetcher(
            <span>$dbOri</span>,
            <span>"select NAME from sysibm.syscolumns where tbname='"</span>.<span>$tableName</span>.<span>"' and keyseq = '1'"</span>,
            <span>array</span>()
        );
        <span>if</span>(<span>$resultKeyArray</span>[<span>0</span>][<span>"NAME"</span>]){
            <span>$keyCloum</span> = <span>$resultKeyArray</span>[<span>0</span>][<span>"NAME"</span>];
        }<span>else</span>{
            <span>$keyCloum</span> = <span>"ID"</span>;
        }


        <span>//获取表的所有行数,因为如果表太大有几百万行的话,一下全导入到内存中会照成内存溢出</span><span>$count</span> = fetcher(
            <span>$dbOri</span>,
            <span>"select COUNT(*) from public."</span>.<span>$tableName</span>,
            <span>array</span>()
        );
        <span>$dataCount</span> = <span>$count</span>[<span>0</span>][<span>1</span>];
        <span>//确定要执行几次</span><span>$executeloops</span> = floor(<span>$dataCount</span> / <span>10000</span> + <span>1</span>);
        <span>//$executeloops = 1;</span><span>//循环执行</span><span>for</span>(<span>$i</span>=<span>0</span>;<span>$i</span>$executeloops;<span>$i</span>++){
            <span>$pageIndex</span> = <span>$i</span>;
            <span>$beginIndex</span> = <span>$i</span>*<span>10000</span>;
            <span>$endIndex</span> = (<span>$i</span>+<span>1</span>) * <span>10000</span>;
            <span>//通过分页查询,每次从原表中获取1万条数据</span><span>$getDataFromOriTab</span> = 
            <span>"select "</span>.<span>$tableParams</span>.<span>" from (
                select ROW_NUMBER() OVER(ORDER BY "</span>.<span>$keyCloum</span>.<span>" DESC) AS ROWNUM, "</span>.<span>$tableParams</span>.<span>" from public."</span>.<span>$tableName</span>.<span>"  
            ) a where ROWNUM > "</span>.<span>$beginIndex</span>.<span>" and ROWNUM .<span>$endIndex</span> ;
            <span>//fwrite($myfile, $getDataFromOriTab);</span><span>$tmpData</span> = fetcher(<span>$dbOri</span>,<span>$getDataFromOriTab</span>,<span>array</span>());
            <span>//拼接出insert语句中字段的value的值</span><span>$valueStr</span> = <span>""</span>;
            <span>foreach</span>(<span>$tmpData</span><span>as</span><span>$index</span> => <span>$row</span>){
                <span>$valueStr</span> = <span>""</span>;
                <span>foreach</span> (<span>$row</span><span>as</span><span>$cloumName</span> => <span>$value</span>) {
                    <span>if</span>(<span>empty</span>(<span>$value</span>)){
                        <span>$valueStr</span> = <span>$valueStr</span> . <span>"'',"</span>;
                    }<span>else</span><span>if</span> (is_null(<span>$value</span>)) {
                        <span>$valueStr</span> = <span>$valueStr</span> . <span>"null,"</span>;
                    }<span>else</span>{
                        <span>$valueStr</span> = <span>$valueStr</span> . <span>"$value,"</span>;
                    }
                }
                <span>$valueStr</span> = substr(<span>$valueStr</span>, <span>0</span>, -<span>1</span>);
                <span>$insertSql</span> = <span>"INSERT INTO public."</span>.<span>$tableName</span>.<span>" ("</span>.<span>$tableParams</span>.<span>") VALUES ("</span>.<span>$valueStr</span>.<span>");"</span>;
                insertIntoDes(<span>$dbDes</span>,<span>$insertSql</span>,<span>array</span>()); 
            }
        }

    }
    <span>//参数为要导的表的表名</span>
    transferDB(<span>"表名"</span>,<span>$dbOri</span>,<span>$dbDes</span>);
<span>?></span></span></code>
登录后复制
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了DB2表数据迁移,包括了db2,迁移方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

微信聊天记录怎么迁移到新手机 微信聊天记录怎么迁移到新手机 Mar 26, 2024 pm 04:48 PM

1、在旧设备上打开微信app,点击右下角的【我】,选择【设置】功能,点击【聊天】。2、选择【聊天记录迁移与备份】,点击【迁移】,选择要迁移设备的平台。3、点击【择需要迁移的聊天】,点击左下角的【全选】或自主选择聊天记录。4、选择完毕后,点击右下角的【开始】,使用新设备登录此微信账号。5、然后扫描该二维码即可开始迁移聊天记录,用户只需等待迁移完成即可。

Linux和Docker:如何实现容器的跨主机迁移和同步? Linux和Docker:如何实现容器的跨主机迁移和同步? Jul 29, 2023 pm 02:52 PM

Linux和Docker:如何实现容器的跨主机迁移和同步?摘要:Docker是一种流行的容器化技术,它提供了一种轻量级的虚拟化解决方案。在多主机环境中,实现容器的跨主机迁移和同步是非常常见的需求。本文将介绍如何使用Linux和Docker来实现容器的跨主机迁移和同步,并提供一些示例代码供参考。引言容器化技术的兴起使得应用部署和迁移变得更加灵活和高效。在多主机

如何在GitLab中进行项目迁移和集成 如何在GitLab中进行项目迁移和集成 Oct 27, 2023 pm 05:53 PM

如何在GitLab中进行项目迁移和集成引言:在软件开发过程中,项目的迁移和集成是一项重要的任务。GitLab作为一个流行的代码托管平台,提供了一系列方便的工具和功能来支持项目迁移和集成。本文将介绍在GitLab中进行项目迁移和集成的具体步骤,并且提供一些代码示例来帮助读者更好地理解。一、项目迁移项目迁移是将已有的代码库从一个源代码管理系统迁移到GitLab上

db2和oracle语法有什么区别 db2和oracle语法有什么区别 Jul 05, 2023 am 10:39 AM

db2和oracle语法区别:1、SQL语法差异,虽然db2和oracle都使用结构化查询语言,但它们在语法方面存在一些差异;2、db2和oracle拥有不同的数据类型;3、外键约束定义,db2可以定义在创建表时或者使用“ALTER TABLE”语句后添加,oracle需要在创建表时一起定义;4、db2和oracle存储过程和函数的语法也存在一些区别。

使用C++进行云现代化:将遗留应用程序迁移到云端 使用C++进行云现代化:将遗留应用程序迁移到云端 Jun 01, 2024 am 09:21 AM

将遗留C++应用程序迁移至云端的最佳途径:重新平台化:将应用程序代码迁移至云原生平台(如Kubernetes),利用云服务。云化:在云平台上部署应用程序并利用云服务,无需进行代码重构。

微信聊天记录怎么迁移到另一个手机 微信聊天记录怎么迁移到另一个手机 May 08, 2024 am 11:20 AM

1、在旧设备上,依次点击“我”→“设置”→“聊天”→“聊天记录迁移与备份”→“迁移”。2、选择要迁移的目标平台设备,选择需要迁移的聊天记录,点击“开始”。3、在新设备上使用同一微信账号登录并扫描二维码,即可开启聊天记录迁移。

如何在Linux系统中进行服务器迁移 如何在Linux系统中进行服务器迁移 Jun 18, 2023 pm 10:01 PM

在企业IT系统中,服务器迁移是一项经常性的任务,它可以帮助企业提高服务器利用率、满足业务需求、更新硬件设备等。在Linux系统中,进行服务器迁移虽然存在一定的挑战,但是通过合理的规划和实施,可以使这项工作变得简单而又高效。下面,我们将介绍一些在Linux系统中进行服务器迁移的关键步骤。准备工作在进行服务器迁移之前,需要对源服务器和目标服务器进行一些准备工作。

微信如何迁移聊天记录到另一手机 微信如何迁移聊天记录到另一手机 Mar 26, 2024 pm 04:50 PM

通过在旧设备上打开微信、选择“聊天记录迁移与备份”并按照提示操作,用户可以将聊天记录迁移到新设备。迁移过程包括选择需要迁移的聊天、扫描二维码并等待迁移完成。

See all articles