oracle的备份与还原

315 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

一:oracle的备份

1.先创建一个地址存储备份的文件

create directory backfile as 'E:\oracleDataCopy' --创建备份地址--backfile为备份文件

2.在dos命令窗口写expdp语句

expdp wangxu/123456@orcl directory = backfile dumpfile=wangxuOracle-2018-09-30.DUMP logfile = wangxuOracle-2018-09-30.log

--expdp 用户名/密码@实例名 directory=目录名 dumpfile=备份文件名.DUMP logfile=备份日志名.log --用户名,密码即为你所要备份的数据库名和对应密码;实例名为oracle实例,一般情况下为orcl;目录名即步骤一所选择或新建的目录; 备份文件名和备份日志名,可任意,建议为数据库名加当天日期

二:oracle的导入(impdp)

1.新建一个用户名

create user brdb_wangxu_test identified by 123456

2.新建一个表空间
create tablespace brdb_wangxu_testtablespace datafile 'D:\Users\User\Desktop\oracleData\wxoracle\wxoracle.dbf' size 512M autoextend on next 50M maxsize unlimited permanent --datafile为你存放表空间的地址

3.赋予用户默认表空间

alter user brdb_wangxu_test default tablespace brdb_wangxu_testtablespace

4.赋予用户权限

grant connect,resource,dba to brdb_wangxu_test

5.创建一个虚拟目录,该目录是你存放备份地址的地方,用以寻找.dump文件

create or replace directory dmpdir as 'E:\oracleDataCopy';

6.赋予用户读写的权限

grant read,write on directory dmpdir to brdb_wangxu_test

--前面 是导入的基本操作,下面是重要操作,一个失误都可能失败

7.在dos命令窗口执行导入语句

impdp brdb_wangxu_test/123456@orcl directory = dmpdir dumpfile=WANGXUORACLE-2018-09-30.DUMP
remap_schema=wangxu:brdb_wangxu_test remap_tablespace=cnbiwx_tablespace:brdb_wangxu_testtablespace

impdp 用户名/密码@实例名 directory=目录名 dumpfile=还原文件名.DUMP logfile=还原日志名.log --用户名为你步骤一新建的;实例名为oracle实例,一般情况下为orcl;目录名即你存放备份文件的目录(步骤5建的); 还原文件名为你要还原的数据库备份文件;还原日志名,可任意,建议为数据库名加当天日期
remap_schema=原用户名(即备份用户名):brdb_kjxy(即新建用户名) --如还原用户名与备份用户名一样该行可省略 remap_tablespace=原表空间:新建表空间 --如还原表空间与原用户表空间一样该行可省略,该行可不止一行,有多少表空间可写多少相同语句,中间用逗号隔开 --注意:通常导入时,你必须知道备份数据的表空间名称,所以我们进行备份前,应该先查询其表空间名称,用如下语句

select username,default_tablespace from dba_users where username='WANGXU'(用户名要大写)

--查所有用户的用户名及其默认表空间 select username,default_tablespace,temporary_tablespace from dba_users;

导入过程中出现的问题:

1.出现表空间不存在错误,该错误是你用户默认的表空间我们查到,但是用户下面的表有可能连接其他的表空间,所以出现,如下图问题哦 在这里插入图片描述 解决问题的办法创建多个表空间 create tablespace QRKJTABLESPACE_01 datafile 'D:\Users\User\Desktop\oracleData\qrkj006\QRKJTABLESPACE_01oracle.dbf' size 1000M autoextend on next 50M maxsize unlimited permanent

create tablespace QRKJTABLESPACE_02 datafile 'D:\Users\User\Desktop\oracleData\qrkj006\QRKJTABLESPACE_02oracle.dbf' size 1000M autoextend on next 50M maxsize unlimited permanent

create tablespace QRKJTABLESPACE_03 datafile 'D:\Users\User\Desktop\oracleData\qrkj006\QRKJTABLESPACE_03oracle.dbf' size 1000M autoextend on next 50M maxsize unlimited permanent

create tablespace QRKJTABLESPACE_04 datafile 'D:\Users\User\Desktop\oracleData\qrkj006\QRKJTABLESPACE_04oracle.dbf' size 1000M autoextend on next 50M maxsize unlimited permanent 2.出现实际值与最大值不符合,你导出的数据库字符集和你导入的数据库字符集不一致出现的问题(要么改字段大小,要么该数据库字符集)--我这改的是字符集 在这里插入图片描述

这里改的数据库字符集过程中也会出现一些错误

1.--查看字符集 select * from V$NLS_PARAMETERS 在这里插入图片描述

2.直接写修改字符集又会出现这个问题 在这里插入图片描述

3.该错误必须要用sysdba登录,才能进行修改

--使数据库处于 RESTRICTED 模式

ALTER SYSTEM ENABLE RESTRICTED SESSION

--取消模式

alter system disable restricted session; 4.修改后,会出现必须使其他session停止,才能运行

select sid, serial#,program ,status from v$session; (可以查session的状态)总之一环套一环, 下面解决字符集的问题

1.用sqlplus先登录sysdba用户

2.查询该数据库的字符集

在这里插入图片描述

3.将数据库置于restricted mode下

SQL> alter system enable restricted session; System altered.

4.修改字符集到ZHS16GBK

ALTER DATABASE character set INTERNAL_USE ZHS16GBK

报这个错误

ORA-12721: operation cannot execute when other sessions are active 当前有连接处于active状态,kill掉session或者重启数据库。 执行下列命令

`sQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount; ORACLE instance started.

Total System Global Area 4275781632 bytes Fixed Size 2260088 bytes Variable Size 922747784 bytes Database Buffers 3338665984 bytes Redo Buffers 12107776 bytes Database mounted.

SQL> alter system enable restricted session;

System altered.

SQL> alter database open;

Database altered.

SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

Database altered.

SQL> alter system disable restricted session;

System altered.

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')

AMERICAN_AMERICA.ZHS16GBK`

字符集修改成功

3.出现表和视图不存在 在这里插入图片描述 该错误一开始以为是表没建立,当我把表建立时还是出现了这个问题,于是我把该触发器语句拿到sql执行,出现表不存在,细心之下发现 在这里插入图片描述 插入语句时,这个1201用户不是当前用户,所以插入失败,改了之后就好了 最后成功图 在这里插入图片描述