Showing posts with label solve. Show all posts
Showing posts with label solve. Show all posts

Sunday, March 25, 2012

Do I need a warehouse?

Hi chaps,

I have the following scenario and aren't sure of what approach I need to take to solve it. Any advice would be welcome (im very new to warehousing).

Scenario: I have a high transaction OLTP database (SQL Server) containing 20+ inter-related tables. It is all highly normalised. Over a year I am looking to accumulate something like 10+ million rows of information (most likely more).

The database is used extensively by an application (ASP.NET) which allows users to view (and in some cases update) the information in the database. The majority of the data is inserted by BizTalk.

Once an entire transaction is completed (which may take for example 2 weeks), it will not be changed in the future, but will still need to be reported on. I.e. View All Orders in March 07

Problem: As my data volumes grow, the performance of this database will undoubtedly begin to crawl, for both selects and inserts/updates. To solve this, I would like to move the completed transactions into an achieve (i.e. my datawarehouse) that will store the information in a denormalised state which the application can continue to use to perform queries (which I hope will be very fast).

I understand this isn't a typical use for a warehouse, namely I am not summing numerical figures or interesting in aggregating information based on measures/hierarchies.

Is what I want to do a correct approach, or can someone provide a better solution?

Any help would be greatly appreciated,
TM

Hello. You can build your data warehouse as highly normalized as you prefer. You can control the aggregation of information in one or several data marts that you can build from views or in tables in a new database.

Data warehouse and data marts(aggregated denormalized) informations do not have to be the same.

In the data warehouse you will normally remove some tables in order to keep the number of relations down to a minimum. You will also translate OLTP-columns to more business like names.

Still, if you build a copy of the source system in the data warehouse you will be able to remove historical transactions from the source. That will help performance in the source system.

Also, analytical queries will not compete for resources with transaction registration.

HTH

Thomas Ivarsson

|||

So Thomas,

If I were to build a denormalized warehouse could I then build a UDM cube on top of it without building an OALP fact/dimension type structure?

|||

Hello JohnSLG. Yes, I think you can. You can build cubes on top of OLTP-systems.

You can have all information like dimensions, hierarchies and measures in one table and build a cube on that.

Best practice, however, points to a data mart on top of a data warehouse.

Kind Regards

Thomas Ivarsson

|||

Thank you for your response, greatly appreciated.

Could you also point me to where I can get a grounding in general warehousing theory? Then build onto this with Analysis Serviecs.

Kind regards

TM

|||

Here is a good link: www.kimballgroup.com

Regards

Thomas Ivarsson

Friday, February 17, 2012

Distributed transaction trough ODBC from MSSQL to Oracle

I lost few days to solve a problem regarding the connection to an Oracle database server (10) with goal to execute a distributed transaction.

The environment was:

Windows Server 2003 Standard

MSSQL Server 2000 Standard

Oracle 10g Production Edition

The connection was quite easy to make with the Microsoft driver, but the error was:

Server: Msg 7391, Level 16, State 1, Line 3

The operation could not be performed because the OLE DB provider 'MSDAORA' was unable to begin a distributed transaction.

OLE DB error trace [OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b].

I tried to use the oracle odbc driver, but all kinds of errors were raised, regarding the TNS name and stuff like this. The real cause was that when you create the linked server you must to check the “Allow inbound process” in the provider options.

The Oracle ODBC driver allow distributed transactions.

Would you please clarify where exactly that ""Allow inbound process" option needs to be checked? I am setting up a linked server with a Provider name as "Microsoft OLE DB for Oracle" and clicking "Provider Options..." button brings up a dialog that does NOT have "Allow inbound process" as one of the options to check.

Distributed transaction trough ODBC from MSSQL to Oracle

I lost few days to solve a problem regarding the connection to an Oracle database server (10) with goal to execute a distributed transaction.

The environment was:

Windows Server 2003 Standard

MSSQL Server 2000 Standard

Oracle 10g Production Edition

The connection was quite easy to make with the Microsoft driver, but the error was:

Server: Msg 7391, Level 16, State 1, Line 3

The operation could not be performed because the OLE DB provider 'MSDAORA' was unable to begin a distributed transaction.

OLE DB error trace [OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b].

I tried to use the oracle odbc driver, but all kinds of errors were raised, regarding the TNS name and stuff like this. The real cause was that when you create the linked server you must to check the “Allow inbound process” in the provider options.

The Oracle ODBC driver allow distributed transactions.

Would you please clarify where exactly that ""Allow inbound process" option needs to be checked? I am setting up a linked server with a Provider name as "Microsoft OLE DB for Oracle" and clicking "Provider Options..." button brings up a dialog that does NOT have "Allow inbound process" as one of the options to check.

Distributed transaction problem

I'm having problems with distributed transactions. I know this has been descussed a lot before, but i haven't been able to solve my problems anyway.

So, what do I try to do? I try to recieve data from one server (source) to a destination server with an integration services package using a transaction. The source server is a Windows 2003 server running SQL 2000. The destination server is a SQL 2005 Cluster on Windows 2003 Server. Both machines has MSDTC running and allowing both inbound and outbound transactions. I have run DTCPing and DTCTester successfully in both directions.

A bit simplified, my SSIS package looks like this.

    Execute SQL Task (Delete old data on the destination server)

    Data Flow Task

      Get data from source using an OLE DB Source

      Write data to destination using an OLE DB Destination

This works just fine if I in my topmost container set TransactionOption to supported, but if I change it into Required, my package fails with the error message:

Error: The SSIS Runtime has failed to start the distributed transaction due to error 0x8004D01B "The Transaction Manager is not available.". The DTC transaction failed to start. This could occur because the MSDTC Service is not running.

Could the fact that the destination is a cluster be a prolem here? I'm pretty sure I have successfully done operations like this in other environments, but without clusters involved.

Oh, one last thing. No firewall what so ever is runnig on or between the servers.

regards Andreas

Does anyone have any ida before I use one of our support cases and call Microsoft support?|||

It seems as tho DTC is creating the problem. I don't know much about configuring that but I'm sure Google can help. Here's some links that may also help:

http://blogs.conchango.com/paulmcmillan/archive/2005/10/17/2277.aspx

http://blogs.msdn.com/florinlazar/archive/2005/09/16/469064.aspx

-Jamie

|||

What?!?!?

I was doing one last test to confirm the problem once more before reporting a case to MS and..... woala... now it worked. I can't remember changing anything since last time, but what the heck... Let's cross our fingers and hope the problem stays away! =)