select * from nls_database_parameters where parameter =('NLS_CHARACTERSET');
1. 创建测试目录、测试表空间、测试用户、测试表:
SQL> create directory dump_dir as '/u01/app/oracle/trans';
SQL> create tablespace test datafile '/u01/app/oracle/oradata/orcl/test01.dbf' size 10M;
SQL> create user test default tablespace test identified by a;
SQL> grant connect, resource to test;
SQL> conn test/a
SQL> create table t as select * from user_tables;
SQL> conn scott/tiger
SQL> create table tt tablespace test as select * from emp;
2. 检测表空间是否是自包含的:
SQL> alter tablespace test read only;
SQL> exit
4. 使用数据泵将test的元数据导出:
[oracle@nylg ~]$ expdp \'/ as sysdba\' DIRECTORY=dump_dir DUMPFILE=test.dmp TRANSPORT_TABLESPACES=test
5. 检测linux平台与windowns平台的endian格式是否一样:
select platform_name, endian_format from v$transportable_platform order by 2, 1;
发现一致,可以进行传输,否则不可以传输
6. 将导出文件/u01/dir/test.dmp 和数据文件(test表空间所对应的数据文件test01.dbf)一起复制到目标数据库
登到windows平台:
创建一个存放元数据文件的目录:
SQL> create directory dump_dir as 'c:\dir';
将/u01/dir/test.dmp复制到c:\dir
将/u01/app/oracle/oradata/orcl/test01.dbf放到windowns平台下的数据文件所在的目录
7. 在目标数据库上创建被传输的表空间所有的对象的属主
表空间test里所包含的对象的属主包括(在源库查询);
SQL> select distinct owner from dba_segments where tablespace_name= 'TEST';
在windows平台查看是否有scott和test两个用户:
SQL> select username from dba_users where username='SCOTT';
SQL> select username from dba_users where username='TEST';
未选定行
发现没有test,在windows下创建test:
SQL> create user test identified by a;
SQL> grant connect, resource to test;
8. 调用imp,进行可传输表空间的导入
C:\oracle\product\10.2.0\oradata\orcl>impdp '/ as sysdba' TRANSPORT_DATAFILES='C:\oracle\product\10.2.0\oradata\orcl\test01.dbf' DIRECTORY=dump_dir DUMPFILE=test.dmp
9. 导入后在源和目标数据库上,将test的表空间设置为读写状态
--在linux下:
alter tablespace test read write;
--在windowns:
alter tablespace test read write;
10. 进行验证:
在windwos下:
sqlplus scott/tiger
select * from tab;
conn test/a
SQL> select * from tab;
conn /as sysdba
SQL> alter user test default tablespace test;
迁移完毕
传输数据库:将linux上的orcl数据库传输到windows平台改名为nylg
1.查询v$transportable_platform确定linux平台与windows平台具有相同的endian格式
SQL> col PLATFORM_NAME for a40
SQL> select platform_name, endian_format from v$transportable_platform order by 2
发现linux与windowns的endian格式一致都是little,所以可以执行整库迁移
2.调用dbms_tdb.check_db函数
该函数用来确定数据库是否已经准备好传输了(包括相同平台和不同平台的传输)该函数返回true,则说明可以进行数据库传输了,如果返回false则说明不能传输。
set serveroutput on
declare
db boolean;
begin
db := dbms_tdb.check_db('Linux IA (32-bit)');
if db then
dbms_output.put_line('The database can be transport');
else
dbms_output.put_line('The database can not be transport');
end if;
end;
/
数据库必须以read only方式打开:
SQL> shutdown immediate
SQL> startup mount
SQL> alter database open read only;
set serveroutput on
declare
db boolean;
begin
db := dbms_tdb.check_db('Linux IA (32-bit)');
if db then
dbms_output.put_line('The database can be transport');
else
dbms_output.put_line('The database can not be transport');
end if;
end;
/
The database can be transport
发现数据库已经准备好
3.调用dbms_tdb.check_external函数
该函数用来确定是否具有外部表,目录结构或者BFILE。该函数返回true或false,该结果主要提醒我们,源数据库中有这些外部对象。当把数据文件传输到目标站点上后,不要忘记了将这些对象所对应的文件也一起传输到目标站点上。