`

Oracle用imp导入 用户表时选择表空间的问题

阅读更多
引用
【imp导入 用户表时选择表空间的问题】

     在一个数据库里把一个用户A的在表空间AA上的表用exp导出到exp.dmp文件中,再把它导入到另一台机器上的数据库里,这时她用的是用户B,默认表空间是BB,但是用imp导入时我们发现表是导入到了B用户下,但是还是存在了AA表空间里面,但是她需要导入到BB里

SQL> create user myhuang identified by myhuang default tablespace myhuang;//先创建一个用户
SQL> grant resource,connect to myhuang;
SQL> grant dba to myhuang;//赋DBA权限
SQL> revoke unlimited tablespace from myhuang;//撤销此权限
SQL> alter user myhuang quota 0 on system;//将用户在System表空间的配额置为0

SQL> alter user myhuang quota unlimited on myhuang;//设置在用户在myhuang表空间配额不受限。

经过上述设置后,就可以用imp导入数据,数据将会进入指定的myhuang表空间:

C:\Documents and Settings\myhuang>imp system/123456@vdb fromuser=lnxh touser=myhuang file=G:\myhuang\lnxh.dmp ignore=y grants=n

顺便说两个小问题:
(1)IMP-00003: 遇到 ORACLE 错误 1658
ORA-01658: 无法为表空间 MYHUANG 中的段创建 INITIAL 区
通常这个问题可以通过Resize增加表空间数据文件大小来解决。
(2)删除表空间
SQL> drop tablespace myhuang including contents and datafiles;


引用
【如何移动一个带有lob字段的表到另外一个表空间】

     大家都知道在我们建立含有lob字段的表时,oracle会自动为lob字段建立两个单独的segment,一个用来存放数据,另一个用来存放索引,并且它们都会存储在对应表指定的表空间中。但是当我们用alter table tb_name move tablespace tbs_name;来对表做空间迁移时只能移动非lob字段以外的数据,而如果我们要同时移动lob相关字段的数据,我们就必需用如下的含有特殊参数据的文句来完成,它就是: 
alter table tb_name move tablespace tbs_name lob (col_lob1,col_lob2) store as(tablesapce tbs_name); 

SQL> alter table test_blob move tablespace SYSTEM;
Table altered

SQL> ALTER TABLE test_blob MOVE
  2  TABLESPACE tools
  3  LOB (FILE_BIN,FILE_BIN2) STORE AS
  4  (TABLESPACE tools);
Table altered

SQL> select t.segment_name, t.segment_type, t.tablespace_name
  2  from sys.user_segments t
  3  where t.segment_name like 'SYS_%';
SEGMENT_NAME                  SEGMENT_TYPE       TABLESPACE_NAME

SYS_IL0000025842C00003$$      LOBINDEX           TOOLS
SYS_IL0000025842C00002$$      LOBINDEX           TOOLS
SYS_LOB0000025842C00002$$     LOBSEGMENT         TOOLS
SYS_LOB0000025842C00003$$     LOBSEGMENT         TOOLS

6 rows selected


引用
【导入含有blob字段的表到不同的表空间的问题】

      官方文档说到了,不针对含有blob字段等的表,如果导入,会报“ORA-00959: 表空间'EXAMPLE'不存在”的错误。那么,下面主要介绍如何导入含有blob字段的表到不同的表空间的一种方法(针对oracle 9i,10g可以用impdp来解决,其中有个参数remap_tablespace=as:bs)
步骤:
1、获取含有blob字段表的DDL:
   可以使用oracle pl/sql包获取,也可以使用第三方工具toad、pl/sql developer
SQL> set long 4000
SQL> set pagesize 0
SQL> select dbms_metadata.get_ddl('TABLE','T_RES_PATIENT') from dual; 
1、获取含有blob字段表的DDL:可以使用oracle pl/sql包获取,也可以使用第三方工具toad、pl/sql developer。

------------------------------------------------------------------------------
SQL> set long 4000
SQL> set pagesize 0
SQL> select dbms_metadata.get_ddl('TABLE','T_RES_PATIENT') from dual; 

  CREATE TABLE "WHU"."T_RES_PATIENT"(    
"ONECARD_NO" VARCHAR2(20) NOT NULL ENABLE,
"IDENTITYCARD_NO" VARCHAR2(30),
"ADDRESS" VARCHAR2(100),
"WORKPLACE" VARCHAR2(100),
"PATIENT_NAME" VARCHAR2(64) NOT NULL ENABLE,
"BIRTHDAY" VARCHAR2(10),
"CASTE" VARCHAR2(10),
"GENDER" VARCHAR2(4),
"NOTE" VARCHAR2(128),
"PHOTO" BLOB,
"MARRY" VARCHAR2(10),
"BADDRESS" VARCHAR2(128),
"NATION" VARCHAR2(20),
"COUNTRY" VARCHAR2(20),
"RNAME" VARCHAR2(20),
"RELATION" VARCHAR2(20),
"PADDRESS" VARCHAR2(128),
"HADDRESS" VARCHAR2(128),
"TYPE" VARCHAR2(10) NOT NULL ENABLE,
"TEL" VARCHAR2(20),
"ZYTYPE" VARCHAR2(10),
"CASE_NO" VARCHAR2(20) NOT NULL ENABLE,
"CARD_ID" VARCHAR2(3),
"GENDER_NO" VARCHAR2(1),
"TITLE_NAME" VARCHAR2(16),
"COL_NAME" VARCHAR2(32),
CONSTRAINT "PK_RES_PATIENT" PRIMARY KEY ("CASE_NO")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "WHU"  ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "WHU"
LOB ("PHOTO") STORE AS (
TABLESPACE "WHU" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10
NOCACHE
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))
------------------------------------------------------------------------------ 

2、修改获取的DDL中表空间名称为新的表空间名称,实例中,修改原有表空间“WHU”为“WOLF”,然后在要导入数据的数据库中创建表。

------------------------------------------------------------------------------
SQL> CREATE TABLE "T_RES_PATIENT"
2     (    "ONECARD_NO" VARCHAR2(20) NOT NULL ENABLE,
3          "IDENTITYCARD_NO" VARCHAR2(30),
4          "ADDRESS" VARCHAR2(100),
5          "WORKPLACE" VARCHAR2(100),
6          "PATIENT_NAME" VARCHAR2(64) NOT NULL ENABLE,
7          "BIRTHDAY" VARCHAR2(10),
8          "CASTE" VARCHAR2(10),
9          "GENDER" VARCHAR2(4),
10          "NOTE" VARCHAR2(128),
11          "PHOTO" BLOB,
12          "MARRY" VARCHAR2(10),
13          "BADDRESS" VARCHAR2(128),
14          "NATION" VARCHAR2(20),
15          "COUNTRY" VARCHAR2(20),
16          "RNAME" VARCHAR2(20),
17          "RELATION" VARCHAR2(20),
18          "PADDRESS" VARCHAR2(128),
19          "HADDRESS" VARCHAR2(128),
20          "TYPE" VARCHAR2(10) NOT NULL ENABLE,
21          "TEL" VARCHAR2(20),
22          "ZYTYPE" VARCHAR2(10),
23          "CASE_NO" VARCHAR2(20) NOT NULL ENABLE,
24          "CARD_ID" VARCHAR2(3),
25          "GENDER_NO" VARCHAR2(1),
26          "TITLE_NAME" VARCHAR2(16),
27          "COL_NAME" VARCHAR2(32),
28           CONSTRAINT "PK_RES_PATIENT" PRIMARY KEY ("CASE_NO")
29    USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
30    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
31    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
32    TABLESPACE "WOLF"  ENABLE
33     ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
34    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
35    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
36    TABLESPACE "WOLF"
37   LOB ("PHOTO") STORE AS (
38    TABLESPACE "WOLF" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10
39    NOCACHE
40    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
41    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)); 

表已创建。 

SQL> desc t_res_patient;
名称                                      是否为空? 类型
----------------------------------------- -------- ---------------------------- 

ONECARD_NO                                NOT NULL VARCHAR2(20)
IDENTITYCARD_NO                                    VARCHAR2(30)
ADDRESS                                            VARCHAR2(100)
WORKPLACE                                          VARCHAR2(100)
PATIENT_NAME                              NOT NULL VARCHAR2(64)
BIRTHDAY                                           VARCHAR2(10)
CASTE                                              VARCHAR2(10)
GENDER                                             VARCHAR2(4)
NOTE                                               VARCHAR2(128)
PHOTO                                              BLOB
MARRY                                              VARCHAR2(10)
BADDRESS                                           VARCHAR2(128)
NATION                                             VARCHAR2(20)
COUNTRY                                            VARCHAR2(20)
RNAME                                              VARCHAR2(20)
RELATION                                           VARCHAR2(20)
PADDRESS                                           VARCHAR2(128)
HADDRESS                                           VARCHAR2(128)
TYPE                                      NOT NULL VARCHAR2(10)
TEL                                                VARCHAR2(20)
ZYTYPE                                             VARCHAR2(10)
CASE_NO                                   NOT NULL VARCHAR2(20)
CARD_ID                                            VARCHAR2(3)
GENDER_NO                                          VARCHAR2(1)
TITLE_NAME                                         VARCHAR2(16)
COL_NAME                                           VARCHAR2(32)
------------------------------------------------------------------------------ 

3、从原有数据库中导出这张表数据

------------------------------------------------------------------------------
E:\dbTest>exp xxxx/xxxx@xxxx tables=(t_res_patient) file=e:\dbTest\expPatient.dmp log=e:\dbTest\expPatinet.log 

Export: Release 9.2.0.1.0 - Production on 星期四 8月 13 12:08:04 2009 

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved. 

连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集 

即将导出指定的表通过常规路径 ...
. . 正在导出表                   T_RES_PATIENT      63443 行被导出
在没有警告的情况下成功终止导出。
------------------------------------------------------------------------------ 

4、导入数据:使用ignore=Y参数导入。

------------------------------------------------------------------------------
E:\dbTest>imp ****/**** tables=(t_res_patient) ignore=Y file=e:\dbTest\expPatient.dmp log=e:\dbTest\impPatient.log 

Import: Release 9.2.0.1.0 - Production on 星期四 8月 13 12:16:39 2009 

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved. 

连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production 

经由常规路径导出由EXPORT:V09.02.00创建的文件 

警告: 此对象由 ****导出, 而不是当前用户 

已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
. 正在将****的对象导入到 ****
. . 正在导入表                 "T_RES_PATIENT"      63443行被导入
成功终止导入,但出现警告。
------------------------------------------------------------------------------

查询导入数据记录:

------------------------------------------------------------------------------
SQL> select count(*) from t_res_patient; 

  COUNT(*)
----------
63443
------------------------------------------------------------------------------ 

由此可见导入成功。


http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c42246071d35bcfa6c714c519280613652e91e09b7b07d6f310923b690ca9f4aaae8d36a659c6269304a895662d40edfba5154cb37e72afeae69f0ca8325e0dfc5a5de4325c844040ad0aed60a1715ba7886112695a28e38114861cdfa3115e829703eee2557b737ee90317970f7e1dc2c5bb32dc7116780ae45a74e12a263d4081a5453d13aa67b203131905857f8534c0285ea2df05a7a5754c05fb2c9d6c69f5ffadbfd41e9edbca9&p=893d890d85cc47fa10bd9b7f0f00&user=baidu
分享到:
评论
2 楼 sd6815892 2012-03-17  
太感谢了,帮我解决了个问题
1 楼 javalcj 2011-10-31  
你好,想请教一下关于imp往其他表空间导数据的问题,我用了你的方法但是报错,能方便留个联系方式吗,QQ什么的,你加我也可以41465181,谢谢

相关推荐

    Oracle中如何使用imp语句导入不同表空间?

    在实际工作中,有时需要将exp导出的历史备份dmp文件进行恢复,若之前的建表语句及表空间名无法找到,则直接用imp语句进行导入的话可能...使用本文方法可将exp导出的数据用imp导入不同的表空间,从而有效解决此问题。

    oracle导入时表空间不一致解决方法

    ### Oracle导入时表空间不一致解决方法 在Oracle数据库管理中,经常会出现因表空间不一致而导致的数据导入失败的问题。本文将详细介绍如何解决这一常见问题,并确保数据能够顺利地从一个环境迁移到另一个环境中。 ...

    ORACLE导入数据文件到指定的表空间

    "ORACLE导入数据文件到指定的表空间"这个主题涉及了Oracle数据库的导入工具(IMP)、数据泵(IMPDP)以及如何规划和管理表空间。 首先,我们需要了解Oracle的导入工具IMP。IMP是Oracle Data Pump Import的简称,它...

    Oracle11G导入导出(imp和exp)少表解决方法

    然而,在使用 Oracle 11G 时,用户可能会遇到一些问题,例如无法导出空表的问题。在本文中,我们将讨论如何解决这个问题,并提供了多种方法来导入和导出数据。 一、解决无法导出空表的问题 在 Oracle 11G 中,默认...

    oracle 删除表后imp导入数据的脚本

    一般的做法是直接删除表空间然后imp导入数据,但是我这边的情况是远程有一个web始终连着,为了免得每天还要去启动那个web服务,我就采用了这个做法,只删除表,这样不会断开连接,注意,这个web只是白天在用。...

    Oracle11G导入导出(imp和exp)少表解决方法.docx

    Oracle 11G 的导入导出工具 exp 和 imp 是数据库管理员进行数据迁移、备份和恢复的重要工具。然而,在11G R2 版本中,由于一个新特性,空表在没有数据的情况下不会分配 segment,导致无法通过 exp 导出。这个问题...

    Oracle dmp文件导出导入(还原)到不同的表空间和不同的用户操作

    **问题描述**:在使用`IMP`命令导入DMP文件时出现“IMP-00038:无法转换为环境字符集句柄”错误。 - **解决方法**: - 使用`IMPDP`命令代替`IMP`命令进行导入。 - 示例命令: ```sql IMPDP username/password ...

    Oracle数据库中imp导入数据

    ### Oracle数据库中IMP导入数据详解 #### 一、引言 在Oracle数据库管理与维护过程中,数据导入是一项非常重要的操作。对于刚接触Oracle的新手来说,掌握如何使用`IMP`命令进行数据导入尤为关键。本文将详细介绍...

    Oracle expimp,备份或导入时注意的事项

    为避免此问题,可以设置`compress=N`来导出大表,这样每个数据块就不会被压缩,从而降低导入时的空间需求。 字符集不匹配是另一个潜在问题。如果exp和imp使用的字符集不同,导入操作会失败。这时,可以通过调整操作...

    ORACLE 导入导出表空间文档

    ### Oracle 数据库表空间管理与数据导入导出详解 #### 表空间概念及管理 在Oracle数据库中,**表空间**是逻辑存储结构的一部分,用于组织数据库中的数据和索引。一个表空间由一个或多个数据文件组成,这些数据文件...

    oracle_imp_exp.rar_ oracle_imp_exp_oracle_oracle exp_oracle_imp_

    在实际应用中,Oracle的导入导出操作涉及到多个参数,例如表空间、用户、模式、数据文件、导出类型等。使用自定义工具可以定制化这些参数,避免手动执行SQL脚本的繁琐。同时,通过记录操作信息,对于大型数据库的...

    Oracle数据库逻辑增量备份之exp/imp

    exp工具将这些信息写入一个.dmp文件,该文件可以在不同的Oracle环境之间传输,并使用imp工具重新导入。 22、exp语法和参数 exp命令支持多种参数,例如 owner(用户)、file(输出文件名)、log(日志文件)、tables...

    oracle创建用户、表空间、导入导出命令

    ### Oracle 创建用户、表空间及导入导出命令详解 #### 一、创建表空间 在 Oracle 数据库中,表空间是存储数据的基本单位。表空间由一个或多个数据文件组成,用于存储表、索引等数据库对象。创建表空间通常包括创建...

    oracle表的导入导出-命令

    本文将详细解析Oracle数据库的导入导出命令及其使用方法。 数据导出: Oracle提供了一个名为`exp`的实用程序(在较新版本中为`expdp`)来导出数据库对象,如表、视图、索引等。以下是一些基本的导出命令: 1. 完整...

    oracle导入导出命令(imp、exp)

    `impdp`(Import Data Pump)是Oracle提供的一种高效的数据导入工具,它能够实现表空间、表或整个数据库的快速导入,相比传统`imp`命令,在性能和功能上都有显著提升。下面将详细介绍`impdp`的一些关键选项及其应用...

    Oracle创建删除用户、角色、表空间、导入导出命令总结.txt

    ### Oracle 创建删除用户、角色、表空间、导入导出命令总结 #### 一、表空间管理 表空间是Oracle数据库中的基本存储单元,用于管理数据文件。以下为创建临时表空间与非临时表空间的命令示例: 1. **创建临时表...

    oracleClient安装包exp和imp文件.zip

    1. **数据迁移**:当需要将数据从一个Oracle数据库迁移到另一个Oracle数据库时,可以使用EXP和IMP。 2. **数据库备份和恢复**:定期执行EXP导出,可以在数据库出现问题时快速恢复到某个已知的良好状态。 3. **开发和...

    linux下向oracle中导入dmp文件

    Linux 下向 Oracle 数据库中导入 dmp 文件需要按照一定的步骤进行,包括登录 Linux 系统、创建用户表空间、创建用户、赋予权限、创建临时表空间和导入 dmp 文件等。只有按照正确的步骤进行,才能成功地将 dmp 文件...

    Oracle创建用户、表空间、导入导出、...命令

    ### Oracle创建用户、表空间、导入导出命令详解 #### 创建临时表空间 在Oracle数据库管理中,创建临时表空间是十分重要的步骤之一,尤其是在处理大量临时数据或排序操作时。临时表空间主要用于存储排序、索引创建...

Global site tag (gtag.js) - Google Analytics