Archive for 2月, 2006
前几天部门经理在IMP数据时想将数据导入到不同于原系统的表空间去,却发现怎么也不成功,数据还是导入到原来的表空间。
我看了一下,他在新系统上创建的这个用户授予了CONNECT,RESOURCE,DBA等角色,而且这个用户有UNLIMITED TABLESPACE这个系统权限。
总的来说, oracle 并没有提供什么参数让你将数据导入到指定的表空间中,数据默认还是导入到它原来所在的表空间。你可以用IMP 的SHOW参数可以看到其创建脚本中会指定TABLESPACE参数,而这个值是原系统该对象所在的表空间,跟你用户默认的表空间是没有关系的,如下:
“CREATE TABLE “EMPLOYEES” (”EMPLOYEE_ID” NUMBER(6, 0), “FIRST_NAME” VARCHAR2″
“(20), “LAST_NAME” VARCHAR2(25) NOT NULL ENABLE, “EMAIL” VARCHAR2(25) NOT NU”
“LL ENABLE, “PHONE_NUMBER” VARCHAR2(20), “HIRE_DATE” DATE NOT NULL ENABLE, “”
“JOB_ID” VARCHAR2(10) NOT NULL ENABLE, “SALARY” NUMBER(8, 2), “COMMISSION_PC”
“T” NUMBER(2, 2), “MANAGER_ID” NUMBER(6, 0), “DEPARTMENT_ID” NUMBER(4, 0)) ”
“PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL [...]
今天美国那边发了个dmp文件过来,要求将数据恢复到苏州这边的server,但执行imp时发生如下错误:
IMP-00010: 不是有效的导出文件,标题验证失败
IMP-00000: 未成功终止导入
我的imp版本是9205,目标数据库也是9205,而美国那边的dmp文件未告诉我版本
在google上查找了一下,大概有两种情况:
1.imp/exp的版本不对,也就是说低版本的导出,可以用高版本的导入,但高版本导出不能用低版本的导入,这个版本不只是指imp/exp的版本,也是指数据库的版本
2.可能你在用ftp download时未设置binary的传输方式,导致文件损坏
用UltraEdit-32打开dmp文件可看到版本信息,美国传过来的dmp文件的信息如下:
XPORT:V10.02.01
从中可以看出其版本是10.02.01
所以我执行imp时报错是因为版本问题,后来用10g的imp导入到10g的数据库就成功了
今天在server上安装了10g的数据库,listener都已经配好,客户端也能tnsping,但连接的时候报如下错误:
SQL> connect sys@ocdb as sysdba
请输入口令:
ERROR:
ORA-12535: TNS: 操作超时
Server的OS是windows 2003 enterprise edition
检查了一下windows 2003的防火墙,有开放1521端口,也把 oracle .exe这个程序开放了,怎么还是没办法连接呢?在防火墙中检查了一下 oracle .exe这个选项,发现其指向9i的目录,而我新增加的数据库是10g的!原来是忘记把10g的 oracle .exe文件添加进去了:(
把10g的 oracle .exe文件也添加进去,客户端就可以连上了:)
今天因项目需要,在server上安装了9i跟10g两个版本的数据库,接着用9i的listener去监听9i和10g两个版本的数据库,在客户端用OEM或sqlplus去连接10g的数据库时报如下错误:
SQL> connect sys@ocdb as sysdba
请输入口令:
ERROR:
ORA-12500: TNS: 监听程序无法启动专用服务器进程
用tnsping是可以ping通的。
查了相关资料,大概都是讲oracleservice<sid>服务没起来,但我的service却是起来的,后来想了想会不会是用低版本的listener去监听高版本的数据库造成的呢?
做个测试:
当用9i的listener时,可以连接9i的数据库,但不能连接10g的数据库
改成用10g的listener时,两个版本的db都可以连接
所以估计就是由于listener的版本造成的