存档

文章标签 ‘Oracle’,文章数:13

在CentOS5.5 x86_64上安装了Oracle11g,版本号为:11.2.0.1.0

但是,在其它客户端上使用sqlplus连接的时候需要等待很长时间才能连接上,有时候报超时的错误。

错误信息为:

***********************************************************************

Fatal NI connect error 12537, connecting to:
 (LOCAL=NO)

  VERSION INFORMATION:
        TNS for Linux: Version 11.2.0.1.0 - Production
        Oracle Bequeath NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
        TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
  Time: 30-NOV-2011 14:28:10
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12537

TNS-12537: TNS:connection closed
    ns secondary err code: 12560
    nt main err code: 0
    nt secondary err code: 0
    nt OS err code: 0
opiodr aborting process unknown ospid (29666) as a result of ORA-609
Wed Nov 30 14:36:24 2011

Oracle11g服务器数据库名为:lzf,全局名称为:lzf.dbainfo.net

在CentOS5.6上安装oracle10gR2,安装程序进行到86%的时候报下面的错误:

INFO: gcc:
INFO: /usr/lib/libstdc++.so.5: No such file or directory
INFO:

INFO: /home/oracle/db_1/bin/genorasdksh: Failed to link liborasdkbase.so.10.2

INFO: make: *** [liborasdkbase] Error 1

INFO: End output from spawned process.
INFO: ----------------------------------
INFO: Exception thrown from action: make
Exception Name: MakefileException
Exception String: Error in invoking target 'all_no_orcl ihsodbc' of makefile '/home/oracle/db_1/rdbms/lib/ins_rdbms.mk'. See '/home/oracle/oraInventory/logs/installActions2011-04-28_09-49-27AM.log' for details.
Exception Severity: 1

这个错误是和编译有关的,检查日志发现果然缺少了一个C的类库:
INFO: /usr/lib/libstdc++.so.5: No such file or directory

例:有表

--sybase

create table t_test(

mydate datetime)

go

--oracle

create t_test(mydate date)

方法1:在sybase侧建立视图,然后从导出视图(此方法舍弃了毫秒部分)

create view v_test as

select

convert(varchar(10),pst_exec_stime,111)+' '+convert(varchar(9),pst_exec_stime,8) mydate

from t_test

go

在上一篇文章中,查看表中列属性的SQL语句

查看Oracle中表的简要列属性信息。利用上面的SQL语句,可以改进出来统计表所占物理存储空间大小的语句。

在Oracle中number数字类型所占的空间,计算公式为:

number(p,s) 占用的字节数为: floor( ( p + 1  ) / 2 ) + 1

 

select object_name,sum(decode(data_type,'NUMBER',floor((col_length+1)/2) + 1,col_length)) table_size
from
  (select object_name,column_name,data_type,decode(data_precision,NULL,data_length,data_precision) col_length
    from
      (select o.name object_name,c.column_name column_name,c.data_type,c.data_length,c.data_precision,c.data_scale
        from sys.tab$ t,dba_tab_cols c,sys.obj$ o,sys.user$ u
          where o.obj#=t.obj#
            and o.name=c.table_name
            and c.owner=u.name
            and o.owner#=u.user#
            and u.name='SCOTT'
            /*and o.name='EMP'*/
           ) tab_cols
   ) col_len
group by object_name;

 

上面的SQL语句统计用户scott的所有表占用的物理空间的字节数。

————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:oracle table storage 表字段 占用空间大小
————————————————————————————————-

在sqlplus中,desc后面跟上表名,能够显示简要的表创建语法。

下面的SQL语句能够实现类似sqlplus中desc的类似的功能。

select o.obj#,o.name object_name,c.column_id,c.column_name,c.data_type,c.data_length,c.data_precision,c.data_scale,c.nullable
from sys.tab$ t,dba_tab_cols c,sys.obj$ o,sys.user$ u
where o.obj#=t.obj#
  and o.name=c.table_name
  and c.owner=u.name
  and o.owner#=u.user#
  and u.name='SCOTT'
  and o.name='EMP'
order by obj#,column_id 
;

Java数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成。JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序。然而各个开发商的接口并不完全相同,所以开发环境的变化会带来一定的配置变化。本文主要集合了不同数据库的连接方式。

一、连接各种数据库方式速查表
   下面罗列了各种数据库使用JDBC连接的方式,可以作为一个手册使用。
   1、Oracle8/8i/9i数据库(thin模式)
Java代码  
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();   
String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID   
String user="test";   
String password="test";   
Connection conn= DriverManager.getConnection(url,user,password);   
 
   2、DB2数据库
Java代码  
Class.forName("com.ibm.db2.jdbc.app.DB2Driver").newInstance();   
String url="jdbc:db2://localhost:5000/sample"; //sample为你的数据库名   
String user="admin";   
String password="";   
Connection conn= DriverManager.getConnection(url,user,password);   
 

oracle的版本为:10gr2,10.2.0.1.0。

利用oracle中的hsodbc连接sqlserver2005数据库。已成功连接。db link的名字为: sql2005fororacle。

执行:select count(*) from sysdatabases@sql2005fororacle; 能够成功执行。

但是,在执行: select count(*) from sysobjects@sql2005fororacle;却导致系统出现了死机症状,无法响应任务的操作,任务管理器看到cpu利用率不高。无奈,只能强制关机。

在alert_<SID>.log文件中发现有这么几句:

Memory Notification: Library Cache Object loaded into SGA
Heap size 2225K exceeds notification threshold (2048K)
KGL object name :XDB.XDbD/PLZ01TcHgNAgAIIegtw==

原来遇到oracle的bug了。上网检索,说 是oracle的一个bug在10g10.2.0.1的各个平台上都出现过。 Oracle10g中,在load较大的对象进library cache中时,会记录以上警告。在版本10.2.0.1中,这个定义大对象的阈值是2M,这是有隐含参数 _kgl_large_heap_warning_threshold 指定的从10.2.0.2起,这个参数的默认值被修改为50M。

解决方法1 :升级到10.2.0.2或者以上。

解决方法2

SQL> alter system set "_kgl_large_heap_warning_threshold"=20388608 scope=spfile ;
SQL> shutdown immediate

SQL> startup

或者将 2038860调成更大的值。

我是通过调整隐式参数的方式解决的,重启后。

下面就是在oracle中访问sqlserver2005数据库的数据的效果:

SQL> select "name" from sysobjects@sql2005fororacle where "type"='U';
name
--------------------------------------------------------------------------------
spt_fallback_db
spt_fallback_dev
spt_fallback_usg
QuestSoftwareProc
pbcattbl
pbcatcol
pbcatfmt
pbcatvld
pbcatedt
spt_monitor
spt_values
name
--------------------------------------------------------------------------------
MSreplication_options
已选择12行。
SQL> desc sysusers@sql2005fororacle
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 uid                                                NUMBER(5)
 status                                             NUMBER(5)
 name                                      NOT NULL VARCHAR2(128 CHAR)
 sid                                                RAW(85)
 roles                                              RAW(2000)
 createdate                                NOT NULL DATE
 updatedate                                NOT NULL DATE
 altuid                                             NUMBER(5)
 password                                           RAW(256)
 gid                                                NUMBER(5)
 environ                                            VARCHAR2(32512 CHAR)
 hasdbaccess                                        NUMBER(10)
 islogin                                            NUMBER(10)
 isntname                                           NUMBER(10)
 isntgroup                                          NUMBER(10)
 isntuser                                           NUMBER(10)
 issqluser                                          NUMBER(10)
 isaliased                                          NUMBER(10)
 issqlrole                                          NUMBER(10)
 isapprole                                          NUMBER(10)
SQL>