设为首页 收藏本站
查看: 403|回复: 0

[经验分享] Oracle数据库备份与恢复(I)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-5-4 14:04:03 | 显示全部楼层 |阅读模式
1. exp/imp(导出与导入)
1.1 基本命令:
    $exp help=y
    $imp help=y
2.三种工作方式
(1)交互方式:
    $exp //然后按照提示输入所需要的参数
(2)命令行方式:
    $exp user/pwd@dbname file=/oracle/test.dmp full=y
(3)参数文件方式:
    $exp parfile=username.par //在参数中输入所需的参数
    userid=username/userpassword
    buffer=8192000
    compress=n
    grants=y
    file=/oracle/test.dmp
    full=y
3.三种模式
(1)表方式,将指定表的素具导出/导入。
导出:
    导出一张或几张表:
    $exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table,table2
    导出某张表的部分数据:
    $exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1 query\"where coll=\'...\' and col2...;
导入:
    导入一张表或几张表
    $imp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1, table2 fromuser=dbuser touser=dbuser2 commit=y ignore=y
(2)用户方式,将指定用户的所有对象及数据导入/导出
导出:
    $exp user/pwd file=/dir/xxx.dmp log=xxx.log owner=(xx ,yy)
    只导出数据对象,不导出数据:
    $exp user/pwd file=/dir/xxx.dmp log=xxx.log owner=user rows=n
    导入;
    $imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser-dbuser touser=dbuser2 commit=y ignore=y
(3)全库方式,数据库中的所有对象导出/导入
导出:
    $exp user/pwd file=/dir/xxx.dmp log=xxx.log full=y commit=y ignore=y
导入:
    $imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser touser=dbuser2

1.2高级选项
1.分割成多个文件
    以多个文件固定大小文件方式导出:这种做法通常用在表数据量较大,单个dump文件可能会超出文件系统的限定的情况
    $exp user/pwd file=1.dmp, 2.dmp, 3.dmp,...filesize=1000m log=xxx.log full=y
    以多个固定大小文件方式导入:
    $imp user/pwd file=1.dmp,2/dmp, 3.dmp.....filesize=1000m tables=xxx fromuser=dbuser touser=dbuser commit=y ignore=y

2.增量导出/导入
必须为SYS or SYSTEM 才可以增量导出/导入
增量导出:
    (1)“完全”增量导出//备份整个数据库
    $exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=complete
    (2)增量型导出, 导出上一次备份后改变的数据
`    $exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=incremental
    (3)“累计型”增量导出,只导出自上次“完全”导出之后数据库中的变化了的信息
    $exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=cumulative
增量导入:
    $imp user/pwd full=y unctype=system/retore/inctype
    其中:
    system: 导入系统对象
    retore: 导入所有用户对象

3.表空间传输   
    1.关于表空间传输的规则:
        源数据库和目标数据库必须运行在相同的硬件平台
        源数据库与目标数据库一定要有相同到校的数据块
        源数据库与目标数据库一定要有相同大小的数据块
        目标数据库不能有与迁移表空间相同的表空间
        SYS的对象不能迁移
        必须传输自包含的对象集
        有一些对象,如视图,基于函数的索引等不能被传输
    2.检测一个表空间是否符合标准的方法:
        SQL> exec sys.dbms_tts.transport_set_check('tablespace_name', true);
        SQL>select * from sys.transport_set_Violations;
    3.步骤:
        1) 设置表空间为只读(空间名字假设:APP_Data and APP_Index)
        SQl>alter tablespace app_data read only;
        SQL>alter tablespace app_index read only;
        2)发出EXP Command
        SQL>host exp userid=''''''sys/password as sysdba''''''transport_tablespace=y
        tablespaces=(app_data,app_index)
        3)拷贝.dbf数据文件(及.dmp文件)到另一个地点,及目标数据库
        cp(unix) or copy(Win)or 通过ftp传输文件
        4)把本地的表空间设置为读写
        $alter tablespace app_data read write;
        $alter tablespace app_index read write;
        5)在目标数据库附加数据文件(直接指定数据文件名)
        transport_tablespace=y datafiles=("a:\app_data.dbf,C:\app_index.dbf")
        tablespace=app_data,app_index tts_owner=hr,oe
        6)设置目标数据库表空间读写
        $alter tablespace app_data read write
        $alter tablespace app_index read write
4.优化        
    1. 加快exp速度
        加大large_pool_size,可以提高exp 的速度
        采用直接路径的方式(direct=y),数据不需要经过内存进行整合和检查.
        设置较大的buffer,如果导出大对象,小buffer 会失败。
        export文件不在ORACLE 使用的驱动器上
        不要export到NFS 文件系统
        UNIX环境:用管道模式直接导入导出来提高imp/exp 的性能
    2. 加快imp速度
        建立一个indexfile,在数据import完成后在建立索引
        将import 文件放在不同的驱动器上
        增加DB_BLOCK_BUFFERS
        增加LOG_BUFFER
        用非归档方式运行ORACLE:ALTER DATABASE NOARCHIVELOG;
        建立大的表空间和回滚段,OFFLINE 其他回滚段,回滚段的大小为最大表的1/2
        使用COMMIT=N
        使用ANALYZE=N
        单用户模式导入
        UNIX环境:用管道模式直接导入导出来提高imp/exp 的性能
    3. 通过unix/Linux PIPE管道加快exp/imp速度
        通过管道导出数据:
        1.通过mknod -p 建立管道
        $ mknod /home/exppipe p // 在目录/home下建立一个管道exppipe注意参数p
        2.通过exp 和gzip 导出数据到建立的管道并压缩
        $ exp test/test file=/home/exppipe & gzip < /home/exppipe > exp.dmp.gz
        $ exp test/test tables=bitmap file=/home/newsys/test.pipe &
        gzip < /home/newsys/test.pipe > bitmap.dmp.gz
        3.导出成功完成之后删除建立的管道
        $ rm -rf /home/exppipe
    导出脚本:
        ###UNIX 下ORACLE 数据库通过PIPE 管道进行备份
        ###### using "export" and "tar" command to bakup oracle datebase #######
        trap "" 1 #nohup
        LOGFILE=/opt/bakup/log/bakup_ora.log
        export LOGFILE
        DUMPDIR=/archlog_node1
        export DUMPDIR
        exec >$LOGFILE 2>&1
        echo
        echo ' Begin at ' `date`
        echo
        # clear old result file
        cd $DUMPDIR
        if [ -f exp.dmp.Z ]
        then
        echo "clear old result file"
        rm exp.dmp.Z
        fi
        # make pipe
        mkfifo exp.pipe
        chmod a+rw exp.pipe
        # gain the dmp.Z file
        compress < exp.pipe > exp.dmp.Z&
        su -u oracle -c "exp userid=ll/ll file=$DUMPDIR/exp.pipe full=y buffer=20000000
        echo
        echo ' exp end at '`date`
        echo
        # rm pipe
        rm exp.pipe
        # tar the dmp.Z file to tape
        mt -f /dev/rmt/0 rew
        tar cvf /dev/rmt/0 exp.dmp.Z
        echo
        echo ' tar end at '`date`
        echo
    通过管道导入生成的文件:
        1.通过mknod -p 建立管道
        $ mknod /home/exppipe p
        2.导入生成的压缩文件
        $ imp test/test file=/home/exppipe fromuser=test touser=macro &
        gunzip < exp.dmp.gz > /home/exppipe
        3.删除管道
        $ rm –fr /home/exppipe
    4. 全库导入的一般步骤
        注意:在导出时,需要通过toad或其他工具提取源数据库创建主键和索引的脚本
        1. 先全库加rows=n把结构导进去
            $ imp system/manager file=exp.dmp log=imp.log full=y rows=n indexes=n
        2. 使业务用户的触发器失效/删除主键和唯一索引
            spool drop_pk_u.sql
            select 'alter table '||table_name||' drop constraint '||constraint_name||';'
            from user_constraints
            where constraint_type in ('P','U');
            /
            spool off
            spool disable_trigger.sql
            select 'alter trigger '||trigger_name||' disable;'
            from user_triggers;
            /
            spool off
            @drop_pk_u.sql
            @disable_trigger.sql
        3. 以ignore=y全库导入
            $ imp system/manager file=exp.dmp log=imp.log full=y ignore=y
        4. 通过toad或其他工具提取源数据库创建主键和索引的脚本,在目标数据库中创建主键和索引。使触发器生效。
        5. 版本问题
            Exp/Imp 很多时候,可以跨版本使用,如在版本7与版本8 之间导出导入数据,但这样做必须选择正确的版             本,规则为:
            ·总是使用IMP 的版本匹配数据库的版本,如果要导入到816,则使用816 的导入工具。
            ·总是使用EXP的版本匹配两个数据库中低的那个版本,如在815 与816之间互导,则使用815的EXP工具。
            imp 和exp 版本不能往上兼容: imp 可以导入低版本exp 生成的文件, 不能导入高
            版本exp 生成的文件


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-18605-1-1.html 上篇帖子: oracle数据库的静默状态 下篇帖子: Oracle数据库备份与恢复(II)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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