Oracle的导入导出命令有2种,即【imp--exp】【impdp--expdp】。

Imp\impdp是导入命令,exp/expdp是导出命令。这2种导入导出命令最大的区别是【impdp--expdp】比【imp--exp】更快,且需要注意导入方式完全取决于导出方式,expdp导出的数据库必须使用impdp方式导入。

流程简介:

Impdp:创建目录存放导入的文件----创建表空间[和导出的表空间一致]-----创建用户[如果已存在同名用户需要先删除,删除时先从dbcnt删除,再在sqlplus执行drop命令]----用户授权----cmd命令导入

Expdp:创建目录存放导出的文件--确定导出的范围--cmd执行导出语句

创建目录

create directory dpdata as 'E:\oracle\dump’;

查询目录

select * from dba_directories;

删除目录

drop directory 目录名称;

创建表空间

create tablespace data---具体表空间名

datafile ‘E:\app\Administrator\oradata\orclup\data.dbf’  --存储地址

size 1024M  初始大小

autoextend on next 100M  --每次扩展100M

创建用户

create user username identified by password  --创建用户信息

default tablespace user_data  ---默认表空间

temporary tablespace user_temp;---临时表空间

用户授权

grant connect,resource,dba to username with admin option;

grant unlimited tablespace to username ;

Impdp导入

在cmd执行如下语句,导入表空间默认和导出时的表空间一致,如果需要更改可用使用remap_schema(更改用户名)及remap_tablespace(更改存储表空间)关键字。SCHEMAS是需要复制的用户

Impdp system/123456@192.168.6.160:1521/ORCLUP DIRECTORY=DATA_PUMP_DIR DUMPFILE=.DMP SCHEMAS=用户 logfile=20210105.log

expdp导出

创建导出存放目录--确定导出范围--cmd执行导出命令

1.导出整个数据库expdp system/123456 DIRECTORY=DPDATA DUMPFILE=自定义导出文件名.dmp FULL=y

2.导出指定的账套expdp USERNAME/PASSWORD@orcl schemas=指定用户 DIRECTORY=DPDATA DUMPFILE=自定义文件名.dmp logfile=expdp.log;

以下是补充内容

Imp导入简介

在cmd执行如下语句

  imp 用户名/密码@数据库实例名  

  file=C:\data\filename.dmp    -- 配置待导入的dmp文件

  log=C:\data\logname.log     -- 配置要导入时生成的日志文件地址(可不配置)

  [fromuser=source用户名    -- 配置dmp导出的数据库的用户名(仅在根据用户名导入数据时配置)

  touser=target用户名     -- 配置dmp要导入的数据库的用户名(仅在根据用户名导入数据时配置)

  |full=y]        -- 配置导入文件中的全部内容,有可能有多个用户的内容

  ignore=y;    -- 配置导入的时候,如果没有表,创建表并导入数据,如果已经存在的表,忽略创建表,但不忽略导入。

示例:

imp username/password@10.12.2.18:1521/orcl  file=E:\DBinstallpackageAndBackup\dpdump\85550003.dmp   fromuser=来源用户 touser=目标用户 log=E:\DBinstallpackageAndBackup\dpdump文件名称.log IGNORE=Y

表空间扩容

设置自动增长可用大小

先看下数据库表空间的存储情况,8k的块最大可以放32G,如果是8k但是可用空间不足32又满了可先设置自动增长

查询表空间是否自动扩容SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;

如果表空间确实满了,需要增加数据块

ALTER TABLESPACE "表空间名称" --指定增长表空间

ADD DATAFILE 'E:\app\Administrator\oradata\orclup\data2.dbf' --存放数据块的位置

SIZE 1024M AUTOEXTEND ON NEXT 200M;  ---自增,满了再扩200m

附上2个参考链接

 Oracle表空间满了之如何扩容-CSDN博客

解决Oracle报错ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展__ora01653无法通过8192扩展

创建数据块

create tablespace DATAname datafile '/u01/app/oracle/oradata/orcl/DATA.dbf' size 2048m AUTOEXTEND ON NEXT 200M

删除用户提示无法删除当前已连接的用户

原因:有用户正在连着这个数据库

查询一下数据中有没有用户在使用

select username,sid,serial#,paddr from v$session where username='替换用户名';

然后把session删了

alter system kill session '634,7';--这个是sid,serial

再删除用户

 drop user ecity CASCADE;

修改Oracle系统管理员SYS的密码

1.首先进入 Oracle 安装目录,形如 C:\oraclexe\app\oracle\product\11.2.0\server\database>

删除或重命名 PWDorcl.ora 文件。

2.在当前目录输入cmd调命令行窗口执行orapwd file=PWDorcl.ora password=mypassword entries=5 force=y

Oracle账号被锁ORA28000

1.查看用户使用的概要文件名,一般为DEFAULT:select username,profile from dba_users;

2.查看概要文件中设置的密码错误后限制的登录次数select * from dba_profiles where profile='DEFAULT' and resource_name='FAILED_LOGIN_ATTEMPTS';

3.修改连接数不受限制:alter profile default limit failed_login_attempts unlimited;

4.查询用户状态,解锁用户:

select username,account_status from dba_users;

alter user user_name account unlock;

oracle11g导出表时空表导不出解决方案

     oracle11g用exp命令导出数据库表时,有时会发现只导出了一部分表时而且不会报错,原因是有空表没有进行导出,之前一直没有找到方法于是用最笨的方法重新建这些空表,当然在我们实际当中表的数量大时我们该怎么办??? oracle10g版本中没有这样的问题。

       于是查资料发现oracle11g有个新特性,增加了一个新特性"deferred_segment_creation" 含义是段延迟创建,默认是true。

       具体是什么意思呢?我们来解释下:

       如果这个参数设置为true,你新创建了一个Table,并且没有向其中插入数据,那么这个表不会立即分配extend,也就是不占数据空间,即表不分配segment以节省空间,所以这些表也没能导出来。在系统表user_tables中也可以看到segment_created的字段里是“NO”或者“YES”说明了某张表是否分配了segment。说白了是为了可以节省少量的空间。

   我所使用的解决方法:

   >>> 建对空表分配空间的SQL命令。

         1.查询当前用户下的所有空表,一个用户最好对应一个默认的表空间,命令如下:

  >SQL:  select table_name from user_tables where num_rows='0'

2.根据上述查询的语句,可以构建针对空表分配空间的命令语句,具体如下;

          >SQL:select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null(注意:很多教程没有这里,这里是有可能为空的)

上述代码可产生批量的修改表extent的SQL语句(有多少张空表就产生多少条),我们只需要将其生成的所有sql代码全部执行,就可以给每一张已经存在的表来分配segment,就OK了。

          再用exp命令进行导出即可。

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: