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命令进行导出即可。
推荐链接
发表评论