本地oracle数据导出到另一台机子的oracle
你数据库对应的用户是不同的吧,根据用户导出就行了! ?
? ?
? ?
? 当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(包括机器故障、介质故障、误操作等),数据库有时也可能遭到破坏,这时如何尽快恢复数据就成为当务之急。如果平时对数据库做了备份,那么此时恢复数据就显得很容易。由此可见,做好数据库的备份是多么的重要,下面笔者就以ORACLE7为例,来讲述一下数据库的备份和恢复。ORACLE ? 数据库有三种标准的备份方法,它们分别为导出/导入(EXPORT/IMPORT)、冷备份、热备份。导出备份是一种逻辑备份,冷备份和热备份是物理备份。 ? ?
? ?
? ---- ? 一、 ? 导出/导入(Export/Import) ? ?
? ?
? ---- ? 利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回Oracle数据库中去。 ? ?
? ?
? ---- ? 1. ? 简单导出数据(Export)和导入数据(Import) ? ?
? ?
? ---- ? Oracle支持三种类型的输出: ? ?
? ?
? ---- ? (1)表方式(T方式),将指定表的数据导出。 ? ?
? ?
? ---- ? (2)用户方式(U方式),将指定用户的所有对象及数据导出。 ? ?
? ?
? ---- ? (3)全库方式(Full方式),将数据库中的所有对象导出。 ? ?
? ?
? ---- ? 数据导出(Import)的过程是数据导入(Export)的逆过程,它们的数据流向不同。 ? ?
? ?
? ---- ? 2. ? 增量导出/导入 ? ?
? ?
? ---- ? 增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。 ? ?
? ?
? ---- ? 增量导出包括三个类型: ? ?
? ?
? ---- ? (1)“完全”增量导出(Complete) ? ?
? ?
? ---- ? 即备份整个数据库,比如: ? ?
? ?
? ---- ? $exp ? system/manager ? inctype=complete ? file=990702.dmp ? ?
? ?
? ---- ? (2) ? “增量型”增量导出 ? ?
? ?
? ---- ? 备份上一次备份后改变的数据。比如: ? ?
? ?
? ---- ? $exp ? system/manager ? inctype=incremental ? file=990702.dmp ? ?
? ?
? ---- ? (3) ? “累计型”增量导出(Cumulative) ? ?
? ?
? ---- ? 累计型导出方式只是导出自上次“完全” ? 导出之后数据库中变化了的信息。比如: ? ?
? ?
? ---- ? $exp ? system/manager ? inctype=cumulative ? file=990702.dmp ? ?
? ?
? ---- ? 数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效地完成。 ? ?
? ?
? ---- ? 比如数据库的备份任务可作如下安排: ? ?
? ?
? ---- ? 星期一:完全导出(A) ? ?
? ?
? ---- ? 星期二:增量导出(B) ? ?
? ?
? ---- ? 星期三:增量导出(C) ? ?
? ?
? ---- ? 星期四:增量导出(D) ? ?
? ?
? ---- ? 星期五:累计导出(E) ? ?
? ?
? ---- ? 星期六:增量导出(F) ? ?
? ?
? ---- ? 星期日:增量导出(G) ? ?
? ?
? ---- ? 如果在星期日,数据库遭到意外破坏,数据库管理员可按以下步骤来恢复数据库: ? ?
? ?
? ---- ? 第一步:用命令CREATE ? DATABASE重新生成数据库结构; ? ?
? ?
? ---- ? 第二步:创建一个足够大的附加回段。 ? ?
? ?
? ---- ? 第三步:完全增量导入A: ? ?
? ?
? ---- ? $imp ? system./manager ? inctype= ? RECTORE ? FULL=Y ? FILE=A ? ?
? ?
? ---- ? 第四步:累计增量导入E: ? ?
? ?
? ---- ? $imp ? system/manager ? inctype= ? RECTORE ? FULL=Y ? FILE ? =E ? ?
? ?
? ---- ? 第五步:最近增量导入F: ? ?
? ?
? ---- ? $imp ? system/manager ? inctype=RESTORE ? FULL=Y ? FILE=F????
二、 ? 冷备份 ? ?
? ?
? ---- ? 冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份Oracle信息而言,冷备份是最快和最安全的方法。冷备份的优点是: ? ?
? ?
? ---- ? 1.是非常快速的备份方法(只需拷贝文件) ? ?
? ?
? ---- ? 2.容易归档(简单拷贝即可) ? ?
? ?
? ---- ? 3.容易恢复到某个时间点上(只需将文件再拷贝回去) ? ?
? ?
? ---- ? 4.能与归档方法相结合,作数据库“最新状态”的恢复。 ? ?
? ?
? ---- ? 5.低度维护,高度安全。 ? ?
? ?
? ---- ? 但冷备份也有如下不足: ? ?
? ?
? ---- ? 1.单独使用时,只能提供到“某一时间点上”的恢复。 ? ?
? ?
? ---- ? 2.在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。 ? ?
? ?
? ---- ? 3.若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。 ? ?
? ?
? ---- ? 4.不能按表或按用户恢复。 ? ?
? ?
? ---- ? 如果可能的话(主要看效率),应将信息备份到磁盘上,然后启动数据库(使用户可以工作)并将所备份的信息拷贝到磁带上(拷贝的同时,数据库也可以工作)。冷备份中必须拷贝的文件包括: ? ?
? ?
? ---- ? 1.所有数据文件 ? ?
? ?
? ---- ? 2.所有控制文件 ? ?
? ?
? ---- ? 3.所有联机REDO ? LOG文件 ? ?
? ?
? ---- ? 4.Init.ora文件(可选)。 ? ?
? ?
? ---- ? 值得注意的是冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的 ? ?
? ?
? ---- ? 下面是做冷备份的完整例子: ? ?
? ?
? ---- ? (1) ? 关闭数据库$sqldba ? lmode=y ? ?
? ?
? ---- ? SQLDBA ? >connect ? internal; ? ?
? ?
? ---- ? SQLDBA ? >shutdown ? normal; ? ?
? ?
? ---- ? (2) ? 用拷贝命令备份全部的时间文件、重做日志文件、控制文件、初始化参数文件 ? ?
? ?
? ---- ? SQLDBA ? >! ? cp ? < ? file ? > ? <; ? backup ? directory ? > ? ?
? ?
? ?
? ---- ? (3) ? 重启Oracle数据库 ? ?
? ?
? ---- ? $sqldba ? lmode=y ? ?
? ?
? ---- ? SQLDBA ? >connect ? internal; ? ?
? ?
? ---- ? SQLDBA ? >startup;????
?
?
?
?
?
?
?
exp/imp导出导入工具的使用 ? ?
? ?
? 2004-02 ? 余枫 ?
? ?
? 一. ? 导出工具 ? exp ?
? ?
? 1. ? 它是操作系统下一个可执行的文件 ? 存放目录/ORACLE_HOME/bin ?
? ?
? ? ? ? exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移 ?
? ? ? ? ?
? ? ? ? 它有三种模式: ?
? ? ? ? ? ? ? ? a. ? ? 用户模式: 导出用户所有对象以及对象中的数据; ?
? ? ? ? ? ? ? ? b. ? ? 表模式: 导出用户所有表或者指定的表; ?
? ? ? ? ? ? ? ? c. ? ? 整个数据库: 导出数据库中所有对象。 ?
? ?
? 2. ? 导出工具exp交互式命令行方式的使用的例子 ?
? ?
? $exp ? test/test123@appdb ?
? Enter ? array ? fetch ? buffer ? size: ? 4096 ? > ? 回车 ?
? Export ? file: ? expdat.dmp ? > ? m.dmp ? ? 生成导出的文件名 ? ?
? (1)E(ntire ? database), ? (2)U(sers), ? or ? (3)T(ables): ? (2)U ? > ? 3 ?
? Export ? table ? data ? (yes/no): ? yes ? > ? 回车 ?
? Compress ? extents ? (yes/no): ? yes ? > ? 回车 ?
? Export ? done ? in ? ZHS16GBK ? character ? set ? and ? ZHS16GBK ? NCHAR ? character ? set ?
? About ? to ? export ? specified ? tables ? via ? Conventional ? Path ? ... ?
? Table(T) ? or ? Partition(T:P) ? to ? be ? exported: ? (RETURN ? to ? quit) ? > ? cmamenu ? ? 要导出的表名 ?
? . ? . ? exporting ? table ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CMAMENU ? ? ? ? ? ? ? 4336 ? rows ? exported ?
? Table(T) ? or ? Partition(T:P) ? to ? be ? exported: ? (RETURN ? to ? quit) ? >要导出的表名n ?
? Table(T) ? or ? Partition(T:P) ? to ? be ? exported: ? (RETURN ? to ? quit) ? > ? 回车 ?
? Export ? terminated ? successfully ? without ? warnings. ? ?
? ?
? 3. ? 导出工具exp非交互式命令行方式的例子 ?
? ?
? $exp ? scott/tiger ? tables=(emp,dept) ? file=/directory/scott.dmp ? grants=y ? ?
? ?
? 说明:把scott用户里两个表emp,dept导出到文件/directory/scott.dmp ?
? ?
? $exp ? scott/tiger ? tables=emp ? query="where ? job=\'salesman\' ? and ? sal\<1600" ? file=/directory/scott2.dmp ? ?
? ?
? 说明:在exp里面加上导出emp的查询条件job='salesman' ? and ? sal<1600 ?
? ? ? ? ? ?
? ? ? ? ? (但我个人很少这样用,还是把满足条件的记录生成临时表后,再exp会方便一些) ?
? ?
? $exp ? parfile=username.par ? file=/directory1/username_1.dmp,/directory1/username_2.dmp ? filesize=2000M ? log=/directory2/username_exp.log ?
? ?
? 参数文件username.par内容 ?
? userid=username/userpassword ?
? buffer=8192000 ?
? compress=n ?
? grants=y ?
? ?
? 说明:username.par为导出工具exp用的参数文件,里面具体参数可以根据需要去修改 ?
? ?
? ? ? ? ? ? filesize指定生成的二进制备份文件的最大字节数 ?
? ? ? ? ? ? ?
? ? ? ? ? ? (可用来解决某些OS下2G物理文件的限制及加快压缩速度和方便刻历史数据光盘等) ?
? ?
? 二.导入工具 ? imp ?
? ?
? 1. ? 它是操作系统下一个可执行的文件 ? 存放目录/ORACLE_HOME/bin ?
? ?
? imp导入工具将EXP形成的二进制系统文件导入到数据库中. ?
? ?
? ? ? ? 它有三种模式: ?
? ? ? ? ? ? ? ? a. ? ? 用户模式: 导出用户所有对象以及对象中的数据; ?
? ? ? ? ? ? ? ? b. ? ? 表模式: 导出用户所有表或者指定的表; ?
? ? ? ? ? ? ? ? c. ? ? 整个数据库: 导出数据库中所有对象。 ?
? ? ? ? ? ? ? ? ?
? ? ? ? 只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入 ?
? ? ? ? ?
? ? ? ? imp步骤: ?
? ? ? ? (1) ? create ? table ? ? (2) ? insert ? data ? ? (3) ? create ? index ? (4) ? create ? triggers,constraints ?
? ?
? 2.导入工具imp交互式命令行方式的例子 ?
? $ ? imp ?
? Import: ? Release ? 8.1.6.0.0 ? - ? Production ? on ? 星期五 ? 12月 ? 7 ? 17:01:08 ? 2001 ?
? (c) ? Copyright ? 1999 ? Oracle ? Corporation. ? ? All ? rights ? reserved. ?
? 用户名: ? ? test ?
? 口令:**** ?
? 连接到: ? Oracle8i ? Enterprise ? Edition ? Release ? 8.1.6.0.0 ? - ? 64bit ? Production ?
? With ? the ? Partitioning ? option ?
? JServer ? Release ? 8.1.6.0.0 ? - ? Production ?
? 导入文件: ? expdat.dmp> ? /tmp/m.dmp ?
? 输入插入缓冲区大小(最小为 ? 8192 ? ) ? 30720> ?
? 经由常规路径导出由EXPORT:V08.01.06创建的文件 ?
? 警告: ? 此对象由 ? TEST ? 导出, ? 而不是当前用户 ?
? 已经完成ZHS16GBK字符集和ZHS16GBK ? NCHAR ? 字符集中的导入 ?
? 只列出导入文件的内容(yes/no):no> ?
? 由于对象已存在, ? 忽略创建错误(yes/no):no> ? yes ?
? 导入权限(yes/no):yes> ?
? 导入表数据(yes/no):yes> ?
? 导入整个导出文件(yes/no):no> ? yes ?
? . ? 正在将TEST的对象导入到 ? SCOTT ?
? . ? . ? 正在导入表 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "CMAMENU" ? ? ? ? ? ? ? 4336行被导入 ?
? 成功终止导入,但出现警告。 ? ?
? ?
? ?
? 3.导入工具imp非交互式命令行方式的例子 ?
? ?
? $ ? imp ? system/manager ? fromuser=jones ? tables=(accts) ? ?
? $ ? imp ? system/manager ? fromuser=scott ? tables=(emp,dept) ? ?
? $ ? imp ? system/manager ? fromuser=scott ? touser=joe ? tables=emp ? ?
? $ ? imp ? scott/tiger ? file ? = ? expdat.dmp ? full=y ? ?
? $ ? imp ? scott/tiger ? file ? = ? /mnt1/t1.dmp ? show=n ? buffer=2048000 ? ignore=n ? commit=y ? grants=y ? full=y ? log=/oracle_backup/log/imp_scott.log ?
? $ ? imp ? system/manager ? parfile=params.dat ? ?
? params.dat ? 内容 ? ?
? file=dba.dmp ? show=n ? ignore=n ? grants=y ? fromuser=scott ? tables=(dept,emp) ? ?
? ?
? 4.导入工具imp可能出现的问题 ?
? ?
? (1) ? 数据库对象已经存在 ?
? 一般情况, ? 导入数据前应该彻底删除目标数据下的表, ? 序列, ? 函数/过程,触发器等; ? ? ?
? 数据库对象已经存在, ? 按缺省的imp参数, ? 则会导入失败 ?
? 如果用了参数ignore=y, ? 会把exp文件内的数据内容导入 ?
? 如果表有唯一关键字的约束条件, ? 不合条件将不被导入 ?
? 如果表没有唯一关键字的约束条件, ? 将引起记录重复 ?
? ?
? (2) ? 数据库对象有主外键约束 ?
? ? ? ? ? ? ? 不符合主外键约束时, ? 数据会导入失败 ?
? ? ? ? ? ? ? 解决办法: ? 先导入主表, ? 再导入依存表 ?
? disable目标导入对象的主外键约束, ? 导入数据后, ? 再enable它们 ?
? (3) ? ? 权限不够 ?
? 如果要把A用户的数据导入B用户下, ? A用户需要有imp_full_database权限 ?
? ?
? (4) ? ? 导入大表( ? 大于80M ? ) ? 时, ? 存储分配失败 ?
? ? ? ? ? ? ? 默认的EXP时, ? compress ? = ? Y, ? 也就是把所有的数据压缩在一个数据块上. ?
? ? ? ? ? ? ? 导入时, ? 如果不存在连续一个大数据块, ? 则会导入失败. ?
? ? ? ? ? ? ? 导出80M以上的大表时, ? 记得compress= ? N, ? 则不会引起这种错误. ?
? ?
? (5) ? imp和exp使用的字符集不同 ?
? ? ? ? ? ? ? 如果字符集不同, ? 导入会失败, ? 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息. ?
? ? ? ? ? ? ? 导入完成后再改回来. ?
? ?
? (6) ? imp和exp版本不能往上兼容 ?
? imp可以成功导入低版本exp生成的文件, ? 不能导入高版本exp生成的文件 ?
? 根据情况我们可以用 ?
? $ ? imp ? username/password@connect_string ?
? ? 说明: ? connect_string ? 是在/ORACLE_HOME/network/admin/tnsnames.ora ?
? ? ? ? 定义的本地或者远端数据库的名称 ?
? 注意事项: ?
? UNIX: ? /etc/hosts ? ? ? ? ? ? ? ? ? ? 要定义本地或者远端数据库服务器的主机名 ?
? win98: ? ? ? ? windows\hosts ? ? ? ? ? ? ? ? ? ? ? ? ? 和IP地址的对应关系 ? ? ?
? ?
? win2000: ? ? winnt\system32\drivers\etc\hosts??