dmp oracle python读取 - CSDN
精华内容
参与话题
  • 通过pythonoracle导出导入语句打包 这样的话就可以把所有的dmp文件都放到某个目录下,一次性都导入了。哈哈哈。 # -*- coding:utf-8 -*- """ 导入全量dmp进入数据库 """ import os dirname = "/app/balabala/...

    通过python将oracle导出导入语句打包
    这样的话就可以把所有的dmp文件都放到某个目录下,一次性都导入了。哈哈哈。

    # -*- coding:utf-8 -*-
    """
    导入全量dmp进入数据库
    """
    import os
    dirname = "/app/balabala/object_dir"
    if __name__ == "__main__":
    	for filename in os.listdir(dirname):
    		dir_file = os.path.join(dirname, filename)
    		run_obj = "imp username/password@database file=" + dir_file + " buffer = 67108864 feedback = 100000 statistics=none rows=y ignore=y"
    		os.system(run_obj)
    
    展开全文
  • 由于RDS(oracle)不直接支持SSH,FTP(基于安全因素吧).所以原有系统expdp或exp出来的dmp文件,不能直接导入到RDS中...查找各种文档发现,可以通过Oracle自身的UTL_FILE包来写dmp文件到RDS的文件夹里,读取EC2里的本地...

    由于RDS(oracle)不直接支持SSH,FTP(基于安全因素吧).所以原有系统expdp或exp出来的dmp文件,不能直接导入到RDS中。官方文档里建议通过networklink或者dblink的方式 从原有数据库迁移到RDS,考虑到网络和安全因素,此方法暂被忽略掉。

    查找各种文档发现,可以通过Oracle自身的UTL_FILE包来写dmp文件到RDS的文件夹里,读取EC2里的本地文件部分通过Python脚本实现,这样变相实现了,从EC2本地上传到RDS的功能。

    代码如下:

    def cpy_to_rds():
        file_name = 'test4.dmp'
        src_name = 'c:/testdata/test4.dmp'
        #在RDS,DATA_PUMP_DIR下新建或者覆盖一个空文件
        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;"
        #写入RDS
        UTL_FILE_CREATE_FILE = "DECLARE " \
                               "fi UTL_FILE.FILE_TYPE; " \
                               "v_buffer RAW(32760); " \
                               "BEGIN " \
                               "v_buffer:= hextoraw('{1}') ; " \
                               "fi:=UTL_FILE.fopen('DATA_PUMP_DIR','{0}','ab');" \
                               "UTL_FILE.put_raw(fi,v_buffer);" \
                               "UTL_FILE.fclose(fi); " \
                               "END;"
    
        con = cx_Oracle.connect('User/Password@SID')
        cur = con.cursor()
        # 在RDS,DATA_PUMP_DIR下新建或者覆盖一个空文件
        cur.execute(UTL_FILE_NEW_FILE.format(file_name))
        chunk = 3000
        f = open(src_name, 'rb')
        line = f.read(chunk)
        # 写入RDS
        cur.execute(UTL_FILE_CREATE_FILE.format(file_name, line.hex()))
        while (len(line)) > 0:
            line = f.read(chunk)
            # 写入RDS
            cur.execute(UTL_FILE_CREATE_FILE.format(file_name, line.hex()))
        cur.close()
        con.close()

    需要注意的是chunk设置不能为32760。

    UTL_FILE_CREATE_FILE语句也可以转换为RDS中的一个Function函数:

    create or replace function gen_dmp(i_name IN VARCHAR2, i_buffer IN RAW ) return varchar2 is
    begin
    declare
    v_file  utl_file.file_type;
    begin
    v_file:=utl_file.fopen('DATA_PUMP_DIR',i_name,'ab');
    utl_file.put_raw(v_file,i_buffer);
    utl_file.fclose(v_file);
    return 'OK';
    end;
    end;

    在Python中调用此函数,这样chunk就可以设置到32767最大值了.

    def cpy_to_rds_func():
        file_name = 'tes4.dmp'
        src_name = 'c:/testdata/test4.dmp'
        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;"
        con = cx_Oracle.connect('User/Password@SID')
        cur = con.cursor()
        cur.execute(UTL_FILE_NEW_FILE.format(file_name))
        chunk = 32760
        f = open(src_name, 'rb')
        line = f.read(chunk)
        cur.callfunc('gen_dmp', cx_Oracle.STRING, (file_name, line))
        while (len(line)) > 0:
            line = f.read(chunk)
            cur.callfunc('gen_dmp', cx_Oracle.STRING, (file_name, line))
        cur.close()
        con.close()

     

    参考链接:

    https://stackoverflow.com/questions/23486198/how-to-import-oracle-dump-from-ec2-instance-to-rds-in-aws

    https://github.com/quentinhardy/odat/blob/master/UtlFile.py

    转载于:https://www.cnblogs.com/dl-ekong/p/8557064.html

    展开全文
  • 文章目录数据泵导出导入EXPDP导出导出表导出方案中的对象导出表空间导出整个数据库导出对象中的数据条件导出IMPDP数据导入导入schema所有对象导入表空间所有对象...将转储文件中的元数据及其数据导入到Oracle数据中...

    数据泵导出导入

    1. EXPDP导出数据:
      将数据库对象的表、用户方案、表空间、空间数据导出到转储文件中。
      EXPDP是服务端工具,客户端无法使用。
    2. IMPDP导入工具:
      将转储文件中的元数据及其数据导入到Oracle数据中

    优点:

    EXPDP导出

    1)由于只能将导出的转储文件放在DIRECTORY对象对应的OD目录中,而不能指定。所以需要先建立DIRECTORY对象,并且具有使用DIRECTORY对象的权限。
    2) 导出其他用户方案中的表,需要有DBA或者EXP_FULL_DATABASE角色
    3) 一次只能导出一个方案中的表

    实例:
    创建一个DIRECTORY对象,并授予SCOTT使用权限

    #  d:\app\dump  目录是需要提前建好的
    # 这里的 create directory只是建立逻辑对象
    SQL> create directory dump_dir as 'd:\app\dump';
    SQL> grant read,write on directory dump_dir to scott;
    

    导出表

    实例:
    导出scott用户的emp和dept表到转出文件tab.dmp

    D:\app>expdp scott/password directory=dump_dir dumpfile=tab.dmp tables=emp,dept
    

    导出方案中的对象

    • 用户需具有DBAEXP_FULL_DATABASE角色

    实例:
    将scott,hr方案中的所有对象存储到文件schema.dmp中

    D:\app>expdp scott/password directory=dump_dir dumpfile=schema.dmp schemas=scott,hr
    

    导出表空间

    • 导出表空间是指将一个或多个表空间中的所有对象即数据存储到转储文件中;
    • 用户需具有DBAEXP_FULL_DATABASE角色
    • 创建表空间 tbsp_1 :create TABLESPACE TBSP_1 DATAFILE 'D:\app\Administrator\oradata\oracle\tbsp_1.dbf' SIZE 10M;
      实例:
      通过EXPDP导出表空间tbsp_1;
    D:\app>expdp scott/password  directory=dump_dir dumpfile=tablespace.dmp schemas=tbsp_1
    

    导出整个数据库

    • 即将数据库的所有对象及数据存储到转储文件中
    • 用户必须具有DBA或EXP_FULL_DATABASE角色
    • 导出数据库不会导出SYS 、ORDSYS、ORDPLUGINS、CTXSYS、MDSYS、LBACSYS、以及XDB等方案中的对象

    实例:
    导出整个数据库

    D:\app>expdp scott/password directory=dump_dir dumpfile=fulldatabase.dmp full=y
    

    导出对象中的数据

    content参数,默认值为 ALL

    • all:导出对象定义及其所有数据
    • data_only:只导出对象数据
    • metadata_only:只导出对象定义

    EXPDP HELP 命令,可了解其各个参数的信息

    D:\app>expdp scott/password directory=dump_dir dumpfile=content.dmp content=data_only
    

    条件导出

    query参数,指定过滤导出数据的where条件
    语法:

    query=[schema.][table_name:]query_clause
    
    • schema:指定方案名
    • table_name:指定表名
    • query_caluse:制定条件限制语句
      —该参数不能与content=metadata_only extimate_only、transport_tablespaces等参数同时使用

    实例:
    通过QUERY参数过滤导出dept表中部门编号为10的数据

    D:\app>expdp scott/password directory=dump_dir dumpfile=query.dump tables=emp query='where deptno=10 '
    

    IMPDP数据导入

    dump_dir 需要在此用户下创建好:

    SQL> create directory dump_dir as 'd:\app\dump';
    

    导入表

    • 导入表是指:将存放在转储文件中的一个或多个表的结构及数据装载到数据库中
    • 以其他用户导入表,用户需具有IMP_FULL_DATABASEDBA角色,
    • 导入其他schema(方案)时,指定REMAP_SHEMA参数

    remap_schema=scott:sys:将源schema—scott的所有对象 装载到目标schema—sys的目标方案中
    实例:
    将Scott的dept、emp表导入到SYSTEM方案中

    D:\app>impdp  "'sys/password@oracle as sysdba'" directory=dump_dir dumpfile=tab.dmp tables=scott.emp remap_schema=scott:sys
    

    用户角色验证时,由于sys是dba用户,所以不能简单地用用户名和密码登陆
    正确语法是:sys/password@oracle as sysdba
    这样才不会出现以下报错:

    DI-28009: 操作产生了 ORACLE 错误 28009
    ORA-28009: connection as SYS should be as SYSDBA or SYSOPER
    
    用户名:
    UDI-00005: 读取输入值时出现意外的文件结尾。
    

    导入表空间所有对象

    即将 存放在转储文件中的一个或多个表空间中的所有对象装载到数据库中。
    参数:tablespace

    实例:
    将tbsp_1表空间中的所有对象都导入到当前的数据库中

    D:\app>impdp  "'sys/password@oracle as sysdba'" directory=dump_dir dumpfile=tablespace.dmp tablespace=tbsp_1
    

    导入全数据库

    即将 存放在转储文件中的所有数据库对象及相关数据装载到数据库中。
    参数:full

    实例:
    从 fulldatabase.dmp 文件中导入全数据库

    D:\app>impdp  "'sys/password@oracle as sysdba'" directory=dump_dir dumpfile=fulldatabase.dmp full=y
    

    移动表空间时导入数据文件

    IMPDP参数:

    1. REMAP_SCHEMA
      =SOURCE_SCHEMA:TARGET_SCHEMA
      将源方案中所有对象转载到目标方案中;
    2. REMAP_TABLESPACE
      =SOURCE_TABLESPACE:TARGET_TABLESPACE
      指定导入时更改表空间名称;
    3. SQLFILE
      =[DIRECTORY_OBJECT:]FILE_NAME
      FILE_NAME表示包含DDL语句的文件,IMPDP只是从DMP文件中提取对象的DDL语句写入到SQL脚本,并不导入数据;
    4. TABLE_EXISTS_ACTION
      ={SKIP|APPEND|TRUNCATE|REPLACE}
      用于指定当表已经存在时导入作业要执行的操作,默认为SKIP
      • skip:跳过已存在表处理下一对象
      • append:追加数据
      • truncate:截断表,追加新数据
      • replace:删除已存在表,重建后追加新数据
    5. TRANSPORT_DATAFILES
      =DATAFILE_NAME
      指定被复制到目标数据库的数据文件

    EXCEL文件导入Oracle(python脚本导入)

    详情参照《EXCEL文件导入Oracle(python脚本导入)

    展开全文
  • 如何打开Oracledmp文件

    万次阅读 2015-11-12 16:24:58
    在工作中经常使用到别人提供过来的dmp文件,由于不...1、如果dmp文件比较小,用文本编辑器打开就可以了。   2、如果dmp特别大,可以通过toad工具打开。在database/export/exert file browse浏览要打开的dmp即可。

    在工作中经常使用到别人提供过来的dmp文件,由于不知道备份时所用的用户名,这样就不能恢复。

    通过打开DMP文件可以查看到备份时使用的用户名。

     

    1、如果dmp文件比较小,用文本编辑器打开就可以了。

     

    2、如果dmp特别大,可以通过toad工具打开。在database/export/exert file browse浏览要打开的dmp即可。

    展开全文
  • 由于一些特殊的原因,我们可能需要向oracle中导入大量的dmp文件,我本次导入的dmp文件量为115个,总计45.4G。 我选择用python编写批量导入脚本进行导入,不想在plsql中点三四百多次。 你最好准备一包喝茶瓜子和一杯...
  • Oracle数据库运维、备份常用指令

    千次阅读 2016-12-29 12:50:28
    Oracle数据库运维、备份常用指令1. Oracle数据泵备份导出1.1 准备工作在linux系统下创建导出结果存放的文件夹,切记要切换到oracle用户创建,否则会出现权限问题。su - oracle mkdir /home/oracle/dwcr_dumps如果...
  • PLSQL导入导出表的正确步骤

    千次阅读 2015-07-20 16:13:34
    原来总是直接 tools->import talbes->Oracle Import结果发现有的时候会出错:有的表不能正确导入, baidu+googel解决办法如下: 导出步骤: 1 tools ->export user object 选择选项,导出.sql文件 2 tools ->...
  • 上周在客户现场做了oracle数据备份保留7天的脚本,先记录起来,方便日后查阅!!!! create or replace directory DIR_DP as 'G:\zsoms\datafile'; --DIR_DP路径名 #DIR_DP路径名 create or replace directory ...
  • 其实可以每段语句那么去写,but有时候需要导入的表有点多,所以可以把要导入的表放到一个目录下,就可以一次性...dirname = '/app/appsystems/dmp' if __name__ == '__main__': for filename in os.listdir(dirname):
  • oracle导入导出表

    2019-06-15 04:38:57
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 环境:Python3.x+cx_Oracle6.x  结论:只要 客户端的NLS_LANG设置与oracle数据库服务器的一致,且NLS_LANG不为WE8ISO8859P1,则汉字显示正常。  故有必要将字符集为WE8ISO8859P1的oracle数据库,改为ZHS16GBK、...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • oracle中expdp的使用

    2019-06-14 10:24:53
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • linux相关的东东,来自dbanotes

    万次阅读 2007-09-14 21:04:00
    原贴:http://www.dbanotes.net/MT/mt-search.cgiSearch this siteMatching entries matching “linux” from DBA notes Fotolog.com 的技术信息拾零尽管是世界上最大的图片服务网站, Fotolog.com 在国内的名气并不是...
  • 想象如下一个场景,一个合作伙伴想让你分析一下自己的业务数据,比较慷慨的给出了数据全库。但是对方的IT 人员没有精力去协助我们逐个了解...下面就以Oracle 为例,使用python 进行全库数据描述性及探索性逆向分析。
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
1 2 3 4 5 ... 8
收藏数 144
精华内容 57
热门标签
关键字:

dmp oracle python读取