2009年5月14日星期四
存一些oracle的简单资料
查看ORACLE数据库信息的一些SQL 1、查看表空间的名称及大小
set linesize 140;set pages 200;column tablespace_name format a30;select tablespace_name,min_extents,max_extents,pct_increase,status from dba_tablespaces;select tablespace_name,initial_extent,next_extent,contents,logging,extent_management,allocation_type from dba_tablespacesorder by tablespace_name;
2、查看表空间物理文件的名称及大小
column db_block_size new_value blksz noprintselect value db_block_size from v$parameter where name='db_block_size';column tablespace_name format a16;column file_name format a60;set linesize 160;select file_name,round(bytes/(1024*1024),0) total_space,autoextensible,increment_by*&blksz/(1024*1024) as incement,maxbytes/(1024*1024) as maxsize from dba_data_files order by tablespace_name;
3、查看回滚段名称及大小
COLUMN roll_name FORMAT a13 HEADING 'Rollback Name'COLUMN tablespace FORMAT a11 HEADING 'Tablspace'COLUMN in_extents FORMAT a20 HEADING 'Init/Next Extents'COLUMN m_extents FORMAT a10 HEADING 'Min/Max Extents'COLUMN status FORMAT a8 HEADING 'Status'COLUMN wraps FORMAT 999 HEADING 'Wraps' COLUMN shrinks FORMAT 999 HEADING 'Shrinks'COLUMN opt FORMAT 999,999,999 HEADING 'Opt. Size'COLUMN bytes FORMAT 999,999,999 HEADING 'Bytes'COLUMN extents FORMAT 999 HEADING 'Extents'SELECT a.owner || '.' || a.segment_name roll_name , a.tablespace_name tablespace , TO_CHAR(a.initial_extent) || ' / ' || TO_CHAR(a.next_extent) in_extents , TO_CHAR(a.min_extents) || ' / ' || TO_CHAR(a.max_extents) m_extents , a.status status , b.bytes bytes , b.extents extents , d.shrinks shrinks , d.wraps wraps , d.optsize optFROM dba_rollback_segs a , dba_segments b , v$rollname c , v$rollstat dWHERE a.segment_name = b.segment_name AND a.segment_name = c.name (+) AND c.usn = d.usn (+)ORDER BY a.segment_name;
4、查看控制文件
select name from v$controlfile;
5、查看日志文件
select member from v$logfile;
6、查看表空间的使用情况
select * from( select sum(bytes)/(1024*1024) as 'free_space(M)',tablespace_name from dba_free_spacegroup by tablespace_name) order by 'free_space(M)';
7、查看数据库库对象
select owner, object_type, status, count(*) count# from all_objects
group by owner,object_type,status;
8、查看数据库的版本
select * from v$version;
9、查看数据库的创建日期和归档方式
select created,log_mode,log_mode from v$database;
10、查看临时数据库文件
select STATUS, ENABLED, NAME from v$tempfile;
2009年5月13日星期三
在oracle中直接计算经纬度距离的方法
select sdo_geom.sdo_distance(mdsys.sdo_geometry(2001,8307,mdsys.sdo_point_type(111.12,33.34,0),null,null),mdsys.sdo_geometry(2001,8307,mdsys.sdo_point_type(111.12,33.33,0),null,null),0.005) from dual;
其中2001代表简单点类型,8307代表为WGS84坐标系, 0.005为oracle计算时候的误差精度,本案中为5毫米
2009年5月12日星期二
oracle spatial 的一个bug
表结构:
SQL> desc us_dma;
Name Type Nullable Default Comments
-------- ------------------ -------- ------- --------
NAME VARCHAR2(36) Y
DMA VARCHAR2(3) Y
MI_STYLE VARCHAR2(254) Y
MI_PRINX NUMBER(10)
GEOLOC MDSYS.SDO_GEOMETRY Y
geoloc是空间字段类型。
如下sql语句,报告oracle ORA-00904 无效标识符 错误
select geoloc.sdo_point.x from us_dma
给该表起别名后,解决此问题。
select t.geoloc.sdo_point.x from us_dma t
结合网上资料分析,可以认为此种情况是oracle的特定版本bug所导致。
2009年5月8日星期五
一、Oracle Spatial简介
支持自定义的数据类型,可以用数组,结构体或者带有构造函数,功能函数的类来定义自己的对象类型。这样的对象类型可以用于属性列的数据类型,也可以用来创建对象表。而Oracle
Spatial也正是基于此种特性所开发的一套空间数据处理系统。
的自定义数据类型有很多,全部在MDSYS方案下,经常使用到的是SDO_GEOMETRY类型。SDO_GEOMETRY表示一个几何对象,可以是点、线、面、多点、多线、多面或混合对象。
在此数据类型的基础上,实现了R树空间索引和四叉树空间索引,还以SQL函数的形式实现了多种空间分析功能。
二、测试表的建立与应用(点类型)
| -- 创建测试用表 CREATE TABLE "SPATIALTEST" ( )LOGGING; |
| -- 创建主键约束 ALTER TABLE "SPATIALTEST" KEY("ID"); |
| -- 根据用户表填写空间元数据 INSERT INTO USER_SDO_GEOM_METADATA |
| -- 建立空间索引 CREATE INDEX SPATIAL_IDX |
| -- 导入测试数据
--其他 INSERT INTO cola_markets VALUES( |
| -- 属性信息查询 SQL> select location from spatialtest; LOCATION(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SQL> select s.location.SDO_POINT.x langtitude LANGTITUDE |
| -- 空间分析查询(113.2359818,23.16937253)周边十公里信息5条 SELECT dist FROM ( A.name name, SDO_GEOM.SDO_DISTANCE(A.location,MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(113.2359818,23.16937253,0),NULL,NULL),1) dist A SDO_WITHIN_DISTANCE(A.LOCATION,MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(113.2359818,23.16937253,0),NULL,NULL),'distance=10000') = 'TRUE' WHERE ; |
| -- 空间分析查询(113.2359818,23.16937253)附近的5条信息 SELECT langtitude, A.location.SDO_POINT.y latitude,MDSYS.SDO_NN_DISTANCE(1) distance FROM WHERE SDO_NN(A.LOCATION,MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(113.2359818,23.16937253,0),null,null),'SDO_NUM_RES=5',1) = 'TRUE' ; |
| -- Return the topological difference of two geometries. SELECT SDO_GEOM.SDO_DIFFERENCE(c_a.shape, m.diminfo, c_c.shape, m.diminfo) user_sdo_geom_metadata m m.column_name = 'SHAPE' 'cola_c'; |
三、MDYSYS.SDO_GEOMETRY结构
| CREATE TYPE SDO_GEOMETRY AS OBJECT( |
MDSYS.SDO_GEOMETRY <--> OCCI
对照模型:
四、Oracle Spatial 几个自定义函数(转帖)
--------------------------------------
| |
| |
| |
| |
| |
| |
| create or replace function To_Geomerty_Point(x in number,y in number ) return MDSYS.SDO_GEOMETRY is begin Result := MDSYS.SDO_GEOMETRY(2001, return(Result); |
--------------------------------------------------------------------------
-------------------查询
及测试语句---------------------------------------
| --求线路的长度 sdo_geom.sdo_length(c.geoloc,m.DIMINFO,'unit=KM') select * from tg_routev2 select a.geoloc.SDO_ORDINATES from tgs_route a select GetStartNodeXY(a.geoloc.SDO_ORDINATES) from tgs_route select GetEndNodeXY(a.geoloc.SDO_ORDINATES) from tgs_route |
| --计算线路的起始点和终止点坐标 |
| --更新tg_routev2 中的线起始点 终止点坐标 key(routename) update (select a.*,b.* from tg_routev2 a,routeNodeXY b |
| select sdo_geom.sdo_distance( from dual |
| --node1距离物流中心的 “南北直角折线” (sdo_geom.sdo_distance(To_Geomerty_Point(a.node1x, a.node1y), To_Geomerty_Point(116.635056, a.node1y), 0.005, 'unit=KM') + sdo_geom.sdo_distance(To_Geomerty_Point(a.node1x, a.node1y), To_Geomerty_Point(a.node1x, 39.869170), 0.005, 'unit=KM')) dis1 --node2距离物流中心的 |