本文将通过plsql客户端工具,演示如何对Oracle数据库中的表以dmp文件的格式进行导出和导入。
dmp的导出
步骤如下:
1、打开plsql并登陆,点击 工具 ——> 导出表
2、在打开的窗口选中要导出的表, 输出文件 那里指定导出的dmp文件的保持路径和文件名
3、点击 导出
dmp的导入
步骤如下:
1、打开plsql并登陆,点击 工具 ——> 导入表
打开plsql并登陆,点击 工具 ——> 导出表
2、在打开的窗口中,导入文件 那里选择dmp文件所在路径和文件
3、点击 导入
场景:
在已有dmp文件而不知道其中表的表空间名的情况下,有以下两种解决方法:
1、通过编辑器打开dmp文件,通过搜索关键字“TABLESPACE”,找到所有表的所属表空间,然后将其替换为自定义的表空间。再将该dmp文件通过plsql导入到Oracle数据库中。
(该方法只适用在文件内容 较少的情况下,而且将表的所属表空间修改,可能会有不可预计的影响)
2、在不知表空间名的情况下,还是直接通过plsql将dmp文件导入到Oracle数据库中,在导入的过程中,可能会产生很多的错误,暂时不管。在导入程序执行完后,我们直接点击 plsql导入窗口中的 日志 选项,查看导入过程中日志信息。这时,我们可以通过日志所提示的错误信息,得知某些表原先所属的表空间名,或者是其它的一些重要信息。
(小编遇到的情况是不知道dmp文件中所包含的表的所属表空间名,在第一次导入dmp文件失败后,通过查看日志找到数据库中的表原先所属的所有表空间后,依次创建这些表空间,并将数据库清空后再次重新导入,此时已经成功。注:至于导出dmp文件时的用户跟导入时的用户不同也是可以的,反正我是没受到影响,当然,能够一样就更好了)
以下是创建数据库用户并授权,表空间的设定等相关的sql语句:
-- 创建oracle用户
create user xue identified by 123456;
(“xue”为数据库用户名,“123456”为该用户密码)
-- 为新建用户授予角色权限
grant dba to xue;
(为了方便,直接将dba角色权限赋予新建的数据库用户)
-- 设置oracle帐号密码永久不过期
-- 1、查看用户的proifle是那个,一般是default:
SELECT username,PROFILE FROM dba_users;
-- 2、查看指定概要文件(如default)的密码有效期设置:
SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
-- 3、将密码有效期由默认的180天修改成“无限制”:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
(前三步已经解决第四步没必要)
-- 4、修改后,还没有被提示ORA-28002警告的用户不会再碰到同样的提示;
-- 已经被提示的用户必须再改一次密码,举例如下:
$sqlplus / as sysdba
sql> alter user xue identified by 123456;
(刚新建的数据库用户默认的账号密码有效期为180天,避免以后失效,直接将其设为永久不过期)
-- 1.创建表空间
create tablespace XUESPACE datafile 'C:Javaoracle_tablespaceXUESPACE.dbf' size 100m reuse autoextend on next 10m maxsize unlimited;
(“XUESPACE”为新建的表空间名称,“C:Javaoracle_tablespaceXUESPACE.dbf”是与表空间对应的文件的路径和文件名,其它的表空间大小相关的设定,暂时可忽略)
-- 2.创建用户,指定 表空间 和 临时表空间
create user xue identified by 123456 default tablespace XUESPACE temporary tablespace temp;
(“XUESPACE”为用户“xue”指定的表空间,“temp”为其临时表空间)
-- 3.查看当前用户默认的表空间、临时表空间
select * from user_users;
( username 为当前用户名;
default_tablespace 为当前用户默认的表空间;
temporary_tablespace 为当前用户默认的临时表空间 )
-- 4.修改用户默认的表空间
alter user xue default tablespace spaceX;
(将用户“xue”的默认表空间改为“spaceX”)
-- 查看某个表空间有多少张表
select * from all_tables where tablespace_name='spaceX';
(“spaceX”为表空间名,此处需要注意表空间名的大小写,如“USERS”必须为大写才能将数据查询出来)
-- 查看某个用户关联的所有表空间及各个表空间中表的数量
select tablespace_name,count(*) from all_tables where owner = 'XUE' group by tablespace_name;
-- Oracle如何查询表空间对应文件所在的路径
select * from dba_data_files where tablespace_name='USERS';
(“USERS”为表空间名)