oracle打出sf后自动补齐查询,Oracle常见问题

1. ORA-01502 重建索引

Begin

For v_index In (Select index_name As iname

From User_Indexes

Where status = 'UNUSABLE') Loop

Execute Immediate 'alter index ' || v_index.Iname || ' rebuild';

End Loop;

End;

2. 重置Sequence

declare

n number(10);

max_id number(10);

diff number(10);

tsql varchar2(100);

begin

select max(s.sfck_id) into max_id from sfieldcheck s;

select max_id - seq_sfck_id.nextval into diff from dual;

tsql := 'alter sequence seq_sfck_id increment by ' || diff;

dbms_output.put_line(tsql);

execute immediate tsql;

select seq_sfck_id.nextval into n from dual;

tsql := 'alter sequence seq_sfck_id increment by 1';

execute immediate tsql;

end;

3. 查看列信息

SELECT * FROM USER_TAB_COLUMNS where COLUMN_NAME = 'col_name';

查看TABLE、VIEW、INDEX、SEQUENCE、PACKAGE等对象信息

select * from user_objects where object_type = 'TABLE' and object_name = 'object_name';

4. DBA_TABLES、ALL_TABLES、USER_TABLES三个视图可以用来查询表信息,它们之间的关系和区别

DBA_TABLES >= ALL_TABLES >= USER_TABLES

DBA_TABLES为DBA拥有的或可以访问的所有表。

ALL_TABLES为某一用户拥有的或可以访问的所有表。

USER_TABLES为某一用户所拥有的所有表。

由上可知,当某一用户本身就为数据库DBA时,DBA_TABLES与ALL_TABLES等价。

5. dba_tables、user_all_tables中num_rows的值和表count(*)不一致原因

num_rows、blocks等一些信息是使用analyze table分析表时填写进去的,命令格式如下:

analyze table tabname compute statistics;

call dbms_stats.gather_table_stats(ownname, tabname);

从Oracle 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动收集CBO(Cost Based Optimization)的统计信息。这个任务默认情况下在工作日晚上10:00 - 6:00和周末全天开启(同在10点运行的Job还有一个AUTO_SPACE_ADVISOR_JOB)。调用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集统计信息。该过程首先检测统计信息缺失和陈旧的对象,然后确定优先级,再开始进行统计。

说明:当做完统计信息后,如果对象的行数修改达到10%,DBMS_STATS就认为是统计信息过旧。

可以通过以下SQL查询这个JOB的运行情况:

SQL> select * from Dba_Scheduler_Jobs where JOB_NAME ='GATHER_STATS_JOB'

然而这个自动化功能已经影响了很多系统的正常运行,晚上10点对于大部分生产系统也并非空闲时段。而自动分析可能导致极为严重的闩锁竞争,进而可能导致数据库Hang或者Crash。

关闭及开启自动搜集功能,有两种方法,分别如下:

方法一:

exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');

exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB');

方法二:

alter system set "_optimizer_autostats_job"=false scope=spfile;

alter system set "_optimizer_autostats_job"=true scope=spfile;

6. 修改日期显示格式

修改当前会话日期格式

alter session set NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';

修改初始化参数

alter system set nls_date_format='yyyy-mm-dd' SCOPE=spfile;

修改客户端注册表

在HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE下,新建字符串值nls_date_format=yyyy-mm-dd hh24:mi:ss

7. 查询本地化参数

与本地化参数有关的数据字典有:

V$NLS_PARAMETERS

V$PROPS$

NLS_DATABASE_PARAMETERS

NLS_INSTANCE_PARAMETERS

NLS_SESSION_PARAMETERS

执行以下任一语句均可:

show parameters;

select * from V$NLS_PARAMETERS;

select * from V$PROPS$;

select * from nls_session_parameters;

8. 插入换行符

换行符 chr(10)               回车符 chr(13)

insert into t(col) values('hello'||chr(10)||'coco');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值