准备工作
使用expdp命令导出数据
1.登录数据库,进入sqlplus
cmd>sqlplus sys/aaaaaa@orcl as sysdba
或者免密登录
cmd>sqlplus / as sysdba
2. 创建的目录对应的名字(并不会创建实际目录,只做映射)
SQL>create directory export_dir as 'E:\oradataBak';
#授读写权限给用户
SQL> grant read, write on directory export_dir to 用户名;
执行完后要在对应目录创建这个(E:\oradataBak)文件夹
cmd>mkdir -p E:\oradataBak
3.导出数据
cmd>expdp 用户名/密码@orcl directory=export_dir dumpfile=导出的文件名.dmp logfile=导出日志.log schemas=NCC10
#可拼接参数
#schemas=用户名 按用户导出
#tablespaces=表空间名称 按表空间导出
#tables=table1,table2 导出多个表
#tables=table1='where id=1' 按查询条件导出数据
使用impdp命令导入数据
准备步骤
-- 创建表空间
create tablespace DATA_0520 datafile 'F:\oradata\0520\DATA_01.dbf' size 10240m autoextend on next 50m maxsize unlimited;
-- 创建索引空间
create tablespace INDEX_0520 datafile 'F:\oradata\0520\INDEX_01.dbf' size 10240m autoextend on next 50m maxsize unlimited;
-- 创建临时表空间
create temporary tablespace DATA_0520_TEMP tempfile 'F:\oradata\0520\DATA_temp.dbf' size 50m autoextend on next 50m maxsize unlimited;
-- 创建用户并制定默认表空间和临时表空间
CREATE USER SC0520 IDENTIFIED BY SC0520 DEFAULT TABLESPACE DATA_0520 TEMPORARY TABLESPACE DATA_0520_TEMP;
参照expdp导出步骤”里的前二步,建立逻辑导入目录,创建用户且授权;
cmd>impdp 用户名/密码@orcl directory=import_dir dumpfile=导入文件名.dmp logfile=导入日志.log remap_schema=source_username:target_username remap_tablespace= source_tablespace:target_tablespace,source_indexspace:target_indexspace,source_tempspace:target_tempspace parallel=4 full=y
【注意】:
(1)如果是还原到同一表空间的不同数据库用户,则可以不需要“remap_tablespace= source_tablespace: target_tablespace”
(2)remap_schema:将一个方案中的对象加载到另一个方案。
(3)remap_tablespace:将表空间对象重新映射到另一个表空间。
(4)parallel:更改当前作业的活动 worker 的数量,提高速度。
#full=y全量导入
#table_exists_action:
# skip 是如果已存在表,则跳过并处理下一个对象;
# append是为表增加数据;
# truncate是截断表,然后为其增加新数据;
# replace是删除已存在表,重新建表并追加数据;
#exclude=index 导入数据
#include=index 导入索引
#remap_schema,remap_tablespace可以指定多个,remap_tablespace=源1:目标1,源2:目标2
不同源可以指向相同目标
任务执行状态查看
#查询导入导出任务详情
select * from dba_datapump_jobs
cmd> impdp 用户名/密码 attach=任务名称
输入status可以查看任务状态是否有更新
相关SQL
--表空间使用率
SELECT
a.tablespace_name,
a.bytes / 1024 / 1024 "sum MB",
( a.bytes - b.bytes ) / 1024 / 1024 "used MB",
b.bytes / 1024 / 1024 "free MB",
round( ( ( a.bytes - b.bytes ) / a.bytes ) * 100, 2 ) "used%"
FROM
( SELECT tablespace_name, sum( bytes ) bytes FROM dba_data_files GROUP BY tablespace_name ) a,
( SELECT tablespace_name, sum( bytes ) bytes, max( bytes ) largest FROM dba_free_space GROUP BY tablespace_name ) b
WHERE
a.tablespace_name = b.tablespace_name
ORDER BY
( ( a.bytes - b.bytes ) / a.bytes ) DESC
--查看表空间中数据文件存放的位置
SELECT
tablespace_name,
file_id,
file_name,
round( bytes / ( 1024 * 1024 ), 0 ) total_space
FROM
dba_data_files
ORDER BY
tablespace_name;
--创建表空间:
CREATE TABLESPACE 表空间名 'D:\orcl\data01.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;
--增加数据文件个数从而追加表空间大小(索引)
ALTER TABLESPACE 表空间名 ADD DATAFILE 'D:\orcl\data02.dbf' SIZE 10240M AUTOEXTEND ON NEXT 500M maxsize 12000M;
--增加临时表数据文件个数从而追加表空间大小
ALTER TABLESPACE 表空间名 ADD TEMPFILE 'D:\orcl\temp02.dbf' SIZE 10240M AUTOEXTEND ON NEXT 500M maxsize 12000M;
--创建用户
CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE 默认表空间 TEMPORARY TABLESPACE temp;
--授权
GRANT connect,dba,resource to 用户;
--查询对应用户的表空间
select username,default_tablespace from dba_users;
--删除用户
drop user 用户名称 cascade;
--为用户指定表空间
alter user 用户名 default tablespace 表空间名字 ;
--查找表空间路径
select * from dba_data_files;
--查询表空间下的用户
select distinct s.owner from dba_segments s where s.tablespace_name ='表空间名称';
--删除表空间对应的dbf文件
alter tablespace NNC_DATA01 drop DATAFILE '/home/oracle/datafiles/nnc_data01_ex22.dbf';
--修改dbf文件状态
ALTER DATABASE DATAFILE '/home/oracle/datafiles/nnc_data01_ex22.dbf' ONLINE
----创建用户test密码为123456并指定默认表空间为SYSTEM
create user test identified by 123456 Default tablespace SYSTEM;