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

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2806 更新时间:2009/4/22 22:03:57
sp;  select userenv(''''sessionid'''') from dual sessionid
        select userenv(''''TERMINAL'''') from dual 客户端名字
        select userenv(''''INSTANCE'''') from dual 实例数

        SYS_CONTEXT() 函数
    
        select SYS_CONTEXT(''''USERENV'''',''''CURRENT_SCHEMA'''')  from dual;  当前模式
        select SYS_CONTEXT(''''USERENV'''',''''CURRENT_SCHEMAID'''')  from dual;  当前模式ID
        select SYS_CONTEXT(''''USERENV'''',''''CURRENT_USER'''')  from dual; 当前用户 
        select SYS_CONTEXT(''''USERENV'''',''''DB_NAME'''')  from dual; 数据库
        select SYS_CONTEXT(''''USERENV'''',''''HOST'''')  from dual; 主机
        ..........

60、删除重复列的方法

(1) DELETE FROM table_name A WHERE ROWID > (
       SELECT min(rowid) FROM table_name B
        WHERE A.key_values = B.key_values);
(2) create table table2 as select distinct * from table1;
     drop table1;
     rename table2 to table1;
(3) Delete from mytable where rowid not in(
       select max(rowid) from mytable
       group by column_name );
(4) delete from mytable t1
      where  exists (select ''''x'''' from my_table t2
                   where t2.key_value1 = t1.key_value1
                     and t2.key_value2 = t1.key_value2
                     ...
                     and t2.rowid > t1.rowid);

61、ORA-12571: TNS:packet writer failure(包写入程序失败)

   (1) 这个错误在客户端遇到过,通常重新连接一下服务器就好了。
   服务器重新启动的时候,在client也会遇到该错误。
   这个错误你是在server还是client上遇到的?最常用的办法就是加上跟踪,查看一下    跟踪记录,分析分析错误的原因。
   网络问题也会出现该错误,比如网络路由没有配置好。
   (2) 安装的杀毒软件导致的
   (3) 服务器端的IP是否被改动
   (4) 最后不行的话,重新创建监听器
   
62、ORACLE服务不能自动启动的解决办法  

   把ORACLEHOME\network\ADMIN\sqlnet.ora
   文件中的 sqlnet.authentication_service=(nts)
   注释掉就可以了


63、不完全的时间点恢复

shutdown immediate
copy 备份文件到需要恢复的目录下
startup mount
recover database until time ''''2002-12-26 09:00:00''''

alter database open resetlogs

自己仔细检查一下,不会发生这样的问题的。

64、oracle如何设置查询超时

select  /*+  timeout  30*/  *  from  veryLargeTable 

65、修改字符集

(1)、ALTER DATABAE CHARACTER SET SIMPLIFIED CHINESE_CHINA.ZHS16GBK ;

(2)、update props$ set value$=''''ZHS16CGB231280''''
where name=''''NLS_CHARACTERSET'''';
update props$ set value$=''''ZHS16CGB231280''''
where  name=''''NLS_NCHAR_CHARACTERSET'''';

建议不使用(2)

注意:
(1)、执行ALTER DATABASE CHARACTER SET必须有SYSDBA权限,并且在STARTUP RESTRICT模式下执行
(2)、原字符集必须是目标字符集的一个真子集(就是浪子所说的只能从WE8ISO8859P1转到ZHS16GBK的原因)
(3)、CLOB字段装换可能有问题,建议在转换以前把有CLOB字段的表导出后DROP,转换以后再导回
(4)、该转换不可逆,所以在做这个操作以前建议做数据库全备份

66、修改数据库名字

(1)、启动svrmgrl,以文本方式备份控制文件
 oracle>svrmgrl
 svrmgrl>connect internal
 svrmgrl>alter system backup controlfile to trace
(2)、编辑产生的跟踪文件,在udump目录下
 改CREATE CONTROLFILE REUSE DATABASE "CTC" NORESETLOGS ARCHIVELOG
 中的REUSE为SET
 然后把create controlfile这段语句拷出
(3)、正常宕库,后启动到nomount下
 svrmgrl>shutdown immediate
 svrmgrl>startup nomount
(4)、执行create controlfile那段语句
(5)、打开数据库
 svrmgrl>alter database open
 如提示用resetlogs选项则使用
  svrmgrl>alter database open resetlogs
(8)、相应修改初始化参数

 

67、rownum的用法

   select * from (select t.*,rownum id from dept t)
   where id between 1 and 20


68、oracle的内部参数

   SELECT a.ksppinm NAME,
       b.ksppstdf default_val,
       a.ksppdesc DESCRIPTION
  FROM x$ksppi a,
       x$ksppcv b
 WHERE a.indx=b.indx
   AND substr(a.ksppinm,1,1)=''''_''''
 ORDER BY a.ksppinm

69、9i安装时报areasqueries错误的解决办法
    包括IAS 和 IDS
   
    把安装源文件目录全部改为英文字母或数字
    注意:不能是中文的路径

70、我如何知道一个表空间还有多少可以用

(1)、
SELECT upper(f.tablespace_name) 表空间名,
       d.Tot_grootte_Mb "表空间大小(M)",
       d.Tot_grootte_Mb - f.total_bytes "已使用空间(M)",
       round((d.Tot_grootte_Mb - f.total_bytes) / d.Tot_grootte_Mb * 100,2) "使用比",
       f.total_bytes "空闲空间(M)",
       f.max_bytes "最大块(M)"
 FROM     
    (SELECT tablespace_name,
            round(SUM(bytes)/(1024*1024),2) total_bytes,
            round(MAX(bytes)/(1024*1024),2) max_bytes
      FROM sys.dba_free_space
     GROUP BY tablespace_name) f,
    (SELECT dd.tablespace_name, round(SUM(dd.bytes)/(1024*1024),2) Tot_grootte_Mb
      FROM   sys.dba_data_files dd
      GROUP BY dd.tablespace_name) d
WHERE d.tablespace_name = f.tablespace_name   
ORDER BY 4 DESC
(2)、select tablespace_name,round(sum(bytes)/1024/1024,2) "M" from dba_free_space
group by tablespace_name

71、creck pl/sql developer 的方法

(1)、安装pl/sql developer
(2)、用UltraEdit将程序PLSQLDev.exe打开
(3)、将UltraEdit设置为16进制模式
(4)、查找串:BA 1E 00 00 00 2B D0
   修改:2B D0  为:4A 90
(5)、存盘退出
(6)、运行PLSQLDev.exe,如果提示你还有29天的时间可用,那就恭喜你了!

72、使索引无效

ALTER INDEX idx UNUSABLE;
ALTER INDEX idx_acctno DISABLE;(only to a function based index)

73、在SQLPLUS中给指定用户进行 set autotrace on/off
   
    以SCOTT用户为例:

    SQL>CONNECT scott/tiger
   
    connected.
   
    SQL>@$ORACLE_HOME/RDBMS/ADMIN/UTLXPLAN.SQL
   
    Table created.
   
    SQL>CONNECT / AS SYSDBA
   
    connected.
   
    SQL>@$ORACLE_HOME/SQLPLUS/ADMIN/PLUSTRCE.SQL
   
    drop role plustrace;
    Role dropped.
    create role plustrace;
    Role created.
    .
    grant plustrace to dba with admin option;
    Grant succeeded.

    SQL>GRANT PLUSTRACE TO SCOTT;

    Grant succeeded.

    SQL>CONNECT SCOTT/TIGER

    connected.       

    SQL>set autotrace on

    SQL>

74、关于约束的四种状态

Disabled novalidate:当约束使不能时,约束的规则不能强制在列
       (包含在约束中)的数据之上。但约束的定义保存在数据字典中。
       在执行数据仓库卷起(rollup)或装载且要加快装载过程时该方式
       是有用的。
Enabled novalidate:是能无效,该状态的表可以包含非法
      的数据,但不可能加入新的非法数据。
Enabled validate:使能有效,一个使能的约束是强制的,表的数据检查
      有效

75、在SQLPLUS中调用存储过程

SET SERVEROUTPUT ON
declare
 out_param varchar2(100);
begin
 your_proc(1,out_param);
 dbms_output.put_line(out_param);
end;
/
SET SERVEROUTPUT OFF

75、生成系统表和存储过程的三个文件。

     cat*.sql
     dbms*.sql
     utl*.sql

76、JOB中日期的使用

每个月1号:
last_day(sysdate)+1
每个季度的第一天:
to_date(decode(to_char(sysdate,''''q''''),''''1'''',to_char(sysdate,''''yyyy'''')||''''0101'''',
    ''''2'''',to_char(sysdate,''''yyyy'''')||''''0401'''',''''3'''',to_char(sysdate,''''yyyy'''')||''''0701'''',
    ''''4'''',to_char(sysdate,''''yyyy'''')||''''1001''''),''''yyyymmdd'''')
每天:
sysdate+1
每个星期几:
decode(to_char(sysdate,''''w''''),''''1'''',sysdate+7,
to_char(sysdate,''''w''''),''''2'''',sysdate+6,to_char(sysdate,''''w''''),''''3'''',sysdate+5,
to_char(sysdate,''''w''''),''''4'''',sysdate+4,to_char(sysdate,''''w''''),''''5'''',sysdate+3,
to_char(sysdate,''''w''''),''''6'''',sysdate+2,to_char(sysdate,''''w''''),''''7'''',sysdate+1)

每个星期x下午三点:interval(21, ''''next_day(trunc(sysdate),x+1)+15/24'''');

每个季度的第一个星期x:
interval(21, ''''next_day(trunc(sysdate,''''''''Q''''''''),3),5)'''');


77、使用execute immediate 的问题

8i以上才支持execute imm

上一页  [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……
    咸宁网络警察报警平台