10.11.oracle备份与导入的艰辛之路

一: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.s’s 将数据库置于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用户不是当前用户,所以插入失败,改了之后就好了
最后成功图
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值