Skip navigation.

Feed aggregator

Embracing Mobile

Linda Fishman Hoyle - Wed, 2012-05-23 21:25
Normal 0 false false false EN-US X-NONE X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Cambria","serif"; mso-ascii-font-family:Cambria; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Cambria; mso-hansi-theme-font:minor-latin;}

A guest post by Diana Gray, Fusion Apps Strategist, Oracle

Isn’t it amazing how much mobility and mobile technologies have evolved since the days Palm bought Handspring. That was back in 2003. Today, it’s hard to imagine running our business or personal lives without the capabilities and conveniences of a mobile device. Our mobile ‘friends’ have become a way of life – and we expect a lot from them, as do our customers. It is not enough to simply display a traditional ERP application on a smartphone or a tablet. Customers expect and want more.

They want mobile business apps that are simple and savvy. Enterprise customers want just enough information to complete a task and, where it makes sense, to use the native features of their mobile device to make it easier. Business travelers expect geolocation to identify where a transaction was captured and to default it as their location or to use the camera to capture a receipt and submit the images with their expense report.

And that’s just what customers get in Fusion mobile applications. We leveraged the power of technology in a standardized mobile framework to design and deliver apps that are smart. They can recognize your device and its native capabilities. They can identify who you are, your role and your responsibilities within the organization. And they can present relevant analytics and content in a way that is consistent with your mobile device experience and your business needs.

This mobile framework is a natural extension of what we used to build our Fusion Applications. It’s a platform that is flexible enough to handle multiple channels and enable customers to quickly exploit new mobile form factors and features. Customers can now download apps, configure them once, and use them everywhere making life easier for business professionals. Better yet, customers can quickly record travel expenses on the iPhone using Fusion Expenses, note call activity in Oracle CRM iSales, or take action based on mobile analytics content using Oracle Business Intelligence Mobile. With Fusion, Oracle’s customers have what they need, when they need it. Go Mobile!

P.S. If you are a technology geek like me, you will thoroughly enjoy these YouTube videos:

Oracle Fusion Apps Mobile Expenses

Oracle BI Mobile Applications

Sincerely,

Diana




ldd – print shared library dependencies

Michael Dinh - Wed, 2012-05-23 20:43

I am sure most of you may already know about the command and just a quick post to demonstrate how ldd is used.

> ldd ggsci
 libm.so.1 => /lib/sparcv9/libm.so.1
 libnsl.so.1 => /lib/sparcv9/libnsl.so.1
 libsocket.so.1 => /lib/sparcv9/libsocket.so.1
 libdl.so.1 => /lib/sparcv9/libdl.so.1
 librt.so.1 => /lib/sparcv9/librt.so.1
 libumem.so.1 => /lib/sparcv9/libumem.so.1
 libgglog.so => /u01/app/ggs/libgglog.so
 libggrepo.so => /u01/app/ggs/libggrepo.so
 libdb-5.2.so => /u01/app/ggs/libdb-5.2.so
 libicui18n.so.38 => /u01/app/ggs/libicui18n.so.38
 libicuuc.so.38 => /u01/app/ggs/libicuuc.so.38
 libicudata.so.38 => /u01/app/ggs/libicudata.so.38
 libpthread.so.1 => /lib/sparcv9/libpthread.so.1
 libxerces-c.so.28 => /u01/app/ggs/libxerces-c.so.28
 libantlr3c.so => /u01/app/ggs/libantlr3c.so
 libclntsh.so.11.1 => /u01/app/oracle/product/11.2.0.3/dbhome_1/lib/libclntsh.so.11.1
 libnnz11.so => /u01/app/oracle/product/11.2.0.3/dbhome_1/lib/libnnz11.so
 libkstat.so.1 => /lib/sparcv9/libkstat.so.1
 libgen.so.1 => /lib/sparcv9/libgen.so.1
 libsched.so.1 => /usr/lib/sparcv9/libsched.so.1
 libCstd.so.1 => /usr/lib/sparcv9/libCstd.so.1
 libCrun.so.1 => /usr/lib/sparcv9/libCrun.so.1
 libthread.so.1 => /lib/sparcv9/libthread.so.1
 libc.so.1 => /lib/sparcv9/libc.so.1
 libmp.so.2 => /lib/64/libmp.so.2
 libmd.so.1 => /lib/64/libmd.so.1
 libscf.so.1 => /lib/64/libscf.so.1
 libaio.so.1 => /lib/64/libaio.so.1
 libresolv.so.2 => /lib/64/libresolv.so.2
 libpool.so.1 => /usr/lib/64/libpool.so.1
 libm.so.2 => /lib/64/libm.so.2
 libdoor.so.1 => /lib/64/libdoor.so.1
 libuutil.so.1 => /lib/64/libuutil.so.1
 libxml2.so.2 => /usr/lib/64/libxml2.so.2
 libnvpair.so.1 => /lib/64/libnvpair.so.1
 libexacct.so.1 => /usr/lib/64/libexacct.so.1
 libz.so.1 => /usr/lib/64/libz.so.1
 /platform/SUNW,Sun-Fire-V490/lib/sparcv9/libc_psr.so.1
 /platform/SUNW,Sun-Fire-V490/lib/sparcv9/libmd_psr.so.1

Oracle Priority Service Infogram for 23-MAY-2012

Oracle Infogram - Wed, 2012-05-23 19:10

SOA
A-Team - SOA continues to bring us useful technical material for those exploring the wonderful world of SOA: BPM 11g Deployment & Instance Migration.

Speech, Speech!

Oracle Technology Connection lets us know that Larry Ellison and Mark Hurd will be speaking about our cloud strategy: Larry Ellison Webcast June 6th at 1:00pm Pacific Time

Oracle Communities
Do you use Oracle Communities? If you don't you're missing out. Consider this article (login required): Resolve your E-Business Suite Patching Incidents Faster in My Oracle Support Community [ID 1453113.1]

Diggings

As an SDM I often research some of the issues my customers are encountering, sometimes coming across interesting, if not new items. Here are a couple of my finds for the week: Oracle Grid Infrastructure Reboot less Node Fencing at the {Unbreakable} Cloud blog.

and

some of the many facets of the Ora-494 error (there were a lot of articles and discussions, but this one seemed to cover a lot of ground): Thinking in ORA-494, ORA-239 Instance Crashes and Hangs at the Life DBA blog.

Utilities

Wim Coekaerts Blog gives us the facts on using ovm_utils.

Design

Tom Kyte is tweeting and, predictably, pointing out some great stuff. For instance this item: We Who Value Simplicity Have Built Incomprehensible Machines, at the programming in the twenty-first century blog and Complication is What Happens When You Try to Solve a Problem You Don't Understand at SIGPWNED.

I've always thought that a lot of modern engineering falls short of the 'bad old days' of simple, mechanical and fundamental electrical inventions. Let's face it, if someone invented the telephone after about 1980, it would have required a lot of skills to use. Picture a phone similar to the old Windows 3.x networking world: Pick up the phone, select your communications protocol, make sure you get a modem tone, discover that there is a mismatch somewhere in the dozens of configuration files used to set up your phone...you get the picture. Or imagine a light bulb engineered based on making money for lobbyists and politicians rather than functioning and selling on an open market. It would be hideous looking, expensive, dim...oh wait a minute, sore points there. Let's leave that one alone.

Tom also pointed out an old detective story over at Coskan's Approach to Oracle: 11.2.0.2 performance stories.

Opinion


Mobile Computing 

This brief opinion piece at Cloud Migrations put me up on my soapbox: iPad and tablets - Back to thick client devices and 3270 vendor lock in?

If there is one thing that will get me up on that soapbox it's iPad browser hijacking. I don't know why somebody in their right mind would decide that instead of advertising their mobile app on their news page they should hijack links to articles when they detect an iPad reading the page, thrusting a page that you have to search around to find 'No Thanks' on or be taken to the Apple store and locked into yet one more news app that you will never use. Browsers and hyperlinks are what the web is all about. There are a few magazines and papers that have pulled this whole app thing off  well (the Wall Street Journal comes to mind), but the companies that feel you absolutely have to consume their free news in a sealed-up proprietary app, sometimes denying you the article altogether if you don't accept the hijacking, for those companies' products I reserve a special place in historic 'Failed Product Hell'. They can be right in there in the cave where they keep the old Office paperclip guy, the Windows Vista source code and all the betamax tapes and cases of new Coke. Okay, I'm climbing down now.

COBOL

Also at Cloud Migrations: The COBOL Brain Drain. COBOL is apparently like  the alligator. Nobody respects it, but it is just goes on and on, living through age after geological age. While more sophistical programs end up in museums, COBOL keeps right on hunkering down in the muddy depths of a million legacy systems.

...and Finally

We find out that Every black hole contains a new universe. Why do I get that dizzying feeling when you find out you are actually in the Matrix? Or that there are infinite universes in a multi-dimensional matryoshka doll, each one odder than the last? We're all going to have a good laugh about this some day.

Adding LOV to non-database Field or Parameters

Shay Shmeltzer - Wed, 2012-05-23 17:30

More and more people end up using ADF for applications that don't actually talk to a database backend but rather to Web services, Java classes, and SOA process instead. In these cases the ADF pages actually end up invoking methods and passing parameters to these methods. One question I got today was "how do I add a database driven LOV to such a parameter?".

The tricky part is that the LOV component - af:inputListOfValues - expects a specific data model to be able to show the advance searching the LOV offers. As a lazy developer I don't feel like creating a managed bean with this model and populating it manually from the database. Instead here is a little video that shows a no-coding possible solution.

I'm using ADF BC to get the LOV and data from the database. I then use a bit of binding trickery to eliminate the need for a managed bean with the model structure for the LOV. I associate the LOV model created for an ADF BC field with an LOV field that is mapped to the parameter being passed to the method.

Categories: Development

Recap of the Apps UX Gamification Design Jam

Oracle AppsLab - Wed, 2012-05-23 17:12

I’m back from the latest leg on my US tour, the Applications UX Gamification Design Jam.

If you were following the #gamifyOracle hashtag, you might have seen some of what went on, but for completeness sake, here’s my recap.

This was an internal-only meeting held by the Applications UX team, bringing together the entire organization of about 130 people from around the World. In case you didn’t know, Apps UX supports all Applications product families, i.e. Fusion, PeopleSoft, EBS, Siebel, JD Edwards, etc. It’s quite possible that you’ve attended one of their usability labs at Oracle OpenWorld or another conference.

In addition to the entire Apps UX organization, about ten “honored guests” were also invited, including two ACE Directors, Basheer Khan (@bkhan) and Edward Roske (@eroske), and several Oracle people from outside Apps UX.

Unfortunately, Friends of the ‘Lab Bex Huff (@bex) and Floyd Teter (@fteter), weren’t able to make it. They were both missed.

The purpose of the event was to expose the UX team to gamification and get them thinking about design paradigms to support adding game mechanics into enterprise applications. After a brief introduction of concepts, the day was spent working in teams. Each team was assigned an application flow and had to build a game and experience around that flow; the goal was to create an engaging experience around a business task.

Each team presented its work in a three-minute pitch at the end of the day, and attendees voted for a winner by investing virual currency.

I was on the Chun-Li team. Yes, that Chun-Li, the one from Street Fighter II and considered by some to be “the first lady of fighting games.” And yes, all the teams were named after characters of major games. Our task was to integrate various game mechanics into the traditionally dull task of creating objectives for an annual performance appraisal.

We spent morning brainstorming ideas and the afternoon honing the pitch and building high fidelity mockups. The team of UX people did all the heavy-lifting, while I contributed ideas and chatted, adding very little value beyond banter.

I expect that Ultan (@ultan) will blog a more thorough retrospective on the day, so I’ll skip a lot of the details and move on to my own antics.

At checkpoints during the day, we reported our progress to the game admins, who awarded points and badges. A few members of the UX team in Guadalajara built a sweet app that we used to check-in to our teams at the start of the day and that tracked our team’s progress throughout the competition, detailing badges we earned, mechanics we had unlocked with our design, and showing our overall ranking with the other teams.

There was also a leaderboard ranking all the teams projected on the big screens in the conference center, which showed real-time movement as the teams gained points.

At the beginning of the day, Erika Webb, the moderator and one of the brains behind the jam, conceded that like all games, this one could gamed. Personally, I’ve always seen this as success, not failure, given that it means the game has succeeded by engaging users.

That admission felt like a challenge, so in the afternoon, I decided to start poking around for entry points. First, I earned our team an expertise badge by selecting all the attributes available on my personal profile. Easy stuff. Then, I tackled the points problem.

Team points were not completely transparent, and teams rose on the leaderboard, without any real explanation of why.

Being toward the bottom, I decided to see if I could hack in to get Team Chun-Li some respect.

My first approach was a brute force attack on the Admin page, which I easily found. After trying some easy passwords in combination with the emails of the admins I knew and failing, I decided to sniff the JS files included on the page.

Among several files, I found an admin.js file, which looked promising. Using the JSView Firefox add-on, I scanned the file for information. The app used JSON in the open, which was promising, since I could test using the browser with no authentication. After a couple tests and some digging, I found the ID for our team and began constructing URLs.

I started out by granting us all the badges available, just to test. Everything went well, and no one complained. So, I found a function that granted points and started adding to our total, a little at first.

The game page showed a maximum of 200 points, so after a few more increments, I decided to push past that number.

No one outside our team had noticed that Chun-Li had shot to the top of the leaderboard and exceeded the 200 point maximum. So, I upped the ante to 1,000 for giggles.

That got us noticed. To their credit, Laurie Pattison (@lsptahoe), Erika and the whole team seemed to find this funny and were good sports about it.

In my defense, Laurie had essentially dared me to hack their app earlier in the day, right after I had given up on breaking into their admin app, and for the record, I never intended to cheat and win. It was fun for me, and I hope no one got too annoyed. I think I accidentally took down the app by passing it a negative value, but luckily, all this required was an easy restart.

Thinking back on the day, a ton of work went into producing this event, which had fun challenges, cool apps, videos and a whole host of production behind it.

So, shouts go to Laurie, Erika, Ultan, the team of developers from Guadalajara and everyone involved. A good time was had by all and thanks for inviting and subsequently tolerating me.

Final notes, Ultan attended and showed something at the Maker Faire over the weekend, and I’m really hoping he plans to blog about that. I’m very interested to read about it. Also, Erika will be showing something cool at the GSummit in June. Looking forward to that.

Find the comments.Possibly Related Posts:

When is a foreign key not a foreign key...

Tom Kyte - Wed, 2012-05-23 15:55
I learn or relearn something new every day about Oracle.  Just about every day really!

Last week I was in Belgrade Serbia delivering a seminar and an attendee reminded me of something I knew once but had totally forgotten about.  It had to do with foreign keys and the dreaded NULL value.

Many of you might think the following to be not possible, we'll start with the tables:


ops$tkyte%ORA11GR2> create table p
  2  ( x int,
  3    y int,
  4    z int,
  5    constraint p_pk primary key(x,y)
  6  )
  7  /
Table created.


ops$tkyte%ORA11GR2> create table c
  2  ( x int,
  3    y int,
  4    z int,
  5    constraint c_fk_p foreign key (x,y) references p(x,y)
  6  )
  7  /
Table created.

Looks like a normal parent child relationship - a row may exist in C if and only if a parent row exists in P.  If that is true - then how can this happen:
ops$tkyte%ORA11GR2> select count( x||y ) from p;
COUNT(X||Y)-----------          0
ops$tkyte%ORA11GR2> select count( x||y ) from c;
COUNT(X||Y)-----------          1
There are zero records in P - none.  There is at least one record in C and that record has a non-null foreign key.  What is happening?
It has to do with NULLs and foreign keys and the default "MATCH NONE" rule in place.  If your foreign key allows NULLs and your foreign key is a composite key - then you must be careful of the condition where by only SOME of the foreign key attributes are not null.  For example - to achieve the above magic, I inserted:
ops$tkyte%ORA11GR2> insert into c values ( 1, null, 0 );1 row created.
The database cannot validate a foreign key when it is partially null.  In order to enforce the "MATCH FULL" option of a foreign key - you would want to add a constraint to your table:
ops$tkyte%ORA11GR2> alter table c add constraint check_nullness  2  check ( ( x is not null and y is not null ) or  3          ( x is null and y is null ) )  4  /Table altered.
That will ensure either:
  • All of the columns are NULL in the foreign key
  • None of the columns are NULL in the foreign key
As long as that constraint is in place - your foreign key will work as  you probably think it should work.
See also: http://docs.oracle.com/cd/E11882_01/appdev.112/e25518/adfns_constraints.htm#ADFNS273
Categories: DBA Blogs

Cracking Turkey

Gerger Consulting - Wed, 2012-05-23 14:08
I wrote an article for the Kernel Magazine about the Turkey startup scene. Click here to read it.
Categories: Development

Solution for Sharing Global User Data in ADF BC

Andrejus Baranovski - Wed, 2012-05-23 13:23
This post will describe solution how to share custom user data in ADF BC. There is a way to access HTTP session scope directly from ADF BC - Bad Practice for Session Scope Access in ADF BC, while you can follow this approach in exceptional cases, this is not recommended from enterprise architecture point of view. Mainly because you may face snow ball effect - there will be more and more ADF BC and ADF UI dependency introduced over time and at the end will make system not maintainable. Solution is generic and will cover following requirements:

1. Custom user data will be initialized for every AM instance automatically
2. Custom user data will be preserved between passivation/activation requests

Download sample application - UserDataADFBCSample.zip. Implemented solution is based on such architecture:


Where on the higher level we have user preferences variables stored in HTTP session. For each Data Control, where we want associated Application Module to be initialized with custom variables for User Data, is defined custom Data Control factory class. Data Control factory class is calling generic Application Module implementation class, where it invokes generic method to populate User Data. Every AM extends from generic Application Module implementation class - this means it gets User Data set. There are standard methods for passivation and activation overriden inside generic Application Module implementation class - this allows to preserve custom User Data between passivation/activation requests.

From developer perspective, in order to use this solution for specific AM - only one configuration thing is required - set custom Data Control factory class, the rest will be handled by implemented generic classes. Select Data Control usage from DataBindings.cpx:


Set Data Control factory class to our custom class:


I will describe now, what happens behind the scenes - how this solution works based on proposed architecture.

1. Make sure Model project is configured with Base Classes, specifically in this case with generic Application Module class (responsible for extended activation/passivation process and User Data initialization):


Generic Application Module class overrides ADF BC framework passivateState(...) method - its the place, where we store custom variables from User Data along with standard ADF BC data into PS_TXN table:


activateState(...) method is overriden as well - to initialize activated custom variables back into User Data:


Generic User Data initialization method is pretty simple in this example, it stores only one variable:


Every AM should extend from generic class. For test purpose, I have implemented custom method to print User Data entry - you will see that it will be preserved across passivation/activation requests thanks to the Application Module implementation generic class - CustomAMImpl:



2. There is custom Data Control factory class defined. This class substitutes Data Control class with our own custom class:


Custom Data Control class overrides only one method - setSessionCookie(...). This method is called by the framework only once, when Data Control gets initialized (Data Control may get initialized multiple times during the same session, if you are using isolated Task Flows (not recommended)). From setSessionCookie(...) method, we are getting instance of generic Application Module implementation class (by casting Data Provider) and initializing User Data with user preferences variable value stored in HTTP session scope. This is completely generic, because action is done through generic class without touching underlying AM for selected Data Control:


3. Time to test. You should test with AM pooling OFF - means will simulate stress test environment and force AM instance to passivate/activate on each request:


With jbo detail logging enabled, we can see that passivation request stores into PS_TXN table along with standard ADF BC data, our own custom User Data also (because overriden method in CustomAMImpl):


Tags for custom entry and other data is declared inside CustomAMImpl. There is limitation of max 10 entries for custom User Data passivation is set, you can increase it (its safer to control this, in case someone will start to enter hundreds of entries into User Data):


When fragment is loaded, based on our test - passivation/activation happens (AM pooling is OFF). With default implementation of User Data - values will be lost, but now CustomAMImpl takes care for this. Press Print Uset Data Entry to test if variable from User Data is retrieved correctly:


Variable data is printed:


4. Task Flow isolated mode. This solution works for Task Flow isolated mode:


When task flow is opened in isolated mode - setSessionCookie(...) method from Data Control class gets invoked again:


This mean, there is new fresh AM instance created of the same Application Module. But, because setSessionCookie(...) method is called - user data gets initialized for that new instance. User data can be initialized not only during login process, but during session lifetime as well.

We can test this by opening isolated task flow:


Print user data variable:


Data is printed successfully:


5. Test without passivation/activation for custom User Data. Comment out custom code for User Data passivation inside CustomAMImpl class:


There will be no custom data added into passivation package:


User data will be NULL, after passivation/activation request:


Logical tuning

Jonathan Lewis - Wed, 2012-05-23 12:22

Here’s a model of a problem I solved quite recently at a client site. The actual query involved was much more complex and the volume of data much larger, but this tiny, two table, example was enough to demonstrate the key principle. (Originally I thought I’d have to use three tables to model the problem, which is why you my be puzzled by my numerically odd choice of table names). I ran this example on 11.2.0.2 – the client version:

create table t2
as
select
	rownum					id2,
	trunc(dbms_random.value(0,1000))	n2a,
	trunc(dbms_random.value(0,1000))	n2b,
	lpad(rownum,6,'0')			vc2,
	lpad('x',100,'x')			padding
from
	all_objects
where
	rownum ;

alter table t2 add constraint t2_pk primary key(id2, n2a);

create table t3
as
select
	rownum					id3,
	trunc(dbms_random.value(0,1000))	n3a,
	trunc(dbms_random.value(0,1000))	n3b,
	lpad(rownum,6,'0')			vc3,
	lpad('x',100,'x')			padding
from
	all_objects
where
	rownum ;

alter table t3 add constraint t3_pk primary key(n3a, n3b, id3);

-- now collect stats on the table and execute this query (with autotrace enabled)

select
	*
from
	t2
where
	not exists (
		select	/*+ unnest */
			null
		from 	t3
		where	n3a = n2a
		and	n3b = n2b
		and	(id3 = id2 or id3 = id2 + 1000)
	)
;

select * from table(dbms_xplan.display);

You’ll note that I’ve included the /*+ unnest */ hint in the subquery because I want Oracle to run this as a hash anti-join; and it would appear to be legal (and simple) to do this given the various not null contraints and primary key information. In fact the plan uses a filter subquery:

------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Bytes | Cost  |
------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |  5000 |   585K|  5015 |
|*  1 |  FILTER            |       |       |       |       |
|   2 |   TABLE ACCESS FULL| T2    |  5000 |   585K|    15 |
|*  3 |   INDEX RANGE SCAN | T3_PK |     1 |    12 |     2 |
------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter( NOT EXISTS (SELECT /*+ UNNEST */ 0 FROM "T3" "T3" WHERE
              "N3B"=:B1 AND "N3A"=:B2 AND ("ID3"=:B3 OR "ID3"=:B4+1000)))
   3 - access("N3A"=:B1 AND "N3B"=:B2)
       filter("ID3"=:B1 OR "ID3"=:B2+1000)

I suspect that the optimizer code bypasses the anti-join because of the (carefully bracketed) disjunct (OR) predicate. On the client site this resulted in the subquery being executed 9 million times, reducing an intermediate data set from 9M rows to 2M rows at a cost of 27 million buffer visits and about 60 CPU seconds. Fortunately I was able to dredge up a little bit of propositional calculus and quote the following equivalence:

        not( A or B )  (not A and not B)

Equally fortunately I didn’t have to worry about three-valued logic (all relevant columns were declared not null), so I was able to rewrite the query in the form:

select
	*
from
	t2
where
	not exists (
		select	null
		from 	t3
		where	n3a = n2a
		and	n3b = n2b
		and	id3 = id2
	)
and	not exists (
		select	null
		from 	t3
		where	n3a = n2a
		and	n3b = n2b
		and	id3 = id2 + 1000
	)
;

With this code Oracle did two unnests and converted to hash anti-joinsin both cases (at least, that’s what happened on the client site – my small sample switched to nested loop anti-joins):

-------------------------------------------------------------
| Id  | Operation           | Name  | Rows  | Bytes | Cost  |
-------------------------------------------------------------
|   0 | SELECT STATEMENT    |       |    50 |  7200 |    15 |
|   1 |  NESTED LOOPS ANTI  |       |    50 |  7200 |    15 |
|   2 |   NESTED LOOPS ANTI |       |  4999 |   644K|    15 |
|   3 |    TABLE ACCESS FULL| T2    |  5000 |   585K|    15 |
|*  4 |    INDEX UNIQUE SCAN| T3_PK |     1 |    12 |       |
|*  5 |   INDEX UNIQUE SCAN | T3_PK |  5000 | 60000 |       |
-------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   4 - access("N3A"="N2A" AND "N3B"="N2B" AND "ID3"="ID2"+1000)
   5 - access("N3A"="N2A" AND "N3B"="N2B" AND "ID3"="ID2")

The change to hash anti-joins was a huge benefit (the nested loop anti-join would have improved things for the client to a degree, but there’s not really an enormouse difference in some cases between a filter subquery and an equivalent nested loop anti/semi-join). In this case the query run time dropped from 95 seconds to 27 seconds – all of it CPU time.

Update: a check of the 10053 trace file for 10.2.0.3 shows the following:

SU:   Checking validity of unnesting subquery SEL$2 (#2)
SU:     SU bypassed: Invalid correlated predicates.
SU:   Validity checks failed.

On the other hand, it is possible to get unnesting and a hash anti-join with the predicate: id3 between id2 and id2 + 1000.


Upcoming WebCast: Bridging the Gap--SQL and MapReduce for Big Analytics

Donal Daly - Wed, 2012-05-23 08:49


On Tuesday May 29th, Teradata Aster will be hosting a web cast to discuss the Bridging the Gap--SQL and MapReduce for Big Analytics. Expected duration is 60 minutes and will start at 15:00 CET (Paris,Frankfurt) 14:00 UTC (London). You can register for free here.

We had run this seminar earlier in May but at a time which was more convenient for a US audience. The seminar was well attended and we received good feedback from attendees that encouraged us to rerun it again with some minor changes and at a time more convenient for people in Europe.

If you are considering a big data strategy, confused by all the hype that is out there, believe that Map Reduce = Hadoop? or Hive = SQL?, Then this is an ideal event for a business user to get a summary of the key challenges, the sort of solutions that are out there and the novel and innovative approach that Teradata Aster has taken to maximise time to value for companies considering their first Big Data initiatives.
I will be the moderator for the event, and will introduce Rick F. van der Lans, independent analyst and Managing Director of R20/Consultancy, based in the Netherlands. Rick  is an independent analyst, consultant, author and lecturer specializing in Data Warehousing, Business Intelligence, Service Oriented Architectures, and Database Technology. He will be followed by Christopher Hillman from Teradata. Chris, is based in the United Kingdom and recently joined us a Principal Data Scientist. We will have time at the end to address questions from attendees.
During the session we will discuss the following topics:
  • Understanding MapReduce vs SQL, UDF's, and other analytic techniques
  • How SQL developers and business analysts can become "data scientists"
  • Fitting MapReduce into your BI/DW technology stack
  • Making the power of MapReduce available to the larger business community


So come join us on May 29th. It will be an hour of your time well invested. Register for free here.



Previewing the OBIEE 11.1.1.6 SampleApp

Rittman Mead Consulting - Wed, 2012-05-23 08:22

Last year we previewed the upcoming OBIEE 11.1.1.5 version of the SampleApp,  which introduced a bunch of new features including more Essbase examples, a working Essbase write-back using the Action Framework, new visualisations created using Google Charts, plus some content around TimesTen and Oracle Data Mining. Well, the updated 11.1.1.6 version of the SampleApp is due immanently, so let’s take a preview look at what’s coming in this new release.

Like the previous update, the 11.1.1.6 version of the SampleApp is an incremental release, designed to highlight new features that have come with the 11.1.1.6+ release of OBIEE, as well as incorporating some new examples sourced from the field. One of the most interesting new features in this updated version is Exalytics-enablement; if you download the VirtualBox image which has all the software pre-installed and pre-configured, OBIEE is enabled for Exalytics, with prompt buttons removed, auto-complete and auto-suggest enabled, and the ability to run the Summary Advisor from the BI Administration tool, which you’ll need to ensure is at version 11.1.1.6 or higher too and install on a separate Windows-based environment.

NewImage

This new SampleApp also comes with scripts to automatically “inflate” the size of your dataset, and an additional subject area designed to analyze large tables and test out aggregation. The VirtualBox image for this release includes TimesTen for Exalytics, but of course it doesn’t come with a free Exalytics box, so this is really for testing and self-training only, not actual performance testing. By default no Summary Advisor aggregates are set up, but you can run the Summary Advisor, create some and then test out the dashboard with all of the “speed limiters” removed.

Dashboard

If you were lucky enough to see Jordan Meyer’s “Designing Eye-Catching and Effective Dashboards” presentation at last week’s BI Forum in Atlanta (if not, here’s an interactive version you can page through using your cursor right key) you may have had your interest piqued in Oracle R, and it’s ability to do statistical analysis on large data sets. This new version of the SampleApp has some R-based visualisations included, which use Oracle R Enterprise, an Oracle Database 11gR2 option that’s pre-installed on the VirtualBox image) and BI Publisher to render the actual visuals.

If you followed some of my postings around the launch of Exalytics, I mentioned that usage tracking has been enhanced in this release in order to capture the physical SQL, as well as logical SQL, associated with an analysis. The new SampleApp includes an example dashboard page that displays this physical SQL information for the most recent queries, and is accessible from a link on any other dashboard page, like this:

Usagetracking

There’s also a number of new visualisation and UI enhancement examples in this new release, including what is probably my favourite new front-end feature in 11.1.1.6 – the ability to add selection steps to analyses even after they’ve been published to the dashboard, giving users much more ability to customise analysis views within their own dashboard.

Selectionsteps

 

Other new visualisation features include the new Strategy Wheel view in Scorecard and Strategy Management, waterfall charts, heat maps and an interesting new capability, web-style menus on the dashboard page:

Menu

Something that caused some gnashing of teeth back at Rittman Mead headquarters when it was announced back at Openworld, was support for Web Catalog auditing from within the next SampleApp (we’d developed, independently, something very similar). Using a set of scripts provided with the SampleApp, you can export the web catalog structure into a set of database tables, and then report against those, along with Usage Tracking data, to work out which catalog objects aren’t being used as well as volumes of objects in each folder, by user and type over time.

Webcatstats1

You can also perform some impact analysis, helping to identity in which dashboard are a set of select analyses, and quickly identify what list of objects are exposed in each dashboard page. Usefully, you can also use this feature to spot all objects that are using a specific RPD column, and looking at it the other way list out all RPD columns that are used by an analysis or other catalog object.

Webcatstats2

Something that’ll interest the DBAs amongst us is another new set of dashboard pages, that report against the Oracle Database system views, to display details of user sessions, SQL queries, datafile sizes, database parameters and so on. It’s clearly not meant as a substitute for Enterprise Manager Database Control, but if you’re working on a development system and want to check, for example, whether materialised view query rewrite is enabled, or who else is logged in and reporting against your data, it could be a useful set of reports.

Dbviews

Finally, there’s a whole new set of BI Publisher examples brought across from the new BI Publisher trial release, including lots of ones that show the additional capabilities the BIP brings, such as barcodes, OCR recognition, complex layouts using XPATH, bursting and so on. Here’s one new report, showing how BIP can report against Essbase directly, using MDX queries defined in the report’s data model.

Bip

So, quite a few interesting new features. The new 11.1.1.6 SampleApp should be available soon, probably at the same time as the next bundle patchset for OBIEE 11.1.1.6, and will be available in both VirtualBox format, or as a set of install files that you can set up in your own environment. Watch this space, as they say.

Categories: BI & Warehousing

Join me at ODTUG's Kscope12 in June

FeuerThoughts - Wed, 2012-05-23 08:16

From June 24 through the 28th, hundreds of Oracle technologists will gather in San Antonio, Texas, for the ODTUG Kscope12 conference. As ODTUG says and I agree completely, "ODTUG Kscope12 is the place to be for the Oracle technical community in 2012. If you are a developer, architect, technical lead, or database administrator who works with Application Express, Business Intelligence, Oracle EPM; including Hyperion products, Essbase, Planning; Database Development or Fusion Middleware, Kscope12 is where you should be. It’s hard to find a conference that’s big enough to attract world renowned speakers and small enough to get the chance to share knowledge. Kscope12 is that conference."

Oracle Open World is an amazing experience, but it is also very, very large and, of course, an official Oracle event. ODTUG offers a refreshing alternative: about 1/40th the number of people, and just about all of them technologists. A strong mix of work and play and good deeds, ranging from the community service day on Saturday 23 June (sprucing up the Boys and Girls Club of San Antonio) to Sunday symposiums, the Wednesday party blast, countless presentations from many of the best DBAs, PL/SQL coders and APEX developers, and so much more.

I'll be presenting four times this year:

Clean Up Your APEX PL/SQL Code
Writing Maintainable PL/SQL Code
Error Management Features of Oracle PL/SQL
High Performance PL/SQL
 
Hope to see you there!
Categories: Development

High Performance PL/SQL + 11g New Features Training in Colorado

FeuerThoughts - Wed, 2012-05-23 08:13
11-12 June  2012 will find me in Broomfield, Colorado, training PL/SQL developers and Oracle DBAs.

This two-day training, sponsored by RMOUG, covers the most critical features you need to know about if you are going to write PL/SQL programs that fully utilize the capabilities of PL/SQL, including the most important enhancements of Oracle Database 11g for PL/SQL developers.

Detailed Description of Topics to be Covered
  1. Bulk Processing with BULK COLLECT and FORALL: the most important performance optimization feature of PL/SQL, bulk processing turbo-charges the speed of repeated execution of the same SQL statement (think: DML inside a loop) by reducing the number of context switches. We'll explore every nook and cranny of BULK COLLECT and FORALL.
  2. The Function Result Cache (11g): a fantastically elegant and high-impact feature, the function result cache provides an SGA-based cache that helps you optimize the performance of queries
    across an entire instance that repeatedly retrieve the same rows of data.
  3. Row-Level Error Suppression in DML: added in Oracle Database 10g Release 2, the LOG ERRORS clause (along with the built-in package, DBMS_ERRLOG) offers row-level suppression of errors in DML statements, especially helpful when modifying large numbers of rows.
  4. PL/Scope (11g): new to Oracle Database 11g, PL/Scope analyzes the way that all identifiers (variables, constants, subprograms, exceptions, types, etc.) are used in your code. It allows us to perform analysis on our code in a way never before possible. For example, you can implement your own scripts to check code for compliance with naming conventions - no parser required!
  5. The NOCOPY Hint: so simple, and yet so impactful. Add one keyword to your IN OUT parameter definition and get a significant boost in performance. Along the way, learn about the
    difference between formal parameters and actual argument values, passing by reference vs. value.
  6. Dynamic SQL Advanced Features: Oracle Database 11g includes many enhancements for dynamic SQL, especially for Method 4 dynamic SQL.
  7. Advanced Collection Features: the year is 2012 and all PL/SQL developers should be aware of and use collections (PL/SQL's version of arrays). So we'll skip the basics and concentrate on advanced features like use of the TABLE operator, string-indexed associative arrays, and nested collections.
For more information and to register, click here.
Categories: Development

Linux : HandBrake – Streaming DVDs from my NAS…

Tim Hall - Wed, 2012-05-23 07:42

When my TV broke a few months ago I made the decision not to replace it. That means I only get to watch DVDs on the computer or stuff streamed on the web (BBC iPlayer, ITV Player or 4OD) using my iPad. I’m pretty happy with the situation as it prevents me wasting too much time in front of the TV. My only issue was being tied to the computer for DVDs. Yesterday I entered the 21st century and started streaming DVDs to my iPad.

A little Googling revealed HandBrake is about as simple as it gets, where DVD video transcoders on Linux are concerned. With that installed I saved a copy of a DVD (Alien) into the “movies” folder on my NAS, which is pre-configured for streaming videos. That’s nice and simple.

The next step was to get an iPad app to allow me to watch the streamed content. There are a bunch of them around, but I ended up with PlugPlayer. It automatically detected my NAS and worked immediately.

So now I can watch DVDs streamed to my iPad. All I need is a 60TB hard disk so I can store all my DVDs. :)

Cheers

Tim…

 

Linux : HandBrake – Streaming DVDs from my NAS… was first posted on May 23, 2012 at 2:42 pm.
©2012 "The ORACLE-BASE Blog". Use of this feed is for personal non-commercial use only. If you are not reading this article in your feed reader, then the site is guilty of copyright infringement.


Take Part in the BI Survey 11, and Have your Voice Heard

Rittman Mead Consulting - Wed, 2012-05-23 04:40

Every year we’re pleased to help publicise the BI Survey, an annual independent survey of BI tools customers organized by BARC. What’s good about the BI Survey is that it helps you understand what others using your favourite BI tool think of it, and where it’s useful and not so useful, and it’s also a good way to gauge how your BI tools are rated relative to the competition. There’s also sections on BI implementation approaches, tool selection and so forth, so it’s a good all-round survey of the BI tools marketplace (note that we have no financial or commercial interest or links to BARC, we just think they’re “good guys”).

Anyway, here’s the invite. Make sure you take part, so that there’s a good sample size for Oracle BI, EPM and OLAP tools in the survey:

“We would appreciate your participation in ‘The BI Survey 11: The Customer Verdict’, the world’s largest survey of business intelligence (BI) and performance management (PM) users.

Click the link below to take part:
https://digiumenterprise.com/answer?link=982-8V8SYN3Z

As a participant, you will:

  • Receive a summary of the results from the full survey
  • Be entered into a draw to win one of ten $50 Amazon vouchers
  • Ensure that your experiences are included in the final analyses

BARC’s annual survey gathers input from a large number of organizations to better understand their buying decisions, their implementation cycles and the benefits they achieve from using BI software. The BI Survey 11 is strictly vendor-independent: BARC does not accept vendor sponsorship of the Survey, and the results are analyzed and published without any vendor involvement.

You will be able to answer questions on your usage of a BI product from any vendor. Your answers will be used anonymously, and your personal details will never be passed on to vendors or other third parties. Business and technical users, as well as vendors and consultants, are all welcome to participate.

The BI Survey 11 should take about 25 minutes to complete. For further information, please contact Silke Hopf at BARC (shopf@barc.de).”

Categories: BI & Warehousing

Next-Generation Oracle Mobile Applications

Bex Huff - Tue, 2012-05-22 20:06

In addition to my FatWire tutorial talk, I gave one on ADF Mobile. Or, more accurately, I talked about how cool it is that Oracle is going to be bundling PhoneGap with their ADF Mobile toolkits!

I was never really a fan of mobile applications: I prefer the mobile web experience. Every mobile device supports HTML5, which means that you can do just about everything a mobile app can do, other than high-performance graphics. In fact, according to an Adobe study users prefer mobile web to mobile apps for just about everything.

Creating Next-Generation ADF Mobile Applications View more presentations from Brian Huff

It covers a lot of turf, but there are four key takeaways:

  1. You will need to learn HTML5 eventually, no matter what
  2. Your mobile strategy should default to the mobile web: mobile apps are rarely needed, and add unnecessary complexity
  3. In cases where you do need mobile functionality (camera, bar code scanner), it makes sense to make a hybrid app with PhoneGap/Cordova/ADF, rather than a native app. This means 99% of the functionality is in HTML5, and 1% is in native code called from JavaScript
  4. And please make sure your mobile strategy is a natural extension of your business model... or you'll be out a lot of money!

Hope this helps!

read more

Categories: Fusion Middleware

Kognitio’s story today

DBMS2 - Tue, 2012-05-22 19:36

I had dinner tonight with the Kognitio folks. So far as I can tell:

  • Branding has been mercifully simplified. Everything is now called “Kognitio” (as opposed to, for example, “WX2″).
  • Notwithstanding its long history of selling disk-based DBMS and denigrating memory-only configurations, Kognitio now says that in fact it’s always been an in-memory DBMS vendor.
  • Notwithstanding its long history of selling (or attempting to sell) analytic DBMS, Kognitio wants to be viewed as an accelerator to your existing DBMS. This is apparently inspired in part by SAP HANA, notwithstanding that HANA’s direction is to evolve into a hybrid OLTP/analytic general-purpose DBMS.
  • Notwithstanding its lack of analytic platform features, Kognitio wants to be viewed as selling an analytic platform.
  • Notwithstanding its memory-centric focus, Kognitio doesn’t want to compress data. Kognitio’s opinion — which to my knowledge is shared by few people outside Kognitio — seems to be that the CPU cost of compression/decompression isn’t justified by the RAM savings from compression.
  • Kognitio still is pushing a cloud/SaaS (Software as a Service) story. Even if you want to use Kognitio (the product) on-premises, Kognitio (the company) calls that “private cloud” and offers to let you pay annually.

Kognitio believes that this story is appealing, especially to smaller venture-capital-backed companies, and backs that up with some frieNDA pipeline figures.

Between that success claim and SAP’s HANA figures, it seems that the idea of using an in-memory DBMS to accelerate analytics has legs. This makes sense, as the BI vendors — Qlik Tech excepted — don’t seem to be accomplishing much with their proprietary in-memory alternatives. But I’m not sure that Kognitio would be my first choice to fill that role. Rather, if I wanted to buy an unsuccessful analytic RDBMS to use as an in-memory accelerator, I might consider ParAccel, which is columnar, has an associated compression story, has always had a hybrid memory-centric flavor much as Kognitio has, and is well ahead of Kognitio in the analytic platform derby. That said, I’ll confess to not having talked with or heard much about ParAccel for a while, so I don’t know if they’ve been able maintain technical momentum any more than Kognitio has.

Categories: Other

60TB Disk Drives?

Tim Hall - Tue, 2012-05-22 18:03

I was reading a story where Seagate were talking about 60TB disk drives. That’s all well and good, but how quick can I get data to and from them? If I need a certain number of spindles to get the performance I require, then I’m just going to end up with masses of wasted capacity.

I can picture the scene now. I have a database of “x” terabytes in size and I need “y” number of spindles to get the performance I require, so I end up having to buy disks amounting to “z” petabytes of space to meet my performance needs. Not only is it hard to justify, but you know the “spare” capacity will get used to store stuff that’s got nothing to do with my database.

Just think of those 60TB bad-boys in a RAID5 configuration. Shudder. :)

Feel free to insert a, “SSD/Flash will solve the worlds storage problems”, comment of your choice here. :)

Cheers

Tim….

60TB Disk Drives? was first posted on May 23, 2012 at 1:03 am.
©2012 "The ORACLE-BASE Blog". Use of this feed is for personal non-commercial use only. If you are not reading this article in your feed reader, then the site is guilty of copyright infringement.


VirtualBox 4.1.16 Released…

Tim Hall - Tue, 2012-05-22 13:58

VirtualBox 4.1.16 has been released. You can download it from the usual place and see the fixes in the changelog.

I’ve downloaded the Fedora 17 build, ready for the next weeks final release of Fedora 17… :)

Cheers

Tim…

VirtualBox 4.1.16 Released… was first posted on May 22, 2012 at 8:58 pm.
©2012 "The ORACLE-BASE Blog". Use of this feed is for personal non-commercial use only. If you are not reading this article in your feed reader, then the site is guilty of copyright infringement.