EXP/IMP迁移数据 导入导出全过程

EXP/IMP迁移数据

 


项目背景:

原来的数据库服务器运行在HP DL388G7服务器上面,内存32G,由于业务增长,内存吃紧,加上时不时出现服务器硬件故障,由于是单实例单服务器,存在单点发现,于是打算采取一些措施改善一下:

1)升级服务器内存

2)并搭建服务器操作系统级别的双机

3)迁移数据库数据到新服务器

 

前面已经写过升级服务器内存相关的文章,题目为“数据库服务器升级内存需要考虑的问题”,链接如下:http://blog.csdn.net/laven54/article/details/8738698

前面已经写过数据迁移相关的文章,题目为“SUSE
Linux HA双机搭建
”,链接如下: http://blog.csdn.net/laven54/article/details/8878048

 

 ——————————————————————————————————————————————————————————

 

 

EXP/IMP对于小数据量的数据库,是一个不错的迁移工具。 迁移数据过程如下,分两大步,导出和导入。

 

一、导出过程

1、准备好导出脚本:

more  / exp20130118/exp.sh 

date

expdp user/passwd  DIRECTORY=DATA_PUMP_DIR2  DUMPFILE=exp_2013-1-19.dmp  LOGFILE=exp_2013-1-19.log  SCHEMAS=bv

date

 

2、创建导出目录:

exp目标目录放在本地还是存储,放哪个目录?是否创建directory?

SQL>  select * from dba_directories;

OWNER   DIRECTORY_NAME              DIRECTORY_PATH

SYS    DATA_PUMP_DIR          /oracle/product/10.2/db/rdbms/log/

SYS     DATA_PUMP_DIR1            /exp

SYS     ORACLE_OCM_CONFIG_DIR  /oracle/product/10.2/db/ccr/state

 

create  directory data_pump_dir2  as  ' /exp20130118';

目录创建以后,就可以把读写权限授予特定用户,具体语法如下:

GRANT READ[,WRITE] ON DIRECTORY directory TO username;

 

例如:

grant read, write on directory  data_pump_dir2  to sys;

 3、导出dmp文件

找一个业务不繁忙的时间,执行导出脚本即可。

 

二、导入过程

1、创建表空间、用户

说明:

1)我google网上大多数文章都说,如果用exp/imp方式迁移数据,在新服务器上,只需要创建一个用户用于导入就可以,但是我第一次导入时只创建一个用户,就会报一大堆错,最后还是创建所有用户,知道的同学告诉我一声,谢谢。

2)我这里偷点懒,直接用toad拷贝创建用户的语句,连加密的密码也有了,方便。

 

到Toad里边拷贝创建表空间和用户的脚本,直接粘贴进行初始化准备工作。表空间主要是看看和用户相关的都有哪些表空间,可以用sql语句查询;用户就得一个一个看。

 

1、1创建一个参数文件

CREATE PROFILE LIMIT_SESSION LIMIT

  SESSIONS_PER_USER 30

  CPU_PER_SESSION DEFAULT

  CPU_PER_CALL DEFAULT

  CONNECT_TIME DEFAULT

  IDLE_TIME DEFAULT

  LOGICAL_READS_PER_SESSION DEFAULT

  LOGICAL_READS_PER_CALL DEFAULT

  COMPOSITE_LIMIT DEFAULT

  PRIVATE_SGA DEFAULT

  FAILED_LOGIN_ATTEMPTS DEFAULT

  PASSWORD_LIFE_TIME DEFAULT

  PASSWORD_REUSE_TIME DEFAULT

  PASSWORD_REUSE_MAX DEFAULT

  PASSWORD_LOCK_TIME DEFAULT

  PASSWORD_GRACE_TIME DEFAULT

  PASSWORD_VERIFY_FUNCTION DEFAULT;

 

 

————————————————————————————————————————————————

 1、2创建表空间

拷贝过来的代码示例:

CREATE TABLESPACE INDX DATAFILE
  '/oracle/oradata/ebai/indx01.dbf' SIZE 10000M AUTOEXTEND OFF,
  '/oracle/oradata/ebai/indx02.dbf' SIZE 10000M AUTOEXTEND OFF,
  '/oracle/oradata/ebai/indx03.dbf' SIZE 10000M AUTOEXTEND OFF,
  '/oracle/oradata/ebai/indx04.dbf' SIZE 10000M AUTOEXTEND OFF,
  '/oracle/oradata/ebai/indx05.dbf' SIZE 10000M AUTOEXTEND OFF,
  '/oracle/oradata/ebai/indx06.dbf' SIZE 10000M AUTOEXTEND OFF,
  '/oracle/oradata/ebai/indx07.dbf' SIZE 5000M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;

其他表空间创建语句在此省略。

 

 1、3创建用户

拷贝过来的代码示例:

CREATE USER XXXXX

  IDENTIFIED BY VALUES '602CXD123XXXC410'

  DEFAULT TABLESPACE SYSTEM

  TEMPORARY TABLESPACE TEMP

  PROFILE DEFAULT

  ACCOUNT UNLOCK;

  -- 1 Role for XXXXXX

  GRANT CONNECT TO XXXXX WITH ADMIN OPTION;

  ALTER USER XXXX DEFAULT ROLE ALL;

  -- 1 Object Privilege for XXXXX

    GRANT SELECT ON  XX.XXXX_VIEW TO XXXXXX;

   ... ...此处省略数万字

 

 

2、创建directory

create directory impdp_datapump_dir as '/exp20130118' ;

grant read,write on directory impdp_datapump_dir to system;

 

3、运行导入脚本

vi  impdp.sh

date

impdp system/XXXX DIRECTORY=impdp_datapump_dir DUMPFILE=exp_2013-1-19.dmp ignore=y  commit=y  LOGFILE=imp_2013-1-31.log

date

 导入过程根据数据量不同会有差异,耐心等待。

4、整理报错信息

 

testdb: /exp20130118> more imp_2013-02-04.log |grep err

ORA-39083: Object type ALTER_PROCEDURE failed to create with error:

ORA-04052: error occurred when looking up remote object xxxxxxx

ORA-00604: error occurred at recursive SQL level 3

ORA-39083: Object type ALTER_PROCEDURE failed to create with error:

ORA-04052: error occurred when looking up remote object xxxxxx

ORA-00604: error occurred at recursive SQL level 3

ORA-39083: Object type ALTER_PROCEDURE failed to create with error:

ORA-04052: error occurred when looking up remote object xxxxxx

ORA-00604: error occurred at recursive SQL level 3

ORA-39083: Object type JOB failed to create with error:

Job "SYSTEM"."SYS_IMPORT_FULL_01" completed with 35 error(s) at 16:11:53

 

 

5、重新执行之前未完成的赋权操作

之前很多用户赋权的时候都会报错,大部分都是XXX对象不存在,所以考虑数据库导入成功之后再次进行赋权。

另外值得注意的是,生产数据库上也有二十几个无效对象。

 

6、检查并重新编译无效对象,核实表记录数目

select object_type,count(*) from dba_objects where owner=’源schema’;

select object_type,count(*) from dba_objects where owner=’目标schema’;

select * from dba_objects where status<>’VALID’ and owner=’目标schema’;

select count(*) from zzzzzz.yz_ongimt_jingtzt;

 

select owner,object_name,replace(object_type,' ','') object_type,to_char(created,'yyyy-mm-dd') as created,to_char(last_ddl_time,'yyyy-mm-dd') as last_ddl_time,status from dba_objects where status='INVALID' and owner='xxx'

 

 

手工编译方法一:

@$ORACLE_HOME/rdbms/admin/utlrp.sql

 

手工编译方法二:

alter view ALL_IND_STATISTICS      compile; 

 

alter view sys.USER_IND_STATISTICS compile; 

 

alter procedure sys.VALIDATE_ORDIM   compile; 

 

alter package DBMS_CUBE_ADVISE compile body; 

 

 

时间: 2024-08-30 11:51:09

EXP/IMP迁移数据 导入导出全过程的相关文章

Oracle exp/imp命令快速导入导出数据

用exp命令导出表结构,不导出表数据.只需在命令行里加一个参数rows=n即可.表示不导出表数据. exp username/pwd@sid file=d:databak.dmp owner=(user)rows=n ******************************************************************************************************************** oracle exp/imp命令详解 E:>ex

Oracle数据导入导出imp/exp(转)

      在oracle安装目录下有EXP.EXE与IMP.EXE这2个文件,他们分别被用来执行数据库的导入导出.所以Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 一.Oracle数据导出exp  1.Exp参数详解(红色字体代表比较重要的参数): (1) USERID 运行导出命令的帐号的用户名/口令 (2) BUFFEER 用来取数据行的缓冲区的大小 (3) FILE 导出转储文件的名字 (4) COMPRESS 导出是否应该压缩有碎片的段成一个范围,这将会影

EXP/IMP迁移数据库的时候注释乱码解决方法

                  EXP/IMP迁移数据库的时候注释乱码解决方法 使用 imp/exp 导入/导出 把8I迁移到10G数据时发现导入的数据注释全部都是乱码. 原因是导出的时候客户端字符集没有设置,或者设置不对.修改成DB的就OK了 查了一下字符集(select userenv('language') from dual;) 导出库的字符集是 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 导入库的字符集是  AMERICAN_AMERICA.ZHS16GBK

关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法

在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 dblink,然后用 create table B as select * from A@dblink where ...,或 insert into B select * from A@dblink where ...3. exp A 表,再 imp 到 B 表,exp 时可加查询条件4. 程序

Oracle数据导入导出10g数据方法

Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中. 利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用. 执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,  DOS中可以执行时由于 在oracle 8i 中  安装目录ora81BIN被设置为全局路径,  该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出

LINUX下Oracle数据导入导出的方法详解_oracle

本文讲述了LINUX下Oracle数据导入导出的方法.分享给大家供大家参考,具体如下: 一. 导出工具 exp 1. 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移   它有三种模式: a.  用户模式: 导出用户所有对象以及对象中的数据: b.  表模式: 导出用户所有表或者指定的表: c.  整个数据库: 导出数据库中所有对象. 2. 导出工具exp交互式命令行方式的使用的例子: $ex

精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换_MsSql

* 说明:复制表(只复制结构,源表名:a 新表名:b)       select * into b from a where 1<>1     * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b)       insert into b(a, b, c) select d,e,f from b;     * 说明:显示文章.提交人和最后回复时间       select a.title,a.username,b.adddate from table a,(select max(adddate

eclipse-谁知道用JSP展现数据库里面数据导入导出功能怎样写的代码?

问题描述 谁知道用JSP展现数据库里面数据导入导出功能怎样写的代码? 做数据导出老导不出数据,我想知道是不是数据库方法错误,谁知道用JSP展现数据库里面数据导入导出功能怎样写的代码? 解决方案 导入导出EXCEL数据http://yangbobestone.iteye.com/blog/1123458

MySQL数据导入导出方法与工具介绍(1- myslqimport utility)

mysql|数据             MySQL数据导入导出方法与工具介绍(1- myslqimport utility)              mysqlimport文本文件导入工具介绍 翻译声明:    本文内容来自Sam's Teach Yourself MySQL in 21 Days一书的部分内容,by Mark Maslakowski      英文原文版权属原作者所有,中文的部分翻译有略有增删;原书讲的过于清楚的地方有删,讲的不清楚的地方有增:如果有翻译的不妥或者不正确的地