oracle使用中遇到的问题备忘

下班了,写两篇文章都回家了:)

以前也用oracle,都是别人弄好了,我直接用,就只感觉存储过程,sql语法比用MSSQL稍微别扭点,其他配置很少接触,这次从用pd建表到弄好数据库让大家用,都大体弄了偏,了解了更多东西,把部分现在记下来的写下来做个备忘。

PD里是可以直接设置表空间存放位置的,如表存放的表空间和lob对象单独存放表空间如下图:

主键存放表空间设置如下:

设置后,用PD生成SQL代码,则会自动生成表空间代码。

oracle中存储过程的单步调试和直接生成结果,以前认为很麻烦,因为要用cursor对象,不想MSSQL直接exec 存储过程名就出来了,而是返回一个cursor,以前也没有解决怎么调试存储过程方便,这次发现,原来直接在pl/sql中比如packages里找到定义包头下面的存储过程,右键测试,自动就生成好对应的测试存储过程的代码,只需要在下面写好参数,生成后,点击cursor后面的...框,就能查看到该存储过程生成的结果了。

感觉还麻烦点,但集成了单独调试啊等,感觉功能强大点。

 

oracle DBLINK连接,这个纠结了我半天,其实弄好后发现很简单,我单独写了文本文档记录:

 

远程连接了AAA后,需要连接BBB实例,并查询数据,DBLINK方法如下:

create database link BBB
connect to 用户 identified by
密码 using '(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.254)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = BBB)
    )
  )'

如果登录的AAA(注意是登录的机器,不一定是本机)实例tnsnames.ora文件里面添加了类试:
BBB=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.254)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = BBB)
    )
  )

这样的代码,则只需要:
create database link BBB
connect to 用户 identified by
密码 using 'BBB'
即可
(注意:Link后面大写的BBB是取的名字, to后面的 用户 是登录名,by后面的 密码 是密码,using 后面双引号包含的是tnsnames.ora取的名字)


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

测试如下:
select *
from EW_AREA@BBB;

EW_AREA是远程数据库的表, BBB是link的名称,

查询登录的机器所建立的所有DBLINK如下:
select owner, db_link from dba_db_links

删除指定DBLINK连接如下:
DROP DATABASE LINK BB
-------------------------------------------------------------------------
如果建立全局用的,需要加public,比如:
create public database link BBB2 ....

删除则也需要删除全局的
DROP public DATABASE LINK BBB2

 

 

触发器的问题,自增字段开始准备调SQL的时候手写序列.Nextval,但是最后发现在用一些ORM工具创建对象时,比如直接就insert(item)对象了,这个时候需要先从序列里获取ID,再插入数据库,将连接两次数据库,并且写SQL或者存储过程的时候,如果不写序列.NextVal,也更好,因此还是决定用触发器,其他地方尽力少用吧,防止锁表之类的。

 

其他细节也还多,但都很容易在网上搜索到,还有些问题暂时没在项目中遇到,就不写了。

 

 

posted @ 2010-11-24 18:24  Lawson  阅读(426)  评论(0编辑  收藏  举报