ORACLE一些导出导入问题记录和详细解决过程

知识补充

exp 和 expdp 是 Oracle 数据库中用于导出数据的两个工具,它们主要具有以下区别:

exp:exp 是传统的导出工具,也称为经典导出(Classic Export)。它是在早期版本的 Oracle 数据库中引入的,并且在兼容性和功能方面受到一些限制。exp 可以导出整个数据库、指定的表空间或用户的对象等,并将数据导出到一个二进制的、专用格式的文件中(以 .dmp 扩展名结尾)。但是,它不支持并行导出,因此在导出大量数据时可能较慢。此外,它不支持在导入过程中进行数据转换和转移。

expdp:expdp 是数据泵导出工具,也称为数据泵导出(Data Pump Export)。它是在 Oracle 10g 版本中引入的,并成为了主要的导出工具。与 exp 相比,expdp 提供了更多的功能和灵活性。它支持并行导出,可以利用多个进程来加速导出过程。此外,expdp 还支持在导出过程中进行数据转换、数据过滤、选择性导出等高级功能。它将数据以 XML 格式保存在文件中,并可以选择以 .dmp 或自定义扩展名保存。

总结:

exp 是传统的导出工具,功能相对较少,不支持并行导出和高级数据转换等功能。
expdp 是主要的导出工具,提供了更多的功能和灵活性,包括并行导出、数据转换和高级过滤等。
对于新的数据库导出任务,建议使用 expdp 工具。但是,如果您需要与旧版本兼容或需要执行特定任务,可以考虑使用 exp 工具。

ORACLE数据库导出出现问题

例:将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中

exp system/manager@TEST file=d:\daochu.dmp full=y

报错信息

EXP-00056: ORACLE error 12154 encountered
ORA-12154: TNS:could not resolve service name
EXP-00000: Export terminated unsuccessfully

原因

由于缺省的Oracle会将@符号后面的字串当作服务名来解析,所以不加处理是不行的。
有的企业因为安全规则的需要,口令中都会加入@符号。

方法一进行导出操作时转义口令中的@符号

通过转义,可以成功导出:

exp system/\"manager@TEST\" file=d:\daochu.dmp full=y

方法二使用不包含@符号的导出命令

(提示部分DIRECTORY 参数需要引用数据库中已定义的目录对象的名称,而不是操作系统的文件路径。写的是MY_DIRECTORY,而不是操作系统的文件路径

导出命令:
expdp username/password DIRECTORY=MY_DIRECTORY DUMPFILE=xxx.dmp LOGFILE=xxx.log SCHEMAS=数据库模式名

在Oracle数据库中,要创建一个目录对象,可以使用 CREATE DIRECTORY 语句。以下是创建目录对象的示例语法:

CREATE DIRECTORY directory_name AS 'directory_path';

directory_name 是您要创建的目录对象的名称。
directory_path 是目录的物理路径.

此外,还可以使用 ALL_DIRECTORIES 视图或 DBA_DIRECTORIES 视图来查询数据库中已定义的目录对象。例如,以下查询将获取数据库中所有已定义的目录对象的信息:

SELECT directory_name, directory_path
FROM all_directories;

在这里插入图片描述

这样我们就知道DIRECTORY参数中所需要填入的值了

我们可以通过执行以下SQL查询来检索所有的模式名称:

SELECT username FROM all_users;

在这里插入图片描述
导出成功后可以看到你的dmp文件已经被创建
在这里插入图片描述

ORACLE数据库导入出现问题

建立表空间

CREATE TABLESPACE XXXX
DATAFILE 'D:\app\Administrator\oradata\orcl\xxx.dbf'
SIZE 100M AUTOEXTEND ON NEXT 50M
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 256K;
DATAFILE 'D:\app\Administrator\oradata\orcl\xxx.dbf':定义了表空间的数据文件路径和文件名为 D:\app\Administrator\oradata\orcl\xxx.dbf。如果文件不存在,将**自动创建该文件**。
SIZE 100M:指定了初始大小为 100M。
AUTOEXTEND ON NEXT 50M:指定了在表空间空间不足时自动扩展,并且每次扩展大小为 50M。
EXTENT MANAGEMENT LOCAL:指定为本地管理方式。这意味着每个表和索引都将使用本地扩展管理,而不是全局位图扩展管理。
UNIFORM SIZE 256K:指定了统一的扩展大小为 256K。这表示每个扩展的大小都将固定为 256K。这有助于更有效地利用表空间空间。

建立用户

CREATE USER XXX IDENTIFIED BY XXX DEFAULT TABLESPACE 表空间名 TEMPORARY TABLESPACE temp;

参数说明:

IDENTIFIED BY XXX:指定了用户的密码为 “XXX”。可以根据需要更改密码。
DEFAULT TABLESPACE 表空间名:将用户的默认表空间指定为一个已经存在的表空间。需要将 “表空间名” 替换为实际存在的表空间名称。
TEMPORARY TABLESPACE temp:指定用户的临时表空间为 “temp”。临时表空间用于处理排序、分组等临时操作。

给用户赋予dba权限

GRANT CONNECT DBA TO XXX;
这条语句将授予用户 “XXX” 连接到数据库实例的权限以及 DBA (数据库管理员)权限。CONNECT 权限允许用户使用用户名和密码连接到数据库服务器,而 DBA 权限提供了管理数据库的广泛权限,允许用户执行数据库的各种管理任务。


请注意,执行此语句需要具备足够的权限,并且```确保用户 “XXX” 已经存在。```

请谨慎使用 DBA 权限,并只将其授予受信任的用户,其需要对数据库进行管理员级别的操作。

导入命令

impdp username/password directory=DIRECTORY_NAME dumpfile=xxx.dmp logfile=xxx.log SCHEMAS=数据库模式名
username/password:指定导入操作的用户名和密码。请将 “username” 替换为实际的用户名,将 “password” 替换为对应的密码。
directory=DIRECTORY_NAME:指定数据文件和日志文件所在的目录对象名称。请将 “DIRECTORY_NAME” 替换为有效的目录对象名称。
dumpfile=xxx.dmp:指定要导入的数据文件的名称。请将 “xxx.dmp” 替换为实际的数据文件名。
logfile=xxx.log:指定导入操作的日志文件的名称。请将 “xxx.log” 替换为实际的日志文件名。
SCHEMAS=数据库模式名:指定要导入的数据库模式的名称。请将 “数据库模式名” 替换为实际的数据库模式名。

请注意,在执行此命令之前,确保具有足够的权限来执行导入操作,并验证提供的目录对象、数据文件和日志文件的正确性。
创建目录可以使用如下命令

CREATE DIRECTORY DIRECTORY_NAME AS 'directory_path';

DIRECTORY_NAME:这是将要创建的目录对象的名称。您可以自定义一个名称,作为目录对象的标识符。
'directory_path':这是目录对象的实际路径。您需要提供有效的文件系统路径,该路径指定目录对象所在的位置。
**注意**要将导出的xxx.dmp文件放在目录对象的实际路径中

出现错误一

ORA-39171: 作业出现可恢复的等待。
ORA-01691: Lob 段 SWJTBIP01.SYS_LOB0000175518C00001$$ 无法通过 64 (在表空间 NNC_DATA01 中) 扩展
要解决这个问题,可以尝试以下几个步骤:
一:
检查表空间的可用空间:使用以下SQL语句查询表空间的使用情况:

SELECT tablespace_name, bytes, bytes - blocks*block_size as free_space
FROM dba_free_space
WHERE tablespace_name = 'XXXX';

二:如果表空间空间不足,可以考虑以下几种解决方法:

扩展表空间大小:增加表空间的大小来容纳LOB段。您可以使用ALTER TABLESPACE语句执行此操作。例如:

ALTER TABLESPACE XXX ADD DATAFILE '/path/to/new/datafile.dbf' SIZE 100M;

将 ‘XXX’ 替换为实际的表空间名,‘/path/to/new/datafile.dbf’ 替换为实际的数据文件路径,100M 替换为所需的大小。

要查询一个表空间所绑定的用户,您可以使用以下的查询:

SELECT DISTINCT owner
FROM dba_segments
WHERE tablespace_name = 'NNC_DATA01';

添加表空间完成后后,就可以看到他继续导入数据了,可以查看我们设置的log文件

在这里插入图片描述
等导入成功就可以看到数据已经加载进去了

出现错误二

impdp username/password directory=DIRECTORY_NAME dumpfile=SHUIWU.dmp logfile=shuiwu.log SCHEMAS=SWJTBIP02

ORA-39002: 操作无效
ORA-39165: 未找到方案 SWJTBIP02。
但是明明有存在方案SWJTBIP02

使用查询方案进行验证,显示该方案存在

SELECT username FROM dba_users WHERE username = 'SWJTBIP02';

在这里插入图片描述

方案未被导出:在进行导出操作之前,确保已经成功导出了要导入的方案。使用以下命令检查导出文件(.dmp)中的内容:
impdp username/password directory=DIRECTORY_NAME dumpfile=SHUIWU.dmp SQLFILE=sqlfile.sql
成一个SQL脚本(sqlfile.sql),其中包含要导入的方案的详细信息。检查该脚本是否包含你要导入的方案

检查脚本的时候发现我们导出时使用的是SWJTBIP01方案,所以我们要修改命令

impdp swjtbip/swjtbip directory=DIRECTORY_NAME dumpfile=SHUIWU.dmp logfile=shuiwu.log SCHEMAS=SWJTBIP01

将SCHEMAS后的参数修改为SWJTBIP01,使导出和导入的数据库模式都为同一个

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值