一、问题

现在手里有一个数据集是dmp格式的。因为不方便直接处理,所以需要将分块其读取到txt文件中。

dmp文件是oracle数据库的备份文件。

一、问题

二、Oracle登录

三、Scott 密码过期

四、导入dmp文件

五、表空间大小限制

六、导出数据

二、Oracle登录

Oracle的下载和安装过程都很顺利,所以现在的第一个问题是登录oracle。

在安装好oracle以后会弹出来一个Database Configuration Assistant 的窗口,我在这里的口令管理中修改了sys和system的密码,同时这里也可以解锁其他账户(比如scott)。

在开始菜单中的oracle目录下能找到sql plus,这是主要的操作界面。另外,也可以通过cmd窗口进入到sqlplus:

C:\Users\John Smith>sqlplus

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 3月 23 16:49:38 2018

Copyright (c) 1982, 2010, Oracle. All rights reserved.

请输入用户名:

需要注意几点:

sys以外的账户可以直接输入用户名和密码进入oracle,而sys不行。

sys登录必须指明角色为sysdba(数据库管理员)或者sysoper(数据库操作员),可以在cmd窗口下输入sqlplus sys/password as sysdba来登录,其中password为之前设置的密码。登录语句的具体语法是{[/][@]|/}[AS}{SYSDBA|SYSOPER}],其中connect_identifier默认通常为orcl。

在cmd窗口中输入sqlplus /nolog可以进入到sqlplus的界面而不登录到oracle,如果这个时候要登录到oracle则需要使用指令conn sys/password as sysdba。

如果在之前没有给scott用户解锁,是不能够使用scott/tiger登录的。给该用户解锁的命令为:

alter user scott account unlock;

三、Scott 密码过期

在执行导入命令的时候我尝试了使用scott账户,出现了以下问题:

ERROR:

ORA-28001: the password has expired

那么就是字面意思,这个账户密码过期了无法使用。我在cmd窗口下执行了sqlplus scott/tiger也是同样提示,但是会让输入new password,之后就没问题了。

但是问题是这个账户我刚刚unlock,oracle也是今天下载的,怎么会出现过期的问题呢?

四、导入dmp文件

使用下面的命令将dmp文件导入到数据库:

imp system/password file=D:\data.dmp full=y

注:这条命令是在cmd窗口中执行的,而且用的是system账户。sys账户需要指明sysdba身份。

在导入过程中有一条错误一直重复出现。出现的错误为:

IMP-00003: 遇到 ORACLE 错误 959

ORA-00959: 表空间 'TR_GPSTRACK_CZC_SPACE' 不存在

解决这个问题的方法也是比较多的,比如:

https://blog.csdn.net/lwei_998/article/details/6587339

我是通过新增加了一个名为TR_GPSTRACK_CZC_SPACE的tablespace来解决这个问题的:

SQL> create tablespace TR_GPSTRACK_CZC_SPACE datafile 'TR_GPSTRACK_CZC_SPACE.dbf' size 30000m;

一开始的时候导入没问题。第二天我来看结果的时候发现另外一个错误:表空间不足。

五、表空间大小限制

发生错误时的提示为:

IMP-00003: 遇到 ORACLE 错误 1659

ORA-01659: 无法分配超出 1 的 MINEXTENTS (在表空间 TR_GPSTRACK_CZC_SPACE 中)

从

https://docs.oracle.com/cd/E11882_01/server.112/e17766/e1500.htm#sthref843上找到的文档显示该错误的具体内容为:

ORA-01659: unable to allocate MINEXTENTS beyond string in tablespace string

Cause: Failed to find sufficient contiguous space to allocate MINEXTENTS for the segment being created.

Action: Use ALTER TABLESPACE ADD DATAFILE to add additional space to the tablespace or retry with smaller value for MINEXTENTS, NEXT or PCTINCREASE

因此我决定根据提示再添加一个datafile:

SQL> alter tablespace TR_GPSTRACK_CZC_SPACE add datafile 'TR_GPSTRACK_CZC_SPACE_2.dbf' size 30000m;

然后又报以下错误:

IMP-00058: 遇到 ORACLE 错误 1688

ORA-01688: 表 SYSTEM.TR_GPSTRACK_CZC_20140818 分区 PAR1_TR_GPSTRACK_CZC_20140818 无法通过 8192 (在表空间 TR_GPSTRACK_CZC_SPACE 中) 扩展

IMP-00003: 遇到 ORACLE 错误 1658

ORA-01658: 无法为表空间 TR_GPSTRACK_CZC_SPACE 中的段创建 INITIAL 区

官方文档仍然提示Use ALTER TABLESPACE ADD DATAFILE to add additional space to the tablespace 来解决问题。我的硬盘上面确实又分出去了30G给数据库,但仍然不行,看来一时半会是不能完全导入数据库了。

接下来我将尝试读取部分数据。

六、导出数据

首先下载一个navicat for oracle:

http://www.navicat.com.cn/products/navicat-for-oracle

新建连接后尝试登陆,发现报错:ORA-12541:TNS:无监听程序

启用监听器后就可以了,具体步骤参考:

https://blog.csdn.net/hao134838/article/details/51475380

navicat for oracle打开表以后可以直接导出为txt文件,操作十分方便。

打开navicat之后发现可以导入数据泵,可能比之前的操作简单许多,说不定也能避免出错。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐