Similarities in Database and Data warehouse:
* Both database and data warehouse are databases.
* Both database and data warehouse have some tables containing data.
* Both database and data warehouse have indexes, keys, views etc.
Differences
* The Application database is not your Data Warehouse for the simple reason that your application database is never designed to answer queries.
* The database is designed and optimized to record while the data warehouse is designed and optimized to respond to analysis questions that are critical for your business.
* Application databases are On-Line Transaction processing systems where every transition has to be recorded, and super-fast at that.
* A Data Warehouse on the other hand is a database that is designed for facilitating querying and analysis
* A data warehouse is designed as On-Line Analytical processing systems . A data warehouse contains read-only data that can be queried and analyzed far more efficiently as compared to regular OLTP application databases. In this sense an OLAP system is designed to be read-optimized.
* Separation from your application database also ensures that your business intelligence solution is scalable, better documented and managed and can answer questions far more efficiently and frequently.
Data warehouse is better than a database:
The Data Warehouse is the foundation of any analytics initiative. You take data from various data sources in the organization, clean and pre-process it to fit business needs, and then load it into the data warehouse for everyone to use. This process is called ETL which stands for ‘Extract, transform, and load'.
Suppose you are running your reports off the main application database. Now the question is would the solution still work next year with 20% more customers, 50% more business, 70% more users, and 300% more reports? What about the year after next? If you are sure that your solution will run without any changes, great!! However, if you have already budgeted to buy new state-of-the-art hardware and 25 new Oracle licenses with those partition-options and the 33 other cool-sounding features, you might consider calling up Oracle and letting them know. There's a good chance they'd make you their brand ambassador.
Creation of a data warehouse leads to a direct increase in quality of analyses as you can keep only the needed information in simpler tables, standardized, and denormalized to reduce the linkages between tables and the corresponding complexity of queries.
A data warehouse drastically reduces the cost-per-analysis and thus permits more analysis per FTE.
(Data Adopted)
May 28, 2009
Check Constraint
Check Constraint
CREATE TABLE EMP_DETAILS(
NAME VARCHAR2(20),
MARITAL CHAR(1) CHECK(MARITAL='S' OR MARITAL = 'M'),
CHILDREN NUMBER,
CHECK((MARITAL = 'S' AND CHILDREN=0) OR
(MARITAL = 'M' AND CHILDREN >=0)));
This constraint can only be kept at table level because it accesses more than one field. Now the valid values for CHILDREN field is based on MARITAL field. MARITAL is also one of 'S' or 'M'. If the field MARITAL is 'S' it will only allow 0 as a valid value. If the MARITAL field is 'M' it will allow either 0 or a value greater than 0.
CREATE TABLE EMP_DETAILS(
NAME VARCHAR2(20),
MARITAL CHAR(1) CHECK(MARITAL='S' OR MARITAL = 'M'),
CHILDREN NUMBER,
CHECK((MARITAL = 'S' AND CHILDREN=0) OR
(MARITAL = 'M' AND CHILDREN >=0)));
This constraint can only be kept at table level because it accesses more than one field. Now the valid values for CHILDREN field is based on MARITAL field. MARITAL is also one of 'S' or 'M'. If the field MARITAL is 'S' it will only allow 0 as a valid value. If the MARITAL field is 'M' it will allow either 0 or a value greater than 0.
Some Good Queries
To get size of a table
select segment_name table_name,sum(bytes)/(1024*1024) table_size_meg
from user_extents where segment_type='TABLE'
and segment_name = 'EMP_MAST' group by segment_name
---------------------------------------------------------------
To Select only unlocked rows
select * from emp_MAST for update skip locked;
CHECK THIS USING TWO SQL PLUS AND SESSION BROWSER IN TOAD
UPDATE EMP_MAST SET ENAME='p' WHERE EMPNO=7369 ; (IN FIRST SQLPLUS DONT EXECUTE COMMIT )
select * from emp_MAST for update skip locked; (IN SECOND SQLPLUS)
--------------------------------------------------------
To get numbers of records in all tables in a Schema
select table_name,to_number(extractvalue(xmltype(
dbms_xmlgen.getxml('select count(*) c from '||table_name)
),'/ROWSET/ROW/C')) count from user_tables order by 1
---------------------------------------------------------
To generate a CSV output of a Table
select regexp_replace(column_value,' *<[^>]*>[^>]*>',';')
from table(xmlsequence(cursor(select * from EMP_MAST)));
--------------------------------------------------------------
To get Version and login naem
select OLAPSYS.version,sys.LOGIN_USER from dual
--------------------------------------------------
select APEX_UTIL.get_since(sysdate-10) /* get how many days ago */,APEX_UTIL.url_encode('http://www.oracle4u.com') from dual;
-------------------------------------------
select round(12.55555E78,2) from dual ---- For numeric overflow round function will not work
------------------------------------------
How to do pattern search in a subquery using LIKE
with dt as( select distinct BOTTLETYPE from DRINKS WHERE BOTTLETYPE is not null )
select * from tabled,dt where name like ''||dt.BOTTLETYPE||'%' order by 2
OR
select * from tabled df,(select distinct BOTTLETYPE from DRINKS WHERE BOTTLETYPE is not null) gh where name like ''||gh.BOTTLETYPE||'%' order by 2
OR
SELECT * FROM tabled df WHERE EXISTS (SELECT distinct BOTTLETYPE FROM DRINKS gh WHERE BOTTLETYPE is not null and df.name LIKE ''||gh.BOTTLETYPE||'%') ;
----------------
Check for hidden database user ----------------
Run OS Commands via PLSQL ----------------
Run OS Commands via DBMS_SCHEDULER ----------------
Run OS Commands via Create Table --------------------------------
select segment_name table_name,sum(bytes)/(1024*1024) table_size_meg
from user_extents where segment_type='TABLE'
and segment_name = 'EMP_MAST' group by segment_name
---------------------------------------------------------------
To Select only unlocked rows
select * from emp_MAST for update skip locked;
CHECK THIS USING TWO SQL PLUS AND SESSION BROWSER IN TOAD
UPDATE EMP_MAST SET ENAME='p' WHERE EMPNO=7369 ; (IN FIRST SQLPLUS DONT EXECUTE COMMIT )
select * from emp_MAST for update skip locked; (IN SECOND SQLPLUS)
--------------------------------------------------------
To get numbers of records in all tables in a Schema
select table_name,to_number(extractvalue(xmltype(
dbms_xmlgen.getxml('select count(*) c from '||table_name)
),'/ROWSET/ROW/C')) count from user_tables order by 1
---------------------------------------------------------
To generate a CSV output of a Table
select regexp_replace(column_value,' *<[^>]*>[^>]*>',';')
from table(xmlsequence(cursor(select * from EMP_MAST)));
--------------------------------------------------------------
To get Version and login naem
select OLAPSYS.version,sys.LOGIN_USER from dual
--------------------------------------------------
select APEX_UTIL.get_since(sysdate-10) /* get how many days ago */,APEX_UTIL.url_encode('http://www.oracle4u.com') from dual;
-------------------------------------------
select round(12.55555E78,2) from dual ---- For numeric overflow round function will not work
------------------------------------------
How to do pattern search in a subquery using LIKE
with dt as( select distinct BOTTLETYPE from DRINKS WHERE BOTTLETYPE is not null )
select * from tabled,dt where name like ''||dt.BOTTLETYPE||'%' order by 2
OR
select * from tabled df,(select distinct BOTTLETYPE from DRINKS WHERE BOTTLETYPE is not null) gh where name like ''||gh.BOTTLETYPE||'%' order by 2
OR
SELECT * FROM tabled df WHERE EXISTS (SELECT distinct BOTTLETYPE FROM DRINKS gh WHERE BOTTLETYPE is not null and df.name LIKE ''||gh.BOTTLETYPE||'%') ;
----------------
Check for hidden database user ----------------
Run OS Commands via PLSQL ----------------
Run OS Commands via DBMS_SCHEDULER ----------------
Run OS Commands via Create Table --------------------------------
May 25, 2009
Much More About Constraints
PRIMARY KEY LOOK UP DURING FOREIGN KEY CREATION
The lookup of matching primary keys at time of foreign key insertion takes time.In realease Oracle 9i , the first 256 primary keys can be cached so the addition of multiple foreign keys become significantly faster .The cache is only set up after the second row is processed.this avoid overhead of setting up a cache for single row DML.
----------------------
Constraints On View
--------------------
Constraint definitions are done on View from Oracle 9i onwards.
Views constraint definitions are declarative in nature;therefore DML operations on view are subject to the constraints defined on base tables.
defining constraints on base table is necessary ,not only for data correctness and cleanliness but also for MV query
NOT NULL and CHECK constraint are not supported on Views
For Creating View with constraints you must specify [RELY|NORELY ](Allows/disallows query rewrites) DISABLE NOVALIDATE (valid state for view constraint )
Otherwise it will result an error message.
The lookup of matching primary keys at time of foreign key insertion takes time.In realease Oracle 9i , the first 256 primary keys can be cached so the addition of multiple foreign keys become significantly faster .The cache is only set up after the second row is processed.this avoid overhead of setting up a cache for single row DML.
----------------------
Constraints On View
--------------------
Constraint definitions are done on View from Oracle 9i onwards.
Views constraint definitions are declarative in nature;therefore DML operations on view are subject to the constraints defined on base tables.
defining constraints on base table is necessary ,not only for data correctness and cleanliness but also for MV query
NOT NULL and CHECK constraint are not supported on Views
For Creating View with constraints you must specify [RELY|NORELY ](Allows/disallows query rewrites) DISABLE NOVALIDATE (valid state for view constraint )
Otherwise it will result an error message.
May 21, 2009
Trigger (Insertion on Same Table)
Trigger to insert a field from sequence at user insertion itself by avoiding mutating table error. For example ; for a table as 'TABLE_NAME' with fields N_FIELDNAME,N_CODE,N_ID,VC_NAME,DT_DATE here excluding N_FIELDNAME field all other fields are user input; N_FIELDNAME field value is retrieved from SEQUENCE.If we use
select query on same table 'TABLE_NAME' it will result into Mutating table error .So this piece of trigger code is used to do the above.
CREATE OR REPLACE TRIGGER TRG_NMAE
BEFORE INSERT ON TABLE_NAME
FOR EACH ROW
DECLARE
N_VARIABLE NUMBER(10):=0;
BEGIN
SELECT SEQUENCE_NAME.NEXTVAL INTO N_VARIABLE FROM DUAL;
:NEW.N_FIELDNAME :=N_VARIABLE;
END ;
select query on same table 'TABLE_NAME' it will result into Mutating table error .So this piece of trigger code is used to do the above.
CREATE OR REPLACE TRIGGER TRG_NMAE
BEFORE INSERT ON TABLE_NAME
FOR EACH ROW
DECLARE
N_VARIABLE NUMBER(10):=0;
BEGIN
SELECT SEQUENCE_NAME.NEXTVAL INTO N_VARIABLE FROM DUAL;
:NEW.N_FIELDNAME :=N_VARIABLE;
END ;
Subscribe to:
Posts (Atom)