转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> ORACLE >> 正文
oracle数据库开发的一些经验积累(一)         ★★★★

oracle数据库开发的一些经验积累(一)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:3643 更新时间:2009/4/22 22:03:57
ry_key VARCHAR2(100),
field VARCHAR2(1000))
ON COMMIT PRESERVE ROWS;

CREATE GLOBAL TEMPORARY TABLE TEMP_TAB2(
table_name VARCHAR2(20),
primary_key VARCHAR2(100),
field VARCHAR2(1000))
ON COMMIT DELETE ROWS;

 

 

15、如何使用OEM
先启数据库服务,再启oracle manager服务。
否则重建档案资料库
如果还不行就把ORACLEHOME\NETWORK\sqlnet.ora文件的内容
     sqlnet.authentication_services=(NTS)
     改成sqlnet.authentication_services=(NONE)

登录 sysman/oem_temp

16、TNS:没有监听器的问题。

(1)查一下监听服务是否启动,
   如果没有启动,则运行lsnrctrl start。
(2)查看一下 LISTENER.ORA内监听的服务器名、服务器IP、数据库名是否正确。
(3)查看一下 TNSNAMES.ORA内服务器名、服务器IP、数据库名是否正确。

17、LINUX、UNIX下自动启动ORACLE服务

(1)

 !/bin/sh

# chkconfig: 345 51 49
# description: starts the oracle dabase deamons
#

ORA_HOME=/u01/app/oracle/product/8.1.7
ORA_OWNER=oracle
case "$1" in
''''start'''')
echo -n "Starting Oracle8i: "
su - $ORA_OWNER -c $ORA_HOME/bin/dbstart
touch /var/lock/subsys/oracle8i
echo
;;

''''stop'''')

echo -n "Shutting down Oracle8i: "
su - $ORA_OWNER -c $ORA_HOME/bin/dbshut
rm -f /var/lock/subsys/oracle8i
echo
;;

''''restart'''')

echo -n "Restarting Oracle8i: "
$0 stop
$0 start
echo
;;

*)
echo "Usage: oracle8i { start | stop | restart }"
exit 1

esac
exit 0

我仿照su - $ORA_OWNER -c $ORA_HOME/bin/dbshut 的形式
添加su - $ORA_OWNER -c $ORA_HOME/bin/lsnrctl start
但是在系统启动的时候listener启动不了

(2)

/etc/rc.local
改成如下就可以了
touch /var/lock/subsys/local
#echo 2147483648 > /proc/sys/kernel/shmmax
echo -n "Starting Oracle Database:"
date +"%D %T %a"
su - oracle -c "lsnrctl start"
#su - oracle -c "sqlplus /nolog @startmaster.sql"
echo -n "Oracle Database Started:"
date +"%D %T %a"
-------------
第一个#是改共享内存大小的
第二个#是启动数据库的。

(3)
ftp://ftp.rpmfind.net/linux/rhcontrib/7.1/i386/oraclerun9i-1.0-1.i386.rpm

下载这个软件包并安装。

里面每个文件都有一些要修改的地方。配置完成之后,就可以在系统服务配置中找到它,选中它就可能以自启动了。

18、回滚段不够的处理方法

(1)、先使回滚段脱机一个,
如果不好用,则再脱机一个。直至好用。
   ALTER rollback segment rollbackname offline;
(2)、增加回滚段数据文件的大小
   alter database datafile ''''datafile'''' resize 200M;


19、WINNT向WIN2000移植

不用EXP和IMP的

停掉数据库的服务后,可以做一个数据库的全备份。

在WIN2000上建一个同名的数据库,随便建,越小越好,可以缩短时间。
把WINNT下的数据库备份恢复到WIN2000的数据库上就可以了。但建库的目录
必须一样。(也可以不一样,但需要更改数据文件的连接)

我曾多次为用户这样移植数据,万无一失的。
注意:因为数据很重要,所以建议你先EXP备份一下。这是我们的习惯。


20、ORACLE SQL PLUS Worksheet乱码问题。

dbappscfg.properties,修改该文件即可解决上述问题。$ORACLE_HOME\sysman\config目录下,修改
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。

对于Windows操作系统,还需要修改一项
#SQLPLUS_SYSTEMROOT=c:\\WINNT40
为SQLPLUS_SYSTEMROOT=C:\\WINNT

如操作系统的主目录在C盘的Winnt下

对于后面一项的修改只对Windows操作系统进行,对UNIX操作系统则不需要。如果在Windows操作系统中不修改该项,在Oracle Enterprise Manager中,连接系统时,会提示如下的错误:
ORA-12560 TNS:protocol adapter error
或者
ORA-12545 Connect failed because target host or object does not exist
重新连接SQL PLUS Worksheet


21、DROP掉名字是小写的表(用双引号括起来)。

    drop table "tablename"
    select * from "tablename"

22、日期的显示格式
注意:SIMPLIFIED CHINESE(简体中文需要" "括起来)
      别的国家不用" " 例如:ENGLISH
select to_char(sysdate,''''DAY'''',''''NLS_DATE_LANGUAGE=''''''''SIMPLIFIED CHINESE'''''''''''') from dual;
------------
星期四
------------

23、一个从ORACLE中读表信息的存储过程

可以在vc下调用存储过程来实现
例子:
先修改init.ora
例如:
utl_file_dir=/usr    //路径为 oracle所在的盘:/usr
此过程将用户TEMP的P1过程的代码保存到ORACLE安装盘下/USR/TEXT.TXT中
create or replace procedure TEST
is
  file_handle utl_file.file_type;
  STOR_TEXT VARCHAR2(4000);
  N NUMBER;
I NUMBER;
 begin
I:=1;
   SELECT MAX(LINE) INTO N FROM ALL_SOURCE WHERE OWNER=''''TEMP'''' AND NAME=''''P1'''';
file_handle:=utl_file.fopen(''''/usr'''',''''test.txt'''',''''a'''');
WHILE I<=N LOOP
   SELECT TEXT  INTO STOR_TEXT FROM ALL_SOURCE WHERE OWNER=''''TEMP'''' AND NAME=''''P1'''' AND LINE= I;
   I:=I+1;
   utl_file.put_line(file_handle,stor_text);
END LOOP;
   utl_file.fclose(file_handle);
commit;
end TEST;
/

24、关于修改ORACLE的列宽
(1)、不论如何都要备份数据。
(2)、如果没有数据,则可以修改宽度。比如NUMBER,CHAR,VARCHAR2
(3)、如果有数据,则可以增加宽度。比如NUMBER,CHAR,VARCHAR2
   注意:不可以减小宽度。
(4)、语法:alter talbe tablename modify columnname columntype not null;

25、如何查看用户的存储过程和函数

select name,text from user_source where name= Procedurename and type = ''''PROCEDURE'''' order by line;

26、在批处理中自动启动ORACLE服务(win2000)

编一个批处理文件
net start OracleServiceSID
OracleServiceSID是ORACLE的实例名称

27、对行加锁时,只对tb1加锁

select tb1.r1 from tb1, tb2  where tb1.r2 = tb2.r2 and tb2.r1 = xxx for update of tb1.r1 nowait

28、得到列的信息

desc tablename
select cname from col where tname=''''TABLENAME'''';
select column_name from user_tab_columns where table_name=''''TABLENAME'''';
select column_name from ALL_tab_columns where table_name=''''TABLENAME'''';
select column_name from dba_tab_columns where table_name=''''TABLENAME'''';
select column_name from user_col_comments where table_name=''''TABLENAME'''';   
select column_name from all_col_comments where table_name=''''TABLENAME'''';
select column_name from dba_col_comments where table_name=''''TABLENAME'''';

29、使触发器无效(login_on)

svrmgrl
connect internal/oracle
alter trigger login_on disable;

使触发器为无效alter trigger yourtriggername disable

如果是对于某一个表的所有的触发器:
alter table yourtablename disable all triggers


30、如在SQLPLUS中何调用存储过程和函数。

    call只能调用存储过程后面加上括号就可以了
    call 存储过程名();
    exec procedurename;(可以不加())
    调用函数用sql语句
    select 函数名(参数) from dual;

31、函数中如果调用DML语句就不可以调用SELECT语句

32、REDO LOG BUFFER 什么时候写到REDO LOGFILE中
    (1)、在COMMIT的时候
    (2)、重做日志缓冲区1/3满的时候
    (3)、重做日志缓冲区大于1M的时候
    (4)、它写信息必须是在数据写进程前调用
    (5)、一般CHECKPOINT在日志组切换的时候进行或者由初始化参数设定
         在CHECKPOINT的时候需要调用数据写进程  

33、ORACLE的http server 把原有的WEB server冲掉,如何解决?

    (1).如果你原来的http server是用IIS等其他发布工具做的,那么可以在服务中停掉         oracle http server服务,并且改为手动启动。
    (2).如果原来的http server是用apache发布,则可以改变http.conf中的参数

34、关于创建重建查看索引


创建索引:
CREATE INDEX IND_NAME ON TABLE_NAME(COL1,COL2,...);

重建索引:
ALTER INDEX IND_NAME REBUILD;

查看索引:

SELECT * FROM USER_INDEXES WHERE INDEX_NAME=''''IND_NAME'''';

35、ORACLE如何查杀用户的进程
 
   一|根据用户的应用程序和SQL语句,在DBA STUDIO找到用户的SESSION并断开其连接
 
   二、
  
   (1)、要杀掉一个session应先应知道其sid和serial#,假设你已经知道。
   (2)、select paddr from v$session where sid=v_sid and serial#=v_serial#
   select spid from v$process where addr=paddr(以上语句所查出的);

   (3)、使用ALTER SYSTEM KILL SESSION ''''v_sid,v_serial#'''' immediate; 试一试如不行转   
  
   三、LINUX和UNIX下
   转到操作系统下执行:kill -9 spid (以上语句所查出的) 
  
36、ORACLE中检查表是否被锁的语句

    SELECT A.OWNER,  
         A.OBJECT_NAME,  
         B.XIDUSN,  
         B.XIDSLOT,  
         B.XIDSQN,  
         B.SESSION_ID,  
         B.ORACLE_USERNAME,  
         B.OS_USER_NAME,  
         B.PROCESS,  
         B.LOCKED_MODE,  
         C.MACHINE,  
         C.STATUS,  
         C.SERVER,  
         C.SID,  
         C.SERIAL#,  
         C.PROGRAM 
    FROM ALL_OBJECTS A,  
         V$LOCKED_OBJECT B,  
         SYS.GV_$SESSION C
   WHERE ( A.OBJECT_ID = B.OBJECT_ID )
     AND (B.PROCESS = C.PROCESS )
   ORDER BY 1,2    
杀掉:alter system kill session ''''sid, serial#''''
37、ORACLE的登录问题,用户名和密码。

可以直接输入:
    internal/oracle@serivce_name
  sys/change_on_install@serivce_name
  system/manager@serivce_name
  scott/tiger@serivce_name
注意:
9i中没有internal/oracle
如果选择典型安装则有 scott用户
如果自定义可以不安装  scott用户
如果是本机则可以省略@serivce_name

oem:(ORACLE ENTERPRISE MANAGER)
sysman/oem_temp


上一页  [1] [2] [3] [4] [5]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台