怎么导入oracle数据库备份,oracle数据库导入、导出、备份方法大放送

费话不上,直接上文:

数据泵导出,根据用户名导出多个用户下的表及数据:

expdp 用户名/密码@IP地址:端口/要连接的数据库实例名 DIRECTORY=BACKUPDIR  schemas=用户口1,用户2,用户3 DUMPFILE=DDL1.dmp logfile=DDL.log parallel=3 compression=ALL

只导出数据结构,在cmd下输入下面命令:

expdp 用户名/密码@IP地址:端口/要连接的数据库实例名 DIRECTORY=BACKUPDIR  schemas=用户口1,用户2,用户3 content=metadata_only DUMPFILE=DDL1.dmp logfile=DDL.log parallel=3 compression=ALL

对于备份目录BACKUPDIR可以用下面的方法创建:

先查询数据库中的备份目录:

select * from dba_directories;

创备份目录:

create or replace direcotry BACKUPDIR as 'd:\data_bak';

然后在d盘下创建目录data_bak;

如果是要把数据导入到新建的数据库中,则要先创建用户及数据表空间:

create user 用户名1 identified by 密码;

grant dba to 用户名1;

create user 用户名2identified by 密码;

grant dba to 用户名2;

create user 用户名3 identified by 密码;

grant dba to 用户名3;

create tablespace  表空间名1 datafile 'd:\data_file\表空间名101.dbf' size 50m uniform size 128k;

create tablespace  表空间名2 datafile 'd:\data_file\表空间名201.dbf' size 50m uniform size 128k;

create tablespace  表空间名3 datafile 'd:\data_file\表空间名301.dbf' size 50m uniform size 128k;

设置数据库表空间为自动增长型:

alter database datafile 'd:\data_file\表空间名101.dbf' autoextend on;

alter database datafile 'd:\data_file\表空间名201.dbf' autoextend on;

alter database datafile 'd:\data_file\表空间名301.dbf' autoextend on;

如果要导入所有数据,又不知道有哪些表空间,可以用下面的sql查询数据库中有哪些表空间:

select * from dba_tablespaces;

其中除了下面5个系统默认的表空间,其他的都是用户创建的了:

SYSTEM

SYSAUX

UNDOTBS1

TEMP

USERS

导入数据,导入所有用户下的数据,在cmd命令提示符下,输入下面命令:

impdp 用户名/密码@IP地址:端口/要连接的数据库实例名 DIRECTORY=BACKUPDIR DUMPFILE=DDL1.dmp full=y

如果导入过程中,数据量太大,空间不够,可用下面的sql添加表空间:

alter tablespace 表空间名1 add datafile 'd:\data_file\表空间名1.dbf' autoextend on next 50m ;--需要先指定文件大小,否则提示无法创建文件

alter tablespace 表空间名2 add datafile 'd:\data_file\表空间名2.dbf' autoextend on next 50m ;

alter tablespace 表空间名3 add datafile 'd:\data_file\表空间名3.dbf' autoextend on next 50m ;

windows下,单个表空间数据文件不能超过32GB,如果超过就会报错::"表 TAT.CURVE 分区 SYS_P179521 无法通过 16 (在表空间 STAT 中) 扩展",就要用上面的方法增加表空间文件,下面是查询各个表空间大小的sql:

--查询系统各个表空间的大小及使用百分比情况

SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",

D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",

TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES)/D.TOT_GROOTTE_MB * 100,2),'990.99')"使用比",

F.TOTAL_BYTES "空闲空间(M)",F.MAX_BYTES "最大块(M)"

FROM (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,

ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES

FROM SYS.DBA_FREE_SPACE

GROUP BY TABLESPACE_NAME

) F,

(SELECT DD.TABLESPACE_NAME,ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB

FROM SYS.DBA_DATA_FILES DD

GROUP BY DD.TABLESPACE_NAME

) D

WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME

ORDER BY 4 DESC;

如果是磁盘空间不够了,又想把已导入的部分数据删除,节约出空间,可以用下面的方法,先查询出某用户下的所有表的删除sql,:

select 'truncate table stat.'||table_name||';' from dba_tables where owner='用户名';--注意这里的用户名要用大写(如果数据库里的是大写的)

然后再用上面查询出的sql 把不要的数据删除,数据删除后,再用下面查询生成的sql重新收缩表空间大小,把多余的空间释放出来,就可以继续导入其他数据了;

--生成收缩空闲表空间的sql

--首先,如果没有分配的空间不足100M,则不考虑收缩。

--收缩目标:当前数据文件大小 - (没分配空间- 100M)×0.8

--优点:可以直接执行生成的sql

select /*+ ordered use_hash(a,c) */

'alter database datafile '''||a.file_name||''' resize '

||round(a.filesize - (a.filesize - c.hwmsize-100) *0.8)||'M;',

a.filesize,

c.hwmsize

from

(

select file_id,file_name,round(bytes/1024/1024) filesize from dba_data_files

) a,

(

select file_id,round(max(block_id)*8/1024) HWMsize from dba_extents

group by file_id) c

where a.file_id = c.file_id

and a.filesize - c.hwmsize > 100;

写到这里,磁盘空间不够真是伤不起啊!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值