{"id":36436,"date":"2024-11-26T15:57:06","date_gmt":"2024-11-26T07:57:06","guid":{"rendered":"https:\/\/fwq.ai\/blog\/36436\/"},"modified":"2024-11-26T15:57:06","modified_gmt":"2024-11-26T07:57:06","slug":"python%e5%a6%82%e4%bd%95%e5%b0%86dmp%e6%96%b9%e6%b3%95%e5%86%99%e5%85%a5aws-rds-oracle%e4%b8%ad","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/36436\/","title":{"rendered":"Python\u5982\u4f55\u5c06DMP\u65b9\u6cd5\u5199\u5165AWS RDS Oracle\u4e2d"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/465\/014\/172682680943679.jpg\" class=\"aligncenter\" title=\"Python\u5982\u4f55\u5c06DMP\u65b9\u6cd5\u5199\u5165AWS RDS Oracle\u4e2d\u63d2\u56fe\" alt=\"Python\u5982\u4f55\u5c06DMP\u65b9\u6cd5\u5199\u5165AWS RDS Oracle\u4e2d\u63d2\u56fe\" \/><\/p>\n<p>\u7531\u4e8eRDS(Oracle)\u4e0d\u76f4\u63a5\u652f\u6301SSH\uff0cFTP(\u57fa\u4e8e\u5b89\u5168\u56e0\u7d20\u5427).\u6240\u4ee5\u539f\u6709\u7cfb\u7edfexpdp\u6216exp\u51fa\u6765\u7684dmp\u6587\u4ef6\uff0c\u4e0d\u80fd\u76f4\u63a5\u5bfc\u5165\u5230RDS\u4e2d\u3002\u5b98\u65b9\u6587\u6863\u91cc\u5efa\u8bae\u901a\u8fc7networklink\u6216\u8005dblink\u7684\u65b9\u5f0f \u4ece\u539f\u6709\u6570\u636e\u5e93\u8fc1\u79fb\u5230RDS\uff0c\u8003\u8651\u5230\u7f51\u7edc\u548c\u5b89\u5168\u56e0\u7d20\uff0c\u6b64\u65b9\u6cd5\u6682\u88ab\u5ffd\u7565\u6389\u3002\u67e5\u627e\u5404\u79cd\u6587\u6863\u53d1\u73b0\uff0c\u53ef\u4ee5\u901a\u8fc7Oracle\u81ea\u8eab\u7684UTL_FILE\u5305\u6765\u5199dmp\u6587\u4ef6\u5230RDS\u7684\u6587\u4ef6\u5939\u91cc\uff0c\u8bfb\u53d6EC2\u91cc\u7684\u672c\u5730\u6587\u4ef6\u90e8\u5206\u901a\u8fc7Python\u811a\u672c\u5b9e\u73b0\uff0c\u8fd9\u6837\u53d8\u76f8\u5b9e\u73b0\u4e86\uff0c\u4eceEC2\u672c\u5730\u4e0a\u4f20\u5230RDS\u7684\u529f\u80fd\u3002<\/p>\n<p>\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre>def cpy_to_rds():\n&nbsp; &nbsp; file_name = 'test4.dmp'\n&nbsp; &nbsp; src_name = 'c:\/testdata\/test4.dmp'\n&nbsp; &nbsp; #\u5728RDS,DATA_PUMP_DIR\u4e0b\u65b0\u5efa\u6216\u8005\u8986\u76d6\u4e00\u4e2a\u7a7a\u6587\u4ef6\n&nbsp; &nbsp; UTL_FILE_NEW_FILE = \"DECLARE fi UTL_FILE.FILE_TYPE; BEGIN fi:=UTL_FILE.fopen('DATA_PUMP_DIR','{0}','wb',32766); UTL_FILE.fclose(fi); END;\"\n&nbsp; &nbsp; #\u5199\u5165RDS\n&nbsp; &nbsp; UTL_FILE_CREATE_FILE = \"DECLARE \" \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \"fi UTL_FILE.FILE_TYPE; \" \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \"v_buffer RAW(32760); \" \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \"BEGIN \" \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \"v_buffer:= hextoraw('{1}') ; \" \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \"fi:=UTL_FILE.fopen('DATA_PUMP_DIR','{0}','ab');\" \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \"UTL_FILE.put_raw(fi,v_buffer);\" \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \"UTL_FILE.fclose(fi); \" \n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \"END;\"\n\n&nbsp; &nbsp; con = cx_Oracle.connect('User\/Password@SID')\n&nbsp; &nbsp; cur = con.cursor()\n&nbsp; &nbsp; # \u5728RDS,DATA_PUMP_DIR\u4e0b\u65b0\u5efa\u6216\u8005\u8986\u76d6\u4e00\u4e2a\u7a7a\u6587\u4ef6\n&nbsp; &nbsp; cur.execute(UTL_FILE_NEW_FILE.format(file_name))\n&nbsp; &nbsp; chunk = 3000\n&nbsp; &nbsp; f = open(src_name, 'rb')\n&nbsp; &nbsp; line = f.read(chunk)\n&nbsp; &nbsp; # \u5199\u5165RDS\n&nbsp; &nbsp; cur.execute(UTL_FILE_CREATE_FILE.format(file_name, line.hex()))\n&nbsp; &nbsp; while (len(line)) &gt; 0:\n&nbsp; &nbsp; &nbsp; &nbsp; line = f.read(chunk)\n&nbsp; &nbsp; &nbsp; &nbsp; # \u5199\u5165RDS\n&nbsp; &nbsp; &nbsp; &nbsp; cur.execute(UTL_FILE_CREATE_FILE.format(file_name, line.hex()))\n&nbsp; &nbsp; cur.close()\n&nbsp; &nbsp; con.close()<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662fchunk\u8bbe\u7f6e\u4e0d\u80fd\u4e3a32760\u3002UTL_FILE_CREATE_FILE\u8bed\u53e5\u4e5f\u53ef\u4ee5\u8f6c\u6362\u4e3aRDS\u4e2d\u7684\u4e00\u4e2aFunction\u51fd\u6570:<\/p>\n<pre>create or replace function gen_dmp(i_name IN VARCHAR2, i_buffer IN RAW ) return varchar2 is\nbegin\ndeclare\nv_file&nbsp; utl_file.file_type;\nbegin\nv_file:=utl_file.fopen('DATA_PUMP_DIR',i_name,'ab');\nutl_file.put_raw(v_file,i_buffer);\nutl_file.fclose(v_file);\nreturn 'OK';\nend;\nend;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u5728Python\u4e2d\u8c03\u7528\u6b64\u51fd\u6570\uff0c\u8fd9\u6837chunk\u5c31\u53ef\u4ee5\u8bbe\u7f6e\u523032767\u6700\u5927\u503c\u4e86.<\/p>\n<p><span>\u7acb\u5373\u5b66\u4e60<\/span>\u201c\u201d\uff1b<\/p>\n<pre>def cpy_to_rds_func():\n&nbsp; &nbsp; file_name = 'tes4.dmp'\n&nbsp; &nbsp; src_name = 'c:\/testdata\/test4.dmp'\n&nbsp; &nbsp; UTL_FILE_NEW_FILE = \"DECLARE fi UTL_FILE.FILE_TYPE; BEGIN fi:=UTL_FILE.fopen('DATA_PUMP_DIR','{0}','wb',32766); UTL_FILE.fclose(fi); END;\"\n&nbsp; &nbsp; con = cx_Oracle.connect('User\/Password@SID')\n&nbsp; &nbsp; cur = con.cursor()\n&nbsp; &nbsp; cur.execute(UTL_FILE_NEW_FILE.format(file_name))\n&nbsp; &nbsp; chunk = 32760\n&nbsp; &nbsp; f = open(src_name, 'rb')\n&nbsp; &nbsp; line = f.read(chunk)\n&nbsp; &nbsp; cur.callfunc('gen_dmp', cx_Oracle.STRING, (file_name, line))\n&nbsp; &nbsp; while (len(line)) &gt; 0:\n&nbsp; &nbsp; &nbsp; &nbsp; line = f.read(chunk)\n&nbsp; &nbsp; &nbsp; &nbsp; cur.callfunc('gen_dmp', cx_Oracle.STRING, (file_name, line))\n&nbsp; &nbsp; cur.close()\n&nbsp; &nbsp; con.close()<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u4ee5\u4e0a\u5c31\u662fPython\u5982\u4f55\u5c06DMP\u65b9\u6cd5\u5199\u5165AWS RDS Oracle\u4e2d\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7531\u4e8eRDS(Oracle)\u4e0d\u76f4\u63a5\u652f\u6301SSH\uff0cFTP(\u57fa\u4e8e\u5b89\u5168\u56e0\u7d20\u5427).\u6240\u4ee5\u539f\u6709\u7cfb\u7edfexpdp\u6216exp\u51fa\u6765\u7684dmp\u6587\u4ef6\uff0c\u4e0d\u80fd\u76f4\u63a5\u5bfc\u5165\u5230RDS\u4e2d\u3002\u5b98\u65b9\u6587\u6863\u91cc\u5efa\u8bae\u901a\u8fc7networklink\u6216\u8005dblink\u7684\u65b9\u5f0f \u4ece\u539f\u6709\u6570\u636e\u5e93\u8fc1\u79fb\u5230RDS\uff0c\u8003\u8651\u5230\u7f51\u7edc\u548c\u5b89\u5168\u56e0\u7d20\uff0c\u6b64\u65b9\u6cd5\u6682\u88ab\u5ffd\u7565\u6389\u3002\u67e5\u627e\u5404\u79cd\u6587\u6863\u53d1\u73b0\uff0c\u53ef\u4ee5\u901a\u8fc7Oracle\u81ea\u8eab\u7684UTL_FILE\u5305\u6765\u5199dmp\u6587\u4ef6\u5230RDS\u7684\u6587\u4ef6\u5939\u91cc\uff0c\u8bfb\u53d6EC2\u91cc\u7684\u672c\u5730\u6587\u4ef6\u90e8\u5206\u901a\u8fc7Python\u811a\u672c\u5b9e\u73b0\uff0c\u8fd9\u6837\u53d8\u76f8\u5b9e\u73b0\u4e86\uff0c\u4eceEC2\u672c\u5730\u4e0a\u4f20\u5230RDS\u7684\u529f\u80fd\u3002 \u4ee3\u7801\u5982\u4e0b: def cpy_to_rds(): &nbsp; &nbsp; file_name = &#8216;test4.dmp&#8217; &nbsp; &nbsp; src_name = &#8216;c:\/testdata\/test4.dmp&#8217; &nbsp; &nbsp; #\u5728RDS,DATA_PUMP_DIR\u4e0b\u65b0\u5efa\u6216\u8005\u8986\u76d6\u4e00\u4e2a\u7a7a\u6587\u4ef6 &nbsp; &nbsp; UTL_FILE_NEW_FILE = &#8220;DECLARE fi UTL_FILE.FILE_TYPE; BEGIN fi:=UTL_FILE.fopen(&#8216;DATA_PUMP_DIR&#8217;,'{0}&#8217;,&#8217;wb&#8217;,32766); UTL_FILE.fclose(fi); END;&#8221; &nbsp; &nbsp; #\u5199\u5165RDS &nbsp; &nbsp; UTL_FILE_CREATE_FILE = &#8220;DECLARE &#8221; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;fi UTL_FILE.FILE_TYPE; &#8221; &nbsp; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-36436","post","type-post","status-publish","format-standard","hentry","category-os"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/36436","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=36436"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/36436\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=36436"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=36436"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=36436"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}