重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如何用sys as sysdba权限连接数据库进行Exp/Imp
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、虚拟空间、营销软件、网站建设、重庆网站维护、网站推广。
Windows:
exp 'sys/change_on_install@instance as sysdba' tables=scott.emp
Unix or Linux (you need to 'escape' the single quote):
exp /'sys/change_on_install@instance as sysdba/' tables=scott.emp
VMS (use [double_quote][single_quote]...[single_quote][double_quote]):
exp "'sys/change_on_install@instance as sysdba'" tables=scott.emp
小结:
1、USERID 必须是命令行中的第一个参数。(如imp help=y里显示的内容)
所以如exp ‘ as sysdba’等价于exp USERID=‘as sysdba’,即可以省略USERID不写。
2、imp/exp命令里参数与参数间的间隔是用空格来区分的(等号两边的空格不算),于是像如下语句:exp USERID= sys/123456 as sysdba就不能被imp/exp工具所理解(参数USERID= sys/123456可以解析出来,但是as sysdba不知道如何理解了,as或sysdba又不属于设定的参数名)。而oracle公司设计的软件里一般用单引号将一字符串常量包括起来。将上面语句改为exp USERID= ’sys/123456 as sysdba‘的话,imp/exp工具就认为sys/123456 as sysdba整体是一个字符串,故而就是参数USERID的一个值。
3.
如果是写在参数文件中,则连接字符串需要用双引号了:
USERID=" as sysdba"
Parameter file.
You can also specify the username in the parameter file. In this situation, you have to enclose the connect string with a double quote character. However, to prevent possible security breaches we advice you to stop using the USERID parameter in a parameter file.
Contents of file exp.par:
USERID="sys/change_on_install@instance as sysdba"
TABLES=scott.emp
Run export with:
exp parfile=exp.par
注释:imp/exp(
impdp/expdp
)默认目录是什么,即parfile=exp.par里的文件exp.par在什么目录下?
附加:
impdp/expdp
)默认目录是什么
(5)、数据泵如何决定文件的路径
5.1 如果目录对象是文件标示符的一部分,那么目录对象指定的路径就需要使用。在目录MY_DIR创建dump文件的示例:
expdp scott/tiger DUMPFILE=my_dir:expdp_s.dmp NOLOGFILE=Y
5.2 如果目录对象不代表一个文件,那么就需要使用DIRECTORY变量命名的目录对象。目录MY_DIR中创建dump文件,目录MY_DIR_LOG中创建日志文件的示例:
expdp scott/tiger DIRECTORY=my_dir DUMPFILE=expdp_s.dmp \
LOGFILE=my_logdir:expdp_s.log
5.3 如果没有明确目录对象,也没有以DIRECTORY变量命名的目录对象,那么环境变量DATA_PUMP_DIR将会使用。环境变量是在在运行导出和导入数据泵应用的客户端系统中使用操作系统命令定义的,分配给基于客户端环境变量的取值必须和基于服务端的目录对象一致,且必须首先在服务器端建立。
目录MY_DIR中创建dump文件和MY_DIR_LOG中创建日志文件的示例:
在使用expdp的客户端机器上,设定环境变量:
-- On windows, place all expdp parameters on one single line:
C:\ set DATA_PUMP_DIR=MY_DIR
C:\ expdp scott/tiger@my_db_alias DUMPFILE=expdp_s.dmp
LOGFILE=my_logdir:expdp_s.log
注意环境变量DATA_DUMP_DIR对应的目录名称是大小写敏感的。设定错误的DATA_PUMP_DIR环境变量会报错,例如:DATA_PUMP_DIR=My_Dir:
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-39087: directory name My_Dir is invalid
5.4 如果之前三种情况都没有创建目录对象,作为一个具有权限的用户(例如具有EXP_FULL_DATABASE或IMP_FULL_DATABASE角色),那么数据泵试图使用默认的基于服务器端的目录对象,DATA_PUMP_DIR。理解数据泵不会创建DATA_PUMP_DIR目录对象是非常重要的。仅当授权用户未使用任何之前提到的机制创建的目录对象时,才会尝试使用DATA_PUMP_DIR。这个默认的目录对象必须首先由DBA创建。不要将这个和同名的基于客户端的环境变量相混淆。
首先,清空DATA_PUMP_DIR环境变量:
C:\ set DATA_PUMP_DIR=
创建DATA_PUMP_DIR的目录:
CONNECT SYSTEM/MANAGER
CREATE OR REPLACE DIRECTORY data_pump_dir AS 'D:\DataPump';
GRANT read, write ON DIRECTORY data_pump_dir TO scott;
-- On windows, place all expdp parameters on one single line:
C:\ expdp system/manager@my_db_alias DUMPFILE=expdp_s.dmp
LOGFILE=expdp_s.log SCHEMAS=scott
如果SCOTT用户不是授权用户,不能使用默认的DATA_PUMP_DIR。
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-39145: directory object parameter must be specified and non-null
用户SCOTT的解决方法:如上面5.3,SCOTT可以设置环境变量DATA_PUMP_DIR为MY_DIR:
-- On windows, place all expdp parameters on one single line:
C:\ set DATA_PUMP_DIR=MY_DIR
C:\ expdp scott/tiger@my_db_alias DUMPFILE=expdp_s.dmp
LOGFILE=expdp_s.log SCHEMAS=scott
或者这种特定场景下,用户SCOTT也可以有目录DATA_PUMP_DIR的读和写权限:
-- On windows, place all expdp parameters on one single line:
C:\ set DATA_PUMP_DIR=DATA_PUMP_DIR
C:\ expdp scott/tiger@my_db_alias DUMPFILE=expdp_s.dmp
LOGFILE=expdp_s.log SCHEMAS=scott
这个不会弄。
我建议一直方法:
用pl/sql developer的工具,导出其自己的格式,然后到10g中导入
如果只有dmp,那么先安装一个11g的,导入后,在用plsql developer进行导出
1.创建
create user AAA identified by AA2011 default tablespace Test quota 10m on users;
用户名:AAA
密码:AA2011
表空间:Test
2.授权(将对表空间的所有操作功能,赋给新创建的用户)
grant connect,resource,dba,sysdba to AAA ;
Oracle dump文件的命令有exp/imp和expdp/impdp。对于dump文件,我们不能直接提取出data数据,但是我们可以通过相关的参数,从dump文件中提取出对应的DDL语句。
Oracle 从Dump 文件里提取 DDL 语句 方法说明
如果是导出导入(exp/imp),那么是indexfile参数;
如果是数据泵(expdp/impdp),那么是sqlfile参数。
expdp/impdp提取出的DDL语句更详细,可读性更好。
一、使用exp/imp命令
1、导出lxh用户的数据,生成dump文件
exp lxh/lxh file=lxh.dmp owner=lxh
2、从dump文件里提取DDL语句
imp lxh/lxh file=lxh.dmp fromuser=lxh touser=lxh indexfile=lxh.sql
该import命令并没有真正的import data,而只是生成了我们对应用户下所有DDL的sql语句。对于表的DDL语句,用REM进行了注释。
二、使用expdp/impdp命令
1、导出lxh用户的数据,生成dump文件
expdp lxh/lxh directory=backup dumpfile=lxh.dmp schemas=lxh
2、从dump文件里提取DDL语句
impdp lxh/lxh directory=backup dumpfile=lxh.dmp sqlfile=lxh.sql
---------------------------------------------------------------------------
或者使用DDL Wizard这个软件