Oracle数据迁移

本文详细介绍了一种从Windows Server 2008 Oracle 11g R2到CentOS 6 Oracle 11g R2的数据库迁移方法。通过按用户导出导入的方式,记录并迁移了67个表空间和141个用户的完整数据,适用于Oracle不熟悉的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:
需要把server 2008 oracel 11g R2的数据迁移到centos6 oracle 11g R2,数据库版本是一样的,如果不一样,导出数据的时候需要加上版本号。
旧数据库的表空间有67个,用户有141个,数据倒不算太大。
本人oracle不熟,只能通过按用户导出导入的方法把数据迁移了。

准备,基本思路:

记录旧数据库用户与表空间的关系,在新库创建用户、表空间,结合起来。导出旧数据库数据的时候,按用户来导出。
--->在新库,按用户来导入

select username,user_id,default_tablespace,temporary_tablespace from  dba_users;--查看表空间与用户的关系

下面例子:
旧数据库:172.16.31.213
新数据库:172.16.28.213

1.批量创建表空间:

参考链接:http://www.51testing.com/html/06/n-3724606.html

create table space_name(
name varchar2(20)
)

...

select 'create tablespace ' || s_name || ' DATAFILE "/oradata/dbfile/' || s_name || '.DBF" SIZE 50M AUTOEXTEND ON ;' from space_name;  --生成执行语句

把导出语句修改一下,写成.sql脚本,在服务器中执行脚本

>@cc.sql

2.批量创建用户:

select 'create user ' || username || ' identified by ' || username || ' ;' from test_user; --生产执行语句,放在脚本中运行
select 'grant resource,connect,dba to ' || username || ' ;' from  test_user; --生产授权用户语句

手动修改用户与表空间对应的关系,可以用工具修改(个人用navicat for oracle)。

3.批量导出导入数据:

1.创建dblink,(我是用pl/sql工具创建的dblink)

GRANT EXP_FULL_DATABASE TO VSOP; --给远程用户exp_full_database的权限

-- Drop existing database link
drop public database link TEST2;
-- Create database link
create public database link TEST2
  connect to VSOP
  using '(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.31.213)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = idcms)
    )
  )';

2.新建目录

mkdir  /oradata/dumpfile
SQL> create or replace directory data_pump_dir2 as '/oradata/dumpfile';
SQL> grant read,write on directory data_pump_dir2 to public;

建两个简单的导出导入脚本:

#!/usr/bin/env bash
source /home/oracle/.bash_profile
date
for user in `cat /tmp/user.txt`;do
    echo "expdp $user"
    expdp \'/ as sysdba\' network_link=test2 directory=DATA_PUMP_DIR2 SCHEMAS=${user} content=all dumpfile=${user}.dmp logfile=exp_${user}.log &> /dev/null
done
date

#!/usr/bin/env bash
source /home/oracle/.bash_profile
date
for user in `cat /tmp/user.txt`;do
    echo "impdp $user"
    impdp \'/ as sysdba\' directory=DATA_PUMP_DIR2  DUMPFILE=${user}.dmp table_exists_action=skip logfile=imp_${user}.log &> /dev/null
done
date
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值