说说在 Linux 中如何使用 Oracle 数据汞 expdp
1 导出 dmp 数据
(1)创建备份 dmp 文件夹并赋予权限
mkdir /home/oracle/[dump_folder]
chmod -R 777 /home/oracle/[dump_folder]
[dump_folder] 为 dump 文件夹名称。
Linux chmod(英文全拼:change mode)命令是控制文件权限的命令。-R 参数指的是对目前目录下的所有文件及其子孙目录递归地应用相同的权限变更规则。chmod 命令可以使用八进制数来指定权限。文件或目录的权限位由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。7 的二进制数是 111,即表示读、写与执行权限都有。
(2)登录数据库创建目录
sqlplus / as sysdba
create or replace directory [folder_name] as '/home/oracle/[dump_folder]';
exit;
- [folder_name] 为数据库逻辑目录名称;
- [dump_folder] 为实际目录名称。
最后一个命令,退出数据库。
(3)expdp 导出
expdp 命令格式为:expdp [user]/[pwd]/[service] directory=[FOLDER_NAME] dumpfile=xxx.dmp
- [user]:用户名;
- [pwd]:密码;
- [serivice]:服务名称;
- [FOLDER_NAME] :之前所创建的数据库逻辑名称。
如果密码带有特殊字符,那么需要通过命令交互方式输入用户名与密码。
2 传输 dmp 文件
一般情况下,需要把导出的 dmp 文件传输到另一台服务器,然后再登录那一台服务器导入数据。
两台LINUX主机可以使用 scp 命令来互传文件。格式为 scp [local_file_path] [remote_user]@[remote_ip]:[remote_folder_path]
- [local_file_path]:本地文件路径;
- [remote_user]:远程服务器账户名称;
- [remote_ip]:远程 IP 地址;
- [remote_folder]:远程服务器文件夹路径。
形如:scp /home/oracle/dump_folder/data.dmp oracle@192.168.4.xxx:/home/oracle/dump_folder
命令执行后,会要求输入远程服务器密码,密码正确后,才开始传输。
3 导入 dmp 数据
(1)创建备份 dmp 文件夹并赋予权限
跟导出 dmp 数据步骤类似,也是先创建备份 dmp 文件夹并赋予权限。
(2)创建表空间
因为表空间希望放置在新的文件夹下,所以我们先创建出这个文件夹,形如 mkdir '/oradata/[new_folder]
。
sqlplus / as sysdba;
create tablespace [name] datafile '/oradata/[new_folder]/xxx.dbf' size 5000M;
- [name] 为表空间名称;
- xxx.dbf 中的 xxx 表示 dbf 文件名称;
- size 之后是空间大小,这里设置为 5000 M。
(3)创建用户并授权
create user [user] identified by [pwd] default tablespace [ts_name];
- [user] 为用户名;
- [pwd] 为密码;
- [ts_name] 为表空间名称。
(3)赋予账户数据库逻辑目录读写权限
grant read,write on directory [folder_name] to [user];
- [folder_name] 为数据库逻辑目录名称;
- [user] 为用户名。
(4)赋予账户表空间权限
grant dba,resource,unlimited tablespace to [user];
- [user] 为用户名。
其实系统权限 unlimited tablespace 是隐含在dba, resource角色中的一个系统权限,所以当账户得到dba或resource的角色时,也就拥有了 unlimited tablespace 权限。这个账户可以使用任意表空间,这种设置方式一般用于开发或测试环境。
(5)导入 dmp
impdp 命令与 expdp 命令相似,impdp 命令格式为:impdp [user]/[pwd]/[service] directory=[FOLDER_NAME] dumpfile=xxx.dmp
如果导出 dmp 的 Oracle 数据库与要导入的 Oracle 数据库存在大版本方面的差异,就会提示版本不兼容异常。
Oracle 的版本号,可以执行登录命令 sqlplus / as sysdba
,看到:
这里导出 dmp 的 Oracle 是 12c,而需要导入的 Oracle 版本号是 11g,所以如果两个数据库需要互导,最好在大版本上是一致的。