dmp文件的导入与导出:
整库的导入导出
1.从远程机器上导出
expdp npmdb/npmoptr@orcl schemas=NPMDB directory=MY_DIR dumpfile=npmdb_87.dmp
参数说明
schemas:可以看成是数据库名,directory:存放dmp,log文件的目录,dumpfile:导出的dmp文件名
注:directory目录的创建
create directory data_pump_dir as '/opt/data/oracle_tmp_data/';
directory目录的查看
SELECT privilege,directory_name, DIRECTORY_PATH FROM user_tab_privs t, all_directories d WHERE t.table_name(+) = d.directory_name ORDER BY 2, 1;
赋权限
grant read,write on directory data_pump_dir to npmdb;
2.导出的dmp文件放到要导入的机器上
3.dmp文件导入
impdp npmdb/npmoptr@oracle remap_schema=npmdb:npmdb directory=my_dir dumpfile=npmdb_87.dmp TRANSFORM=segment_attributes:n remap_tablespace=npmdbs:npmdb
参数说明
remap_schema=npmdb(导出的数据库):npmdb(要导入的数据库),directory:存放要导入的dmp文件的目录,dumpfile:导入的dmp文件名,remap_tablespace=npmdbs(导出的表空间):npmdb(导入的表空间)
注:全库导入时需要是空库
directory的创建参照导出时的目录的创建
带query的导入导出
导出特定表的前10000行
expdp nmosdb/nmosoptr@orcl directory=MY_DIR dumpfile=nmosdb_87.dmp Tables=TAI_SCENE_CONTROLORDER query= \"WHERE ROWNUM\<\=10000\";
导入特定表
impdp nmosdb/nmosoptr@oracle Tables=nmosdb.TAI_SCENE_CONTROLORDER directory=my_dir dumpfile=nmosdb_87.dmp TRANSFORM=segment_attributes:n
排除某一张表导出
expdp nmosdb/nmosoptr@orcl schemas=NMOSDB directory=MY_DIR dumpfile=nmosdb_87.dmp EXCLUDE=TABLE:\"IN \(\'TPP_EVENT_HIS\'\)\"
导入导出过程中可能会遇到的问题:
导入时要求要导入的库是空库
查看当前用户下的所有表:
select count(*) from user_tables;
或select count(*) from user_tab_comments;
若查询结果不为0,则删除当前用户下的所有对象
删除数据库对象的几种方法:
a.删除用户
drop user NRMDB cascade;
出现如下错误:
ORA-01940: cannot drop a user that is currently connected
通过查看用户的进程,并kill用户进程,然后删除用户
select sid,serial# from v$session where username='NRMDB';
alter system kill session '50,1122';
alter system kill session '54,3248';
drop user NRMDB cascade;
注:这样把对应的用户删除掉了
需要新建用户并指定该新建用户的默认表空间
create user nrmdb identified by nrmoptr;
grant dba to nrmdb;
alter user nrmdb default tablespace NRMDB;
b.使用语句删除
--delete tables
select 'drop table ' || table_name ||';'||chr(13)||chr(10) from user_tables;
--delete views
select 'drop view ' || view_name||';'||chr(13)||chr(10) from user_views;
--delete seqs
select 'drop sequence ' || sequence_name||';'||chr(13)||chr(10) from user_sequences;
--delete functions
select 'drop function ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='FUNCTION';
--delete procedure
select 'drop procedure ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PROCEDURE';
--delete package
select 'drop package ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PACKAGE';
--delete trigger
SELECT 'drop TRIGGER "' ||SYS_CONTEXT('USERENV','CURRENT_USER')||'"."'|| TRIGGER_NAME ||'";' ||CHR(13) ||CHR(10)FROM USER_TRIGGERS;
c.使用存储过程
删除某一张表时出错:
drop table TPP_EVENT_HIS;
出现的错误:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
主要是因为有事务正在执行(或者事务已经被锁),所有导致执行不成功。
1、用dba权限的用户查看数据库都有哪些锁
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
2、根据sid查看具体的sql语句,如果sql不重要,可以kill
select sql_text from v$session a,v$sqltext_with_newlines b
where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value
and a.sid=&sid order by piece;
3、kill该事务
alter system kill session '339,13545';
导入时出现char类型字符集的问题
出现ORA-02374:等错误时,可能是因为表中有char类型的字段,出现这种情况时需要:
查询oracle server端的字符集
select userenv('language') from dual;
查询dmp文件的字符集
select nls_charset_name(to_number('0354','xxxx')) from dual;
查询oracle client端的字符集
echo $NLS_LANG
如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。
其他问题极可能用到的sql
查看表空间
select TABLESPACE_NAME from DBA_TABLESPACES;
查看nrmdb用户的默认表空间、临时表空间
select username,default_tablespace,temporary_tablespace
from dba_users
where username = 'NPMDB';
查看所有的用户
select username from dba_users;
修改oracle用户的密码
ALTER USER nmosdb IDENTIFIED BY nmosoptr;
查看数据文件的路径
select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;
查看所有表空间大小
select tablespace_name,sum(bytes)/1024/1024 from dba_data_files group by tablespace_name;
已经使用的表空间大小
select tablespace_name,sum(bytes)/1024/1024 from dba_free_space group by tablespace_name;
创建大文件表空间
create bigfile tablespace fmdb logging datafile '/opt/data/oracle_data/fmdbs.dbf' size 100G autoextend off extent management local segment space management auto ;
linux默认不支持.rar文件,要在linux下处理.rar文件,需要安装RAR for Linux,可以从网上下载,但要记住,RAR for Linux不是免费的;可从http://www.rarsoft.com/download.htm下载RARfor Linux 3.2.
多个文件压缩到一个压缩文件中
tar czvf DB_JS.tar.gz fmdb_87.dmp,kpidb_87.dmp,nmosdb_87.dmp,npmdb_87.dmp,nrmdb_87.dmp
出现以下错误:
tar: Exiting with failure status due to previous errors
解决办法:将多个文件之间的,去掉
tar czvf DB_JS.tar.gz fmdb_87.dmp kpidb_87.dmp nmosdb_87.dmp npmdb_87.dmp nrmdb_87.dmp