迁移一个数据库,如在新机器上搭建oracle数据库后,把源库数据导入到新库,如果数据量在1G以上500G以下,且dump文件不能通过网络传送时,用数据泵方式最好。具体方法:

源库操作:查看指定数据库上有哪些表空间,可使用以下SQL语句:

SELECT tablespace_name 
FROM dba_tablespaces;

以上语句查询得到的是所有表空间,如果只想查询用户的表空间,则可以使用以下语句:

select distinct t.owner,t.tablespace_name
from dba_segments t
where t.owner in (select distinct s.owner from dba_segments s)
and   t.owner = 'YOUR_USERNAME';

其中,将"YOUR_USERNAME"替换成你要查询的用户名。

查看源数据库上有哪些用户,可使用以下SQL语句:

SELECT username 
FROM dba_users;

如果只想查询非系统用户,则可以使用以下语句:

SELECT username 
FROM dba_users 
WHERE account_status = 'OPEN' AND default_tablespace NOT IN ('SYSTEM', 'SYSAUX');

用expdp导出这个数据库的所有对象和数据,可使用以下命令:

expdp YOUR_USERNAME/YOUR_PASSWORD@YOUR_DATABASE FULL=Y DIRECTORY=YOUR_DIRECTORY DUMPFILE=YOUR_DUMPFILE LOGFILE=YOUR_LOGFILE

其中,将"YOUR_USERNAME"替换为你的用户名,"YOUR_PASSWORD"替换为你的密码,"YOUR_DATABASE"替换为数据库名,"YOUR_DIRECTORY"替换为导出目录名,"YOUR_DUMPFILE"替换为导出文件名,"YOUR_LOGFILE"替换为导出日志文件名。

目标库操作:提供创建用户和授权语句,具体如下:

创建用户:

CREATE USER YOUR_USERNAME IDENTIFIED BY YOUR_PASSWORD;

其中,将"YOUR_USERNAME"替换为你要创建的用户名,"YOUR_PASSWORD"替换为密码。

授予权限:

GRANT CONNECTION, RESOURCE, CREATE VIEW, CREATE DIRECTORY, EXP_FULL_DATABASE, IMP_FULL_DATABASE TO YOUR_USERNAME;

以上语句授予了连接权限(CONNECTION)、资源权限(RESOURCE)、创建视图权限(CREATE VIEW)、创建目录权限(CREATE DIRECTORY)、导出权限(EXP_FULL_DATABASE)和导入权限(IMP_FULL_DATABASE)。

创建表空间

create tablespace user_data
  logging
  datafile 'path/user_data.dbf'
  size 50m
  autoextend on
  next 50m maxsize 20480m
  extent management local;

用impdp导入这个数据库数据,导入时需要添加表空间映射和用户映射,可使用以下命令:

impdp YOUR_USERNAME/YOUR_PASSWORD@YOUR_DATABASE REMAP_SCHEMA=OLD_SCHEMA:NEW_SCHEMA REMAP_TABLESPACE=OLD_TABLESPACE:NEW_TABLESPACE DIRECTORY=YOUR_DIRECTORY DUMPFILE=YOUR_DUMPFILE LOGFILE=YOUR_LOGFILE

其中,将"YOUR_USERNAME"替换为你的用户名,"YOUR_PASSWORD"替换为你的密码,"YOUR_DATABASE"替换为数据库名,"OLD_SCHEMA"和"NEW_SCHEMA"替换为原用户名和新用户名,"OLD_TABLESPACE"和"NEW_TABLESPACE"替换为原表空间名和新表空间名,"YOUR_DIRECTORY"替换为导入目录名,"YOUR_DUMPFILE"替换为导入文件名,"YOUR_LOGFILE"替换为导入日志文件名。

最后验证所有对象是否导入成功

SELECT object_type,COUNT(*)

FROM dba_objects

WHERE object_type in ('TRIGGER','FUNCTION','SEQUENCE','PROCEDURE','SCHEDULE','TABLE','INDEX','MATERIALIZED VIEW')

AND  owner in ('数据库名')

group by object_type

如果源库和目标库所有对象数量一致可判断数据迁移基本成功,最后还要通过业务实用应用系统验证方可确定是否无任何问题。