一. Oracle 控制文件主要包含如下条目
DATABASE ENTRY
CHECKPOINT PROGRESS RECORDS
REDO THREAD RECORDS
LOG FILE RECORDS
DATA FILE RECORDS
TEMP FILE RECORDS
TABLESPACE RECORDS
LOG FILE HISTORY RECORDS
OFFLINE RANGE RECORDS
ARCHIVED LOG RECORDS
BACKUP SET RECORDS
BACKUP PIECE RECORDS
BACKUP DATAFILE RECORDS
BACKUP LOG RECORDS
DATAFILE COPY RECORDS
BACKUP DATAFILE CORRUPTION RECORDS
DATAFILE COPY CORRUPTION RECORDS
DELETION RECORDS
PROXY COPY RECORDS
INCARNATION RECORDS
二.可以通过dump看到 控制文件内
方法1.直接dump controlfile:alter system set events 'immediate trace name controlf level 10'
方法2. alter database backup controlfile to trace
查看UDMP目录下的<SID>_ora_<PID>.trc文件
方法3.alter database backup controlfile to 文件名
查询该文件
SQL>select name from v$controlfile
SQL>show parameter user_dump_dest
在指定的目录下会找到刚产生的trc文件,通 ......
oracle 可有什么方法 统计每月累积购买人数
比如说有个门店 2008年购买商品的人数
表:t_buy_log 字段 f_username 用户名称;购买时间f_buytime
1 如果是统计每月购买人数
select to_char(f_buytime,'yyymm'),count(distinct f_username)
from t_buy_log
group by to_char(f_buytime,'yyymm')
order by to_char(f_buytime,'yyymm') asc
结果:
1月 100人
2月 150人
3月 50人
2 如果统计每月累积购买人数 ?
1月 100人
2月 是1月和2月的购买人数 客户有重复 值在100-250之间
3月 是1-3月的购买人数
这个该怎么写呢?
用分析函数的SUM 好像不行
1-1
select to_char(f_buytime,'yyymm'),count(distinct f_username)
from t_buy_log
WHERE to_char(f_buytime,'yyymm')='200901'
1-2
select to_char(f_buytime,'yyymm'),count(distinct f_username)
from t_buy_log
WHERE to_char(f_buytime,'yyymm') between '200901' and '200902'
1-3
select to_char(f_buytime,'yyymm'),count(distinct f_username)
from t_buy_log
WHERE to_char(f_buytime,'yyy ......
在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能。
1.1 分区表PARTITION table
在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能。
1.1.1 分区表的建立:
某公司的每年产生巨大的销售记录,DBA向公司建议每季度的数据放在一个分区内,以下示范的是该公司1999年的数据(假设每月产生30M的数据),操作如下:
范围分区表:
CREATE TABLE sales
(invoice_no NUMBER,
...
sale_date DATE NOT NULL )
PARTITION BY RANGE (sale_date)
(PARTITION sales1999_q1
VALUES LESS THAN (TO_DATE(‘1999-04-01','YYYY-MM-DD')
TABLESPACE ts_sale1999q1,
PARTITION sales1999_q2
VALUES LESS THAN (TO_DATE(‘1999-07-01','YYYY-MM-DD')
TABLESPACE ts_sale1999q2,
PARTITION sales1999_q3
VALUES LESS THAN (TO_DATE(‘1999-10-01','YYYY-MM-DD')
TABLESPACE ts_sale1999q3,
PARTITION sales1999_q4
VALUES LESS THAN (TO_DATE(‘2000-01-01','YYYY-MM-DD')
TABLESPACE ts_sale1999q4 );
--values less than (maxvalue)
列表分区表:
create table emp (
empno number(4),
ename varchar2( ......
前天有人提了需求,想对某个字段进行按位的或操作。本来建议查询出来之后在应用程序里面处理,但是数据量比较大,觉得还是返回一个分组计算之后的值比较合适。
两个问题,一个是按为或的操作,这个参考了别人的文档,用bitand函数实现。 原文如下:
http://blog.chinahr.com/blog/hewy0526/post/112968
然后就是自定义的聚集函数了。这个参考了官方文档的例子,就不列出原文出处了。
全部代码如下:
-- 1. Implement the type BitOrImpl to contain the ODCIAggregate routines:
create type BitOrImpl as object
(
bitorval NUMBER, -- result.
static function ODCIAggregateInitialize(sctx IN OUT BitOrImpl)
return number,
member function ODCIAggregateIterate(self IN OUT BitOrImpl,
value IN number) return number,
member function ODCIAggregateTerminate(self IN BitOrImpl,
returnValue OUT number, flags IN number) return number,
member function ODCIAggregateMerge(self IN OUT BitOrImpl,
ctx2 IN BitOrImpl) r ......
1. 查询数据库现在的表空间
select tablespace_name, file_name, sum(bytes)/1024/1024 table_size from dba_data_files group by tablespace_name,file_name;
2. 建立表空间
CREATE TABLESPACE data01 DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M;
3.删除表空间
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;
4. 修改表空间大小
alter database datafile '/path/NADDate05.dbf' resize 100M
5.增加数据文件
ALTER TABLESPACE NEWCCS ADD DATAFILE '/u03/oradata/newccs/newccs04.dbf' SIZE 4896M; ......
首先查看数据库现有模式可使用以下语句
select name,log_mode from v$database;
也可以用下面的语句
archive log list;(该方法需要as sysdba)
SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /export/home/oracle/product/8.1.7/dbs/arch
Oldest online log sequence 28613
Current log sequence 28615
SQL> SELECT NAME,LOG_MODE from V$DATABASE;
NAME LOG_MODE
-------- ------------
BIGSUN NOARCHIVELOG
对于非归档模式的数据库该为归档模式(主要以Oracle 10g为参考)使用以下步骤:
1. SQL> alter system set log_archive_dest_1='location=/oracle/oracle10g/log/archive_log';
该语句含义是确定归档日志的路径,实际上Oracle 10g可以生成多份一样的日志,保存多个位置,以防不测
例如再添加一个日志位置可使用以下语句
SQL>alter system set log_archive_dest_2='location=/oracle/oracle10g/log2/archive_log';
2.关闭数据库
SQL> shutdown immediate
3.启动数据mount状态: ......