imp/exp数据迁移的几点注意

1.目的端和源端的表空间名称最好是一样的。因为用户源端的很多表创建的DDL语句是带着storage选项的,例如缺省表空间,以及临时表空间。 没准那张表创建的时候就是写在非用户缺省的表空间上,省的一堆error信息,最好表空间的名称创建成与源端一致的。
2.字符集NLS_LANG的设置,需要和db端一致。首先select userenv(‘language’) from dual;把源端db的字符集查出来,然后在client做导入之前,记得”set NLS_LANG=” OR “export NLS_LANG=” ,省去很多字符集转换的工作。
3.imp/exp的数据迁移和我之前想象的稍有不一致,我以为可以自动的从一个用户迁移到另外的用户,但是是有前提的,如果不想遇到错误,最好把目的端和源端的表空间名称设置为一致的
4.想一下清空掉某个用户下的数据吗?这些数据应当包含表、视图、触发器、序列、包、函数,这些统称为对象。

select ‘drop table ‘||table_name||’ cascade constraints;’ from user_tables

select ‘drop view ‘||view_name||’ cascade constraints;’ from user_views
select ‘drop sequence ‘ || sequence_name||’;’||chr(13)||chr(10) from user_sequences;
select ‘drop function ‘ || object_name||’;’||chr(13)||chr(10) from user_objects where object_type=’FUNCTION’;
select ‘drop package ‘ || object_name||’;’||chr(13)||chr(10) from user_objects where object_type=’PACKAGE’;
select ‘drop procedure ‘ || object_name||’;’||chr(13)||chr(10) from user_objects where object_type=’PROCEDURE’;

对象包含表、试图、序列、触发器、包、函数等对象,最好spool出来相应的drop语句,然后放到file.sql中,@file.sql这样批量的操作。当然最彻底的方式还是drop user,重建来的痛快。

暂时先想到这些,后续想起来再继续补充吧。。。

emagent,text file busy


在rhel环境上升级oracle 10.2.0.1到10.2.0.4的过程中,在安装patch的时候可能会遇到如下关键字的错误信息
“$ORACLE_HOME/bin/emagent (text file busy)”的错误信息,此信息大概的意思是emagent这个进程被占用了,解决的
方法就是”找到它,干掉它”。
[root@rhel5u4test ~]# fuser /opt/u01/oracle/product/10.2.0/db_1/bin/emagent
/opt/u01/oracle/product/10.2.0/db_1/bin/emagent:  6346e
[root@rhel5u4test ~]# ps -ef|grep 6346
oracle    6346     1  0 00:40 ?        00:00:11 /opt/u01/oracle/product/10.2.0/db_1/bin/emagent
oracle   21493  6346  0 10:15 ?        00:00:00 [emagent] <defunct>
root     21596 21561  0 10:19 pts/2    00:00:00 grep 6346
[root@rhel5u4test ~]# kill -9 6346
kill掉相关的进程后,”retry”一下就过去了。