maggie 的blog

深入探讨搭建数据仓库过程中应当遵循的方法和原则

一、数据仓库的架构

数据仓库(Data Warehouse \ DW)是为了便于多维分析和多角度展现而将数据按特定的模式进行存储所建立起来的关系型数据库,它的数据基于OLTP源系统。数据仓库中的数据是细节的、集成的、面向主题的,以OLAP系统的分析需求为目的。

数据仓库的架构模型包括了星型架构(图二:pic2.bmp)与雪花型架构(图三:pic3.bmp)两种模式。如图所示,星型架构的中间为事实表,四周为维度表,类似星星;而相比较而言,雪花型架构的中间为事实表,两边的维度表可以再有其关联子表,从而表达了清晰的维度层次关系。

从OLAP系统的分析需求和ETL的处理效率两方面来考虑:星型结构聚合快,分析效率高;而雪花型结构明确,便于与OLTP系统交互。因此,在实际项目中,我们将综合运用星型架构与雪花型架构来设计数据仓库。

那么,下面我们就来看一看,构建企业级数据仓库的流程。

二、构建企业级数据仓库五步法

(一)、确定主题

即确定数据分析或前端展现的主题。例如:我们希望分析某年某月某一地区的啤酒销售情况,这就是一个主题。主题要体现出某一方面的各分析角度(维度)和统计数值型数据(量度)之间的关系,确定主题时要综合考虑。

使用Oracle数据库过程中最常碰到的几个错误

1、ORA-12541:TNS:没有监听器

原因:没有启动监听器或者监听器损坏。如果是前者,使用命令net start OracleOraHome81TNSListener(名字可能有出入)即可;如果是后者,则使用“Net8 Configuration Assistant”工具向导之“监听程序配置”增加一个监听器即可(基本不用写任何信息,一路OK。在添加之前可能需要把所有的监听器先删除!)

2、ORA-12500:TNS:监听程序无法启动专用服务器进程

ORA-12560:TNS:协议适配器错误

原因:ORACLE的数据库服务没有启动。使用命令net start ORACLESERVICEORADB(ORADB为数据库名字)即可。如果仍没有解决,请继续向下看。

3、如果数据库服务启动失败,则很有可能是其注册表项值损坏,最好的做法是以下两步:

1)ORADIM -DELETE -SID oradb 删除数据库服务项

2)ORADIM -NEW -SID oradb 新增数据库服务项

注:这个过程中如果出错,就重启计算机!

4、ORA-12154:TNS:能解析服务名

如何在Oracle中移动数据文件

一.移动数据文件:

– 可以用ALTER DATABASE,ALTER TABLESPACE两种方法移动数据文件。

1. ALTER DATABASE方法;

– 用此方法,可以移动任何表空间的数据文件。

STEP 1. 下数据库:

$ sqlplus /nolog 

SQL> CONNECT INTERNAL; 

SQL> SHUTDOWN; 

SQL> EXIT; 

STEP 2.用操作系统命令移动数据文件:

– 将数据文件 ‘test.ora’ 从/ora/oracle/data1目录移动到/ora/oracle/data2目录下:


$ mv /ora/oracle/data1/test.ora /ora/oracle/data2 

STEP 3. Mount数据库,用ALTER DATABASE命令将数据文件改名:
[code]
$ sqlplus /nolog

SQL> CONNECT INTERNAL;

SQL> STARTUP MOUNT;

Oracle数据库坏块ORA-01578的处理方法

ORACLE的坏块即ORA-01578错,同时还可能伴随ORA-01110错,这种错误对于初学者或是那些没有实践经验的dba来说无疑是很棘手的。我当初就深受其害,写下这篇文章则是希望对大家有所帮助。

一、出问题时的情景

1、 我的一个计费的入库的进程停掉,报的便是ORA-01578错,对应用相关的表tg_bill03做SQL>select from tg_cdr03 where rownum<10;这样是可以的,但做SQL>select count(*) from tg_bill03;时则报ORA-01578错。

2、 检查alter.log中看到一几条报错信息:
[code]
Errors in file /oracle816/app/admin/billing/udump/ora_7281_billing.trc:

ORA-01578: ORACLE data block corrupted (file # 126, block # 88490)

ORA-01110: data file 126: ‘/dev/vgjf7/rdata471′
[/ode]
二、事后分析产生这种问题的原因

1、 十之八九这个Oracle的数据库server打开了异步I/O(async io)或增加了写进程。

Oracle数据库删除表中重复记录的三种方法

方法一:

delete from tb_channel a where a.rowid in 

(select max(b.rowid) from tb_channle b 

where a.policyno=b.policyno and a.classcode=b.classcode); 

——这一办法在数据记录超过10万时一般都会变得很慢。

方法二:

--建立临时表,--清空原表,--插回原表,如下例:

create table temp_emp as (select distinct * from employee) ; 

truncate table employee; 

insert into employee select * from temp_emp; 

——这一办法适用于较大的表的情况。因为是块操作,对应于大表效率会好很多

方法三:

--建立新表,--去重复放入,--删除原表,如下例:
[code]
select distinct * into new_table from old_table

order by 主 键

drop table old_table

Oracle与MySQL删除字段时对索引和约束处理的不同之处

不知道有多少人清楚的知道,在Oracle中,如果一个复合索引,假定索引(a,b,c)三个字段,删除了(包括unused)其中一个字段,Oracle会怎么处理这个索引。同样,如果是约束,Oracle又怎么处理?

用Oracle为例子,我又拿mysql做了一个对比,看看mysql是怎么处理这个问题的。我这里不讨论谁好谁差,只是希望大家知道其中的差别与细节而已。

我们先看Oracle的例子,我们创建一个表,然后在上面创建一个约束,创建一个索引:

SQL10G>createtabletest(aint,bint,cint); 

Tablecreated. 

SQL10G>altertabletestaddconstraintpk_testprimarykey(a,b); 

Tablealtered. 

SQL10G>createindexind_testontest(b,c); 

Indexcreated. 

然后,我们检查刚才创建的约束与索引
[code]  SQL10G>selectt.constraint_name,c.constraint_type,t.column_name,t.position,c.status,c.validated

Oracle数据库定时工作的使用方法

Oracle数据库的Jobs创建语句如下:

begin 

sys.dbms_job.submit(job => :job, 

what => 'proc_yw;', 

next_date => to_date('13-11-2007 14:00:00', 'dd-mm-yyyy hh24:mi:ss'), 

interval => 'trunc(sysdate)+1+14/24'); 

commit; 

end; 

/ 

间隔trunc(sysdate)+1+14/24 就是每天下午2点执行一次proc_yw存储过程;

如间隔trunc(sysdate)+1+33/48就是每天下午4:30时执行一次

oracle数据库的定时Jobs作业(工作) 的使用

通过jobs的使用就能实现每天或每月的指定时间执行一个函数、过程与命令。

就如同windows系统中的任务计划一样。

2015年全球无线宽带用户总数将逼近21亿

市场调查机构Analysys Mason日前发表最新研究报告称,无线宽带服务将创造巨大的营收增长机会,蜂窝技术将占有最大的份额。报告指出,2015年全球无线宽带用户总数将超过20亿,达21亿,无线宽带服务营收将达7840亿美元,营收增长约24倍,这主要得益于无线技术的不断开发,产品性能的不断改进,以及运营商开展的更加灵活的价格策略。

该报告称,到今年底88%的无线宽带用户将采用HSPA(高速分组接入)技术,这一比例将会进一步扩大。该报告的联合作者马克说:“尽管LTE(长期演进)和 WiMAX技术的应用不断扩大,但是到2015年底仍有54%的无线宽带用户使用HSPA和HSPA+技术。”

到今年底,发展中国家的无线宽带用户将仅占全球无线宽带用户总数的17%,不过,由于这些地区固定线路基础设施匮乏,无线宽带服务将会出现强劲增长的态势,到2015年底,发展中国家的无线宽带用户将占全球无线宽带用户总数的57%。

该报告还指出,从W-CDMA到 HSPA 再到 HSPA+技术,是GSM运营商发展的必由之路,到2015年底,全球 HSPA 和 HSPA+用户将会从今年底的6100万增加到11亿。蜂窝技术将在无线宽带服务中占主导地位,到2015年底该技术的用户将是WiMAX用户的20倍。

如何在Oracle数据库设置默认表空间

DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间——system表空间。导致系统表空间迅速被用户数据占满,直至宕机。

在10G中,DBA有办法避免这种问题了——在线指定系统默认表空间:

ALTER DATABASE DEFAULT TABLESPACE ; 

通过执行以上命令,可以设定系统的默认表空间。这样的话,在创建新用户时,如果不指定他的默认表空间,就会采用上面指定的系统默认表空间作为这个用的默认表空间。

SQL>conn /as sysdba 


SQL> create user test1 identified by test1 default tablespace ringidx; 

用户已创建。

SQL> alter database default tablespace ring; 

数据库已更改。

SQL> create user test identified by test; 

用户已创建。

[code]

Oracle数据库存储过程若干问题的探讨

1.在oracle中,数据表别名不能加as,如:

select a.appname from appinfo a;-- 正确 

select a.appname from appinfo as a;-- 错误 

也许,是怕和oracle中的存储过程中的关键字as冲突的问题吧

2.在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。

select af.keynode into kn from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 有into,正确编译 

select af.keynode from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 没有into,编译报错,提示:Compilation 

Error: PLS-00428: an INTO clause is expected in this Select statement 

同步内容