Feed aggregator
Mashup Standards Part 2: Cross-Origin Resource Sharing (CORS)
In my previous post, I was talking about the JSON-P standard for mashups. It's very handy, but more of a "convention" than a true standard... Nevertheless, it's very popular, including support in jQuery and Twitter. In this post I'm going to discuss what some consider to be the modern alternative to JSON-P: Cross-Origin Resource Sharing, or CORS for short.
Lets say you had two applications, running at app1.example.com and app2.example.com. They both support AJAX requests, but of course, they are limited to the "Same-Origin Policy." This means app1 can make AJAX requests to app1, but not to app2. Let's further assume that you'd like to make a mashup of these two app at mashup.example.com.
No problem! In order to enable cross-origin AJAX, you simply need to make sure app1 and app2 send back AJAX requests with this HTTP header:
Access-Control-Allow-Origin: http://mashup.example.comThis is easily done, by adding one line to the Apache httpd.conf file on app1 and app2:
Header set Access-Control-Allow-Origin http://mashup.example.comDONE! Now, with standard AJAX calls you can host a HTML page on mashup.example.com and connect to app1> and app2 using nothing but JavaScript! There are about a half dozen additional Cross-origin HTTP header that you can set... including what methods are allowed (GET/POST), how long to cache the data, and how to deal with credentials in the request... naturally, not all browsers support all headers, so your mileage may vary!
Not to mention, because the XmlHttpObject is used, CORS has much better error handling than JSON-P. If there's an error accessing a file, you can catch that error, and warn the end user. Contract that with JSON-P, where there's no built-in way to know when you can't access a file. You can build your own error handling, but there's no standard.
Nevertheless, I still prefer JSON-P for mashups. Why? Well, it boils down to two things: performance, and security. I'll be covering the specifics in part 3 of this port.
Purrpetual Motion
This is a really old idea – but it’s the first time I’ve seen it illustrated.
(The obvious flaw in the concept appears in comment 22.)
Get Up to Speed: Big Data Online Forum (Feb. 16, 10am PT)
So, you're wondering what this "Big Data" thing is, and how it differs from Plain Old Data (POD)? That's OK. You're not alone.
If that's the case, the "Big Data Essentials" Online Forum is a perfect opportunity to get yourself up to speed - via the people most qualified to help you do that: Oracle's Tom Kyte and Cloudera CEO (and former Oracle development VP) Mike Olson. You'll not only learn the fundamental concepts, but you'll also hear how to acquire, organize, and analyze big data for the best possible business value, in an interactive online format.
Register before time's up!
Oracle WebCenter is a Leader in the Gartner Magic Quadrant for Web Content Management 2011
- Oracle is positioned a Leader with WebCenter, moving ahead in “Completeness of Vision” relative to OpenText.
- Other Leaders are Autonomy, Adobe (acquired Day Software), SDL, SiteCore and OpenText.
- Both Microsoft and IBM remain Challengers.
- Gartner evaluated 20 vendors in this year’s MQ (17 were evaluated in last year’s MQ)

Market Trends
- The WCM market saw strong growth in 2010 amidst a recession with $1 billion in revenue. Gartner predicts in 2011 the WCM market will reach $1.2 billion with a CAGR of 14% from 2009 to 2014, twice the overall enterprise software market.
- Gartner views WCM as much more than website publishing. WCM has evolved to Online Channel Optimization (OCO), “the discipline of maximizing the impact of engagements with target audiences over a variety of communications media.” Sophisticated enterprises will even try to use OCO in offline realms like retail stores.
- OCO strategies encompass and integrate with a wide array of technologies include mobile, social, real-time decisioning, Web analytics, digital asset management, CRM and e-commerce.
- Cloud is a growing area of interest for WCM deployments, with customers opting for hybrid approaches.
Oracle Summary
“Oracle's WCM offering has recently been rebranded as a constituent component of its broader Oracle WebCenter, a user engagement platform. WebCenter, in turn, contributes to the broader Oracle Fusion Middleware, which ties together Oracle's information management, portal and business application portfolios, among other products. In August 2011, Oracle acquired FatWire Software, a vendor that was classed as a Leader in the ‘Magic Quadrant for Web Content Management’ in 2010. See ‘FatWire Purchase Adds Web Experience Management to Oracle's Strategy’, summarized here.”
You can read more in the Gartner Report.
This Magic Quadrant graphic was published by Gartner, Inc. as part of a larger research note and should be evaluated in the context of the entire report. The Gartner report is available upon request from Oracle.
Oracle Documentation: The broken links fiasco continues…
So I was just patting myself on the back for finishing my website clean up, then I happened on a few pages with broken links to Oracle documentation. That annoyed me, but I figured I better do a quick scan to see how many broken external links I had. The first attempt was a complete fail because the tool I used clicked all my Google Adsense adverts, making me a DotCom millionaire in about 3 minutes. I wrote to Google and apologised profusely. In my defense, the tool I used was right at the top of the list in the Chrome Web App Store…
Once I got a link checker that didn’t put me at risk of a jail sentence, things got a little more depressing. A very large number of my articles contain broken links to Oracle documentation. As I started looking at links it became apparent that Oracle have used at least 3 main URLs for documentation over the years:
- http://download-west.oracle.com/docs (8i -> 10gR2)
- http://download.oracle.com/docs (11gR1 -> 11gR2)
- http://docs.oracle.com/ (post 11gR2 stuff)
The versions listed are based on the links I’ve added in my articles. If you check today, all/most docs come from the “http://docs.oracle.com” address.
This in itself shouldn’t present a problem, because any company with an involvement in the web knows that URLs should never change. If by chance you do have to change something, you put a redirect in place. The problem is, Oracle don’t do this, or at least not consistently. Check out the following three URLs:
- http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96566/rcmdupdb.htm#441628
- http://download.oracle.com/docs/cd/B10501_01/server.920/a96566/rcmdupdb.htm#441628
- http://docs.oracle.com/cd/B10501_01/server.920/a96566/rcmdupdb.htm#441628
They are the same document, just using the three base URLs I mentioned previously. If you click them, you’ll notice the first one fails and the following two work. My guess is Oracle have created a 301 permanent redirect from http://download.oracle.com/docs to http://docs.oracle.com, but not bothered to maintain the http://download-west.oracle.com/docs URL, thereby breaking just about every link to its docs on the internet that references anything older than about 11gR1. That includes forums (including their own), blog posts, documents containing URLs etc. It’s just a nightmare.
So PLEASE Oracle:
- Stop changing URLs.
- When you do change them, PLEASE use rewrites/redirects properly.
- Remember, your rewrites/redirects should be permanent, not just long enough for search engines to update their indexes.
This would solve the vast majority of my gripes about the links to the Oracle docs…
Notes:
- For those not familiar with web servers, this kind of rewrite/redirect for a whole domain name is really simple. It’s one line in your “.htaccess” file, not a separate one for each page, so I’m not asking for the world here.
- I am aware there are other issues with changing URLs at Oracle that a blanket redirect would not solve. I’m not even going to start on whitepapers and PDFs…
Cheers
Tim…
Building a Menu Bar with Formspider
Oracle extends Fusion Applications availability to Windows
Oracle extends Fusion Applications availability to Windows
Log Buffer #256, A Carnival of the Vanities for DBAs
Puns on demand
The downside of the rise of PaaS is the concomitant rise of bad PaaS puns. I noted a few recent ones (one of which I commited):
- PaaSive Aggressive [link]
- Everything is PaaSible [link]
- You bet your PaaS [link]
- The PaaSibilities are endless [link]
And these are just PaaS puns in blog titles, I’ve probably missed a bunch burried inside other entries.
This must stop. It’s time for the people of the Cloud to stand up and say: ¡No PaaSarán!
Agile Data Warehousing with Exadata and OBIEE: ETL Iteration
This is the fourth entry in my series on Agile Data Warehousing with Exadata and OBIEE. To see all the previous posts, check the introductory posting which I have updated with all the entries in the series.
In the last post, I describe what I call the Model-Driven iteration, where we take thin requirements from the end-user in the form of a user story and generate the access and performance layer, or our star schema, logically using the OBIEE semantic model. Our first several iterations will likely be Model-Driven as we work with the end user to fine-tune the content he or she wants to see on the OBIEE dashboards. As user stories are opened, completed and validated throughout the project, end users are prioritizing them for the development team to work on. Eventually, there will come a time when an end user opens a story that is difficult to model in the semantic layer. Processes to correct data quality issues are a good example, and despite having the power of Exadata at our disposal, we may find ourselves in a performance hole that even the Database Machine can’t dig us out of. In these situations, we reflect on our overall solution and consider the maxim of Agile methodology: “refactoring”, or “rework”.
For Extreme BI, the main form of refactoring is ETL. The pessimist might say: “Well, now we have to do ETL development, what a waste of time all that RPD modeling was.” But is that the case? First off… think about our users. They have been running dashboards for some time now with at least a portion of the content they need to get their jobs done. As the die-hard Agile proponent will tell you… some is better than none. But also… the process of doing the Model-Driven iteration puts our data modelers and our ETL developers in a favorable position. We’ve eliminated the exhaustive data modeling process, because we already have our logical model in the Business Model and Mapping layer (BMM).
But we have more than that. We also have our source-to-target information documented in the semantic metadata layer. We can see that information using the Admin Tool, as depicted below, or we can also use the “Repository Documentation” option to generate some documented source-to-target mappings.
When embarking on ETL development, it’s common to do SQL prototyping before starting the actual mappings to make sure we understand the particulars of granularity. However, we already have these SQL prototypes in the nqquery.log file… all we have to do is look at it. The combination of the source-to-target-mapping and the SQL prototypes provide all the artifacts necessary to get started with the ETL.
When using ETL processing to “instantiate” our logical model into the physical world, we can’t abandon our Agile imperatives: we must still deliver the new content, and corresponding rework, within a single iteration. So whether the end user is opening the user story because the data quality is abysmal, or because the performance is just not good enough, we must vow to deliver the ETL Iteration time-boxed, in exactly the same manner that we delivered the Model-Driven Iteration. So, if we imagine that our user opens a story about data quality in our Customer and Product dimensions, and we decide that all we have time for in this iteration are those two dimension tables, does it make sense for us to deliver those items in a vacuum? With the image below depicting the process flow for an entire subject area, can we deliver it piecemeal instead of all at once?
The answer, of course, is that we can. We’ll develop the model and ETL exactly as we would if our goal was to plug the dimensions into a complete subject area. We use surrogate keys as the primary key for each dimension table, facilitating joining our dimension tables to completed fact tables. But we don’t have completed fact tables at this point in our project… instead we have a series of transaction tables that work together to form the basis of a logical fact table. How can we use a dimension table with a surrogate key to join to our transactional “fact” table that doesn’t yet have these surrogate keys?
We fake it. Along with surrogate keys, the long-standing best practice of dimension table delivery has been to include the source system natural key, as well as effective dates, in all our dimension tables. These attributes are usually included to facilitate slowly-changing dimension (SCD) processing, but we’ll exploit them for our Agile piecemeal approach as well. So in our example below, we have a properly formed Customer dimension that we want to join to our logical fact table, as depicted below:
We start by creating aliases to our transactional “fact” tables (called POS_TRANS_HYBRID and POS_TRANS_HEADER_HYBRID in the example above), because we don’t want to upset the logical table source (LTS) that we are already using for the pure transactional version of the logical fact table. We create a complex join between the customer source system natural key and transaction date in our hybrid alias, and the natural key and effective dates in the dimension table. We use the effective dates as well to make sure we grab the correct version of the customer entity in question in situations where we have enabled Type 2 SCD’s (the usual standard) in our dimension table.
This complex logic of using the natural key and effective dates is identical to the logic we would use in what Ralph Kimball calls the “surrogate pipeline”: the ETL processing used to replace natural keys with surrogate keys when loading a proper fact table. Using Customer and Sales attributes in an analysis, we can see the actual SQL that’s generated:
We can view this hybrid approach as an intermediate step, but there is also nothing wrong with this as a long-term approach if the users are happy and Exadata makes our queries scream. If you think about it… a surrogate key is an easy was of representing the natural key of the table, which is the source system natural key plus the unique effective dates for the entity. A surrogate key makes this relationship much easier to envision, and certainly code using SQL, but when we are insulated from the ugliness of the join with Extreme Metadata, do we really care? If our end users ever open a story asking for rework of the fact table, we may consider manifesting that table physically as well. Once complete, we would need to create another LTS for the Customer dimension (using an alias to keep it separate from the table that joins to the transactional tables). This alias would be configured to join directly to the new Sales fact table across the surrogate key… exactly how we would expect a traditional data warehouse to be modeled in the BMM. The physical model will look nearly identical to our logical model, and the generated SQL will be less interesting:
Now that I’ve described the Model-Driven and ETL Iterations, it’s time to discuss what I call the Combined Iteration, which is likely what most of the iterations will look like when the project has achieved some maturity. In Combined Iterations, we work on adding new or refactored RPD content alongside new or refactored ETL content in the same iteration. Now the project really makes sense to the end user. We allow the user community–those who are actually consuming the content–to dictate to the developers with user stories what they want the developers to work on in the next iteration. The users will constantly open new stories, some asking for new content, and others requesting modifications to existing content. All Agile methodologies put the burden of prioritizing user stories squarely on the shoulders of the user community. Why should IT dictate to the user community where priorities lie? If we have delivered fabulous content sourced with the Model-Driven paradigm, and Exadata provides the performance necessary to make this “real” content, then there is no reason for the implementors to dictate to the users the need to manifest that model physically with ETL when they haven’t asked for it. If whole portions of our data warehouse are never implemented physically with ETL… do we care? The users are happy with what they have, and they think performance is fine… do we still force a “best practice” of a physical star schema on users who clearly don’t want it?
So that’s it for the Extreme BI methodology. At the onset of this series… I thought it would require five blog posts to make the case, but I was able to do it in four instead. So even when delivering blog posts, I can’t help but rework as I go along. Long live Agile!
RIP Flash-based My Oracle Support
Autotrace Polluting The Shared Pool?
Another random note that I made during the sessions attended at OOW was about the SQL*Plus AUTOTRACE feature. As you're hopefully already aware of this feature has some significant shortcomings, the most obvious being that it doesn't pull the actual execution plan from the Shared Pool after executing the statement but simply runs an EXPLAIN PLAN on the SQL text which might produce an execution plan that is different from the actual one for various reasons.
Now the claim was made that in addition to these shortcomings the plan generated by the AUTOTRACE feature will stay in the Shared Pool and is eligible for sharing, which would mean that other statement executions could be affected by a potentially bad execution plan generated via AUTOTRACE rather then getting re-optimized on their own.
Now that claim initially struck me as odd because so far I was under the impression that the shortcoming of AUTOTRACE was the fact that it simply used the EXPLAIN PLAN facility to get the execution plan details - and I don't think that any plan generated by EXPLAIN PLAN is eligible for sharing with actual statement execution. After thinking about it for a while I realized however that there are some interesting side effects possible, but it depends on how you actually use AUTOTRACE.
Using Default AUTOTRACE
So in order to see what AUTOTRACE does behind the scenes I've decided to trace AUTOTRACE. Here is what I've tried:
set echo on timing on
alter session set tracefile_identifier = 'autotrace';
alter session set sql_trace = true;
set autotrace on
var n number
exec :n := 1
select * from dual where 1 = :n;
select * from dual where dummy = 'X';
And that's a snippet from the corresponding SQL trace file:
.
.
.
=====================
PARSING IN CURSOR #7 len=31 dep=0 uid=91 oct=3 lid=91 tim=651497870527 hv=868568466 ad='7ff0ce23638' sqlid='b9j0230twamck'
select * from dual where 1 = :n
END OF STMT
PARSE #7:c=0,e=460,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=651497870525
=====================
.
.
.
EXEC #7:c=0,e=1306,p=1,cr=3,cu=0,mis=0,r=0,dep=0,og=1,plh=3752461848,tim=651497871918
FETCH #7:c=0,e=654,p=2,cr=3,cu=0,mis=0,r=1,dep=0,og=1,plh=3752461848,tim=651497872660
STAT #7 id=1 cnt=1 pid=0 pos=1 obj=0 op='FILTER (cr=3 pr=2 pw=0 time=0 us)'
STAT #7 id=2 cnt=1 pid=1 pos=1 obj=116 op='TABLE ACCESS FULL DUAL (cr=3 pr=2 pw=0 time=0 us cost=2 size=2 card=1)'
FETCH #7:c=0,e=3,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,plh=3752461848,tim=651497873015
CLOSE #7:c=0,e=16,dep=0,type=0,tim=651497876511
.
.
.
=====================
PARSING IN CURSOR #9 len=79 dep=0 uid=91 oct=3 lid=91 tim=651497880846 hv=3377064296 ad='7ff0ce196a8' sqlid='1tfgxbv4nmub8'
EXPLAIN PLAN SET STATEMENT_ID='PLUS6499083' FOR select * from dual where 1 = :n
END OF STMT
PARSE #9:c=0,e=583,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=651497880843
=====================
.
.
.
=====================
PARSING IN CURSOR #2 len=74 dep=0 uid=91 oct=3 lid=91 tim=651497888595 hv=920998108 ad='7ff0cdd8b00' sqlid='3s1hh8cvfan6w'
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', :1))
END OF STMT
PARSE #2:c=0,e=264,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=651497888593
=====================
.
.
.
PARSING IN CURSOR #7 len=36 dep=0 uid=91 oct=3 lid=91 tim=651498044006 hv=3267611628 ad='7ff0cdbd0f8' sqlid='4k6g7vr1c7kzc'
select * from dual where dummy = 'X'
END OF STMT
PARSE #7:c=0,e=1071,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=272002086,tim=651498044003
EXEC #7:c=0,e=34,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=272002086,tim=651498044138
FETCH #7:c=0,e=60,p=0,cr=3,cu=0,mis=0,r=1,dep=0,og=1,plh=272002086,tim=651498044289
STAT #7 id=1 cnt=1 pid=0 pos=1 obj=116 op='TABLE ACCESS FULL DUAL (cr=3 pr=0 pw=0 time=0 us cost=2 size=2 card=1)'
FETCH #7:c=0,e=2,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,plh=272002086,tim=651498044616
CLOSE #7:c=0,e=28,dep=0,type=0,tim=651498062083
.
.
.
=====================
PARSING IN CURSOR #2 len=84 dep=0 uid=91 oct=50 lid=91 tim=651498073656 hv=290419607 ad='7ff0cdb8a28' sqlid='5jx46tw8nywwr'
EXPLAIN PLAN SET STATEMENT_ID='PLUS6499083' FOR select * from dual where dummy = 'X'
END OF STMT
PARSE #2:c=0,e=1295,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=272002086,tim=651498073653
=====================
.
.
.
=====================
PARSING IN CURSOR #9 len=74 dep=0 uid=91 oct=3 lid=91 tim=651498076015 hv=920998108 ad='7ff0cdd8b00' sqlid='3s1hh8cvfan6w'
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', :1))
END OF STMT
PARSE #9:c=0,e=254,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=651498076013
=====================
.
.
.
So that looks pretty much like the expected behaviour I've mentioned above - AUTOTRACE executes the statements and afterwards runs an EXPLAIN PLAN to show the execution plan.
As a side note it's interesting that the SQL trace doesn't contain the queries used to gather the delta of the session statistics. The reason is simple: They are not issued by this session. SQL*Plus establishes temporarily a second session for that purpose, using one of the modes provided by the OCI allowing to create a second session on the same connection / process. You can tell this by looking at the corresponding V$SESSION.PADDR resp. the entry in V$PROCESS: For both sessions the same process entry will be used (dedicated server model). By the way I've adopted the same approach for SQLTools++, the GUI that I maintain, for all activities that potentially could interfere with the main session, like collecting session statistics delta or calling DBMS_XPLAN.DISPLAY_CURSOR.
So when using AUTOTRACE in this way the only potential threat comes from the actual execution of the statement - but this is no different from executing a statement in any other way. Of course you'll appreciate that using an odd bind value in the execution as part of the AUTOTRACE activity could theoretically lead to issues with the shared usage of such a cursor afterwards - again this is nothing that is special to AUTOTRACE.
The potentially "wrong" execution plan that can be reported via the EXPLAIN PLAN cannot cause problems for other cursors, simply because it is generated via EXPLAIN PLAN. To make this point clear, here is another script that demonstrates:
- How AUTOTRACE can lie
- How EXPLAIN PLAN cursors are unshared by default
-- Demonstrate that AUTOTRACE can lie
set echo on linesize 200 pagesize 0 trimspool on tab off
drop table t;
purge table t;
create table t
as
select
rownum as id
, rpad('x', 100) as filler
from
dual
connect by
level <= 1000000
;
exec dbms_stats.gather_table_stats(null, 't')
create index t_idx on t (id);
-- Compare the execution plan
-- reported by AUTOTRACE
-- to the one reported by DBMS_XPLAN.DISPLAY_CURSOR
set autotrace on
var n number
exec :n := 500000
select /* FIND_ME */ * from (
select * from t where id > :n
)
where rownum > 1;
set autotrace off
select /* FIND_ME */ * from (
select * from t where id > :n
)
where rownum > 1;
select * from table(dbms_xplan.display_cursor(null, null));
-- Demonstrate that EXPLAIN PLAN cursors get special treatment
-- They are unshared by default
set echo off timing off feedback off long 1000000 longchunksize 1000000
spool %TEMP%\explain_plan_example.sql
select * from (
select
sql_fulltext
from
v$sqlstats
where
sql_text like 'EXPLAIN PLAN%/* FIND_ME */%rownum > 1%'
and sql_text not like '%v$sql%'
order by
last_active_time desc
)
where
rownum <= 1
;
spool off
-- Each execution of the same parent EXPLAIN PLAN cursor
-- leads to a new child cursor
set echo on feedback on timing on pagesize 999
@%TEMP%\explain_plan_example
/
/
column sql_id new_value sql_id
select * from (
select
sql_id
from
v$sqlstats
where
sql_text like 'EXPLAIN PLAN%/* FIND_ME */%rownum > 1%'
and sql_text not like '%v$sql%'
order by
last_active_time desc
)
where
rownum <= 1
;
select
sql_id
, child_number
, explain_plan_cursor
from
v$sql_shared_cursor
where
sql_id = '&sql_id';
set serveroutput on
@sql_shared_cursor &sql_id
So if you run this script you'll see an example where AUTOTRACE gets it wrong because the plan generated via EXPLAIN PLAN is different from the actual plan used. Furthermore the plan generated via EXPLAIN PLAN can only match other EXPLAIN PLAN cursors, and on top these are then unshared by default - so no threat to any other SQL issued possible.
Here's a sample output I got from 11.2.0.1:
SQL> -- Demonstrate that AUTOTRACE can lie
SQL> set echo on linesize 200 pagesize 0 trimspool on tab off
SQL>
SQL> drop table t;
Table dropped.
Elapsed: 00:00:00.03
SQL>
SQL> purge table t;
Table purged.
Elapsed: 00:00:00.04
SQL>
SQL> create table t
2 as
3 select
4 rownum as id
5 , rpad('x', 100) as filler
6 from
7 dual
8 connect by
9 level <= 1000000
10 ;
Table created.
Elapsed: 00:00:02.38
SQL>
SQL> exec dbms_stats.gather_table_stats(null, 't')
PL/SQL procedure successfully completed.
Elapsed: 00:00:02.40
SQL>
SQL> create index t_idx on t (id);
Index created.
Elapsed: 00:00:01.63
SQL>
SQL> -- Compare the execution plan
SQL> -- reported by AUTOTRACE
SQL> -- to the one reported by DBMS_XPLAN.DISPLAY_CURSOR
SQL> set autotrace on
SQL>
SQL> var n number
SQL>
SQL> exec :n := 500000
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.01
SQL>
SQL> select /* FIND_ME */ * from (
2 select * from t where id > :n
3 )
4 where rownum > 1;
no rows selected
Elapsed: 00:00:01.51
Execution Plan
----------------------------------------------------------
Plan hash value: 2383791439
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 50000 | 5175K| 162 (0)| 00:00:02 |
| 1 | COUNT | | | | | |
|* 2 | FILTER | | | | | |
| 3 | TABLE ACCESS BY INDEX ROWID| T | 50000 | 5175K| 162 (0)| 00:00:02 |
|* 4 | INDEX RANGE SCAN | T_IDX | 9000 | | 23 (0)| 00:00:01 |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter(ROWNUM>1)
4 - access("ID">TO_NUMBER(:N))
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
15390 consistent gets
15385 physical reads
0 redo size
304 bytes sent via SQL*Net to client
349 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
SQL>
SQL> set autotrace off
SQL>
SQL> select /* FIND_ME */ * from (
2 select * from t where id > :n
3 )
4 where rownum > 1;
no rows selected
Elapsed: 00:00:00.98
SQL>
SQL> select * from table(dbms_xplan.display_cursor(null, null));
SQL_ID 8q13ghbwgsmkv, child number 0
-------------------------------------
select /* FIND_ME */ * from ( select * from t where id > :n ) where
rownum > 1
Plan hash value: 4220795399
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 4204 (100)| |
| 1 | COUNT | | | | | |
|* 2 | FILTER | | | | | |
|* 3 | TABLE ACCESS FULL| T | 500K| 50M| 4204 (1)| 00:00:51 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter(ROWNUM>1)
3 - filter("ID">:N)
22 rows selected.
Elapsed: 00:00:00.12
SQL>
SQL> -- Demonstrate that EXPLAIN PLAN cursors get special treatment
SQL> -- They are unshared by default
SQL> set echo off timing off feedback off long 1000000 longchunksize 1000000
EXPLAIN PLAN SET STATEMENT_ID='PLUS6552708' FOR select /* FIND_ME */ * from (
select * from t where id > :n
)
where rownum > 1
SQL>
SQL> @%TEMP%\explain_plan_example
SQL> EXPLAIN PLAN SET STATEMENT_ID='PLUS6552708' FOR select /* FIND_ME */ * from (
2 select * from t where id > :n
3 )
4 where rownum > 1
5
SQL> /
Explained.
Elapsed: 00:00:00.00
SQL>
SQL> /
Explained.
Elapsed: 00:00:00.00
SQL>
SQL> column sql_id new_value sql_id
SQL>
SQL> select * from (
2 select
3 sql_id
4 from
5 v$sqlstats
6 where
7 sql_text like 'EXPLAIN PLAN%/* FIND_ME */%rownum > 1%'
8 and sql_text not like '%v$sql%'
9 order by
10 last_active_time desc
11 )
12 where
13 rownum <= 1
14 ;
SQL_ID
-------------
ctms62wkwp7nz
1 row selected.
Elapsed: 00:00:00.03
SQL>
SQL> select
2 sql_id
3 , child_number
4 , explain_plan_cursor
5 from
6 v$sql_shared_cursor
7 where
8 sql_id = '&sql_id';
SQL_ID CHILD_NUMBER E
------------- ------------ -
ctms62wkwp7nz 0 N
ctms62wkwp7nz 1 Y
ctms62wkwp7nz 2 Y
3 rows selected.
Elapsed: 00:00:00.03
SQL>
SQL> set serveroutput on
SQL>
SQL> @sql_shared_cursor &sql_id
SQL> declare
2 c number;
3 col_cnt number;
4 col_rec dbms_sql.desc_tab;
5 col_value varchar2(4000);
6 ret_val number;
7 begin
8 c := dbms_sql.open_cursor;
9 dbms_sql.parse(c,
10 'select q.sql_text, s.*
11 from v$sql_shared_cursor s, v$sql q
12 where s.sql_id = q.sql_id
13 and s.child_number = q.child_number
14 and q.sql_id = ''&1''',
15 dbms_sql.native);
16 dbms_sql.describe_columns(c, col_cnt, col_rec);
17
18 for idx in 1 .. col_cnt loop
19 dbms_sql.define_column(c, idx, col_value, 4000);
20 end loop;
21
22 ret_val := dbms_sql.execute(c);
23
24 while(dbms_sql.fetch_rows(c) > 0) loop
25 for idx in 1 .. col_cnt loop
26 dbms_sql.column_value(c, idx, col_value);
27 if col_rec(idx).col_name in ('SQL_ID', 'ADDRESS', 'CHILD_ADDRESS',
28 'CHILD_NUMBER', 'SQL_TEXT') then
29 dbms_output.put_line(rpad(col_rec(idx).col_name, 30) ||
30 ' = ' || col_value);
31 elsif col_value = 'Y' then
32 dbms_output.put_line(rpad(col_rec(idx).col_name, 30) ||
33 ' = ' || col_value);
34 end if;
35 end loop;
36 dbms_output.put_line('--------------------------------------------------');
37 end loop;
38
39 dbms_sql.close_cursor(c);
40 end;
41 /
SQL_TEXT = EXPLAIN PLAN SET STATEMENT_ID='PLUS6552708' FOR select /* FIND_ME */ * from ( select * from t where id > :n ) where rownum > 1
SQL_ID = ctms62wkwp7nz
ADDRESS = 000007FF0DD90180
CHILD_ADDRESS = 000007FF0DD87E70
CHILD_NUMBER = 0
--------------------------------------------------
SQL_TEXT = EXPLAIN PLAN SET STATEMENT_ID='PLUS6552708' FOR select /* FIND_ME */ * from ( select * from t where id > :n ) where rownum > 1
SQL_ID = ctms62wkwp7nz
ADDRESS = 000007FF0DD90180
CHILD_ADDRESS = 000007FF0DCD0D10
CHILD_NUMBER = 1
EXPLAIN_PLAN_CURSOR = Y
--------------------------------------------------
SQL_TEXT = EXPLAIN PLAN SET STATEMENT_ID='PLUS6552708' FOR select /* FIND_ME */ * from ( select * from t where id > :n ) where rownum > 1
SQL_ID = ctms62wkwp7nz
ADDRESS = 000007FF0DD90180
CHILD_ADDRESS = 000007FF0DCAAA20
CHILD_NUMBER = 2
EXPLAIN_PLAN_CURSOR = Y
--------------------------------------------------
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.10
SQL>
Other Autotrace Options
The perhaps less expected aspect comes into the picture if you attempt to use AUTOTRACE differently - there are various options and when using a particular combination AUTOTRACE doesn't really execute the statement but reports only the execution plan, so if you change the first example above from:
SET AUTOTRACE ON
to
SET AUTOTRACE TRACEONLY EXPLAIN
then have a close look at the SQL trace generated:
.
.
.
=====================
PARSING IN CURSOR #2 len=45 dep=0 uid=91 oct=3 lid=91 tim=416642144779 hv=3626603586 ad='7ff13a1c8b0' sqlid='9pj321gc2m522'
select /* FIND_ME */ * from dual where 1 = :n
END OF STMT
PARSE #2:c=0,e=64,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=3752461848,tim=416642144777
CLOSE #2:c=0,e=14,dep=0,type=0,tim=416642145372
=====================
.
.
.
=====================
PARSING IN CURSOR #3 len=93 dep=0 uid=91 oct=3 lid=91 tim=416642148753 hv=2987003528 ad='7ff13cd8ea0' sqlid='fu0myxft0n3n8'
EXPLAIN PLAN SET STATEMENT_ID='PLUS6510526' FOR select /* FIND_ME */ * from dual where 1 = :n
END OF STMT
PARSE #3:c=0,e=689,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=416642148749
=====================
.
.
.
=====================
PARSING IN CURSOR #6 len=50 dep=0 uid=91 oct=3 lid=91 tim=416642233676 hv=37196885 ad='7ff138c8570' sqlid='f8cyn9w13g52p'
select /* FIND_ME */ * from dual where dummy = 'X'
END OF STMT
PARSE #6:c=0,e=116,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=272002086,tim=416642233673
CLOSE #6:c=0,e=32,dep=0,type=0,tim=416642237105
=====================
.
.
.
=====================
PARSING IN CURSOR #3 len=98 dep=0 uid=91 oct=50 lid=91 tim=416642243694 hv=390050481 ad='7ff1374bcf8' sqlid='8vvq0ncbmzcpj'
EXPLAIN PLAN SET STATEMENT_ID='PLUS6510526' FOR select /* FIND_ME */ * from dual where dummy = 'X'
END OF STMT
PARSE #3:c=0,e=1261,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=272002086,tim=416642243691
=====================
.
.
.
Can you spot the difference? SQL*Plus now only parses the SQL before actually running the EXPLAIN PLAN command.
Let's see what happens if the second example from above gets executed with the AUTOTRACE TRACEONLY EXPLAIN option:
-- Demonstrate that AUTOTRACE TRACEONLY EXPLAIN
-- can cause problems for other SQL executions
set echo on linesize 200 pagesize 0 trimspool on tab off
drop table t;
purge table t;
create table t
as
select
rownum as id
, rpad('x', 100) as filler
from
dual
connect by
level <= 1000000
;
exec dbms_stats.gather_table_stats(null, 't')
create index t_idx on t (id);
set autotrace traceonly explain
var n number
exec :n := 500000
select /* FIND_ME */ * from (
select * from t where id > :n
)
where rownum > 1;
set autotrace off
select /* FIND_ME */ * from (
select * from t where id > :n
)
where rownum > 1;
-- Now the execution plan generated by the PARSE call issued by SQL*Plus
-- will be re-used by the subsequent executions
select * from table(dbms_xplan.display_cursor(null, null));
Here's again a sample output from 11.2.0.1:
SQL> drop table t;
Table dropped.
SQL>
SQL> purge table t;
Table purged.
SQL>
SQL> create table t
2 as
3 select
4 rownum as id
5 , rpad('x', 100) as filler
6 from
7 dual
8 connect by
9 level <= 1000000
10 ;
Table created.
SQL>
SQL> exec dbms_stats.gather_table_stats(null, 't')
PL/SQL procedure successfully completed.
SQL>
SQL> create index t_idx on t (id);
Index created.
SQL>
SQL> set autotrace traceonly explain
SQL>
SQL> var n number
SQL>
SQL> exec :n := 500000
PL/SQL procedure successfully completed.
SQL>
SQL> select /* FIND_ME */ * from (
2 select * from t where id > :n
3 )
4 where rownum > 1;
Execution Plan
----------------------------------------------------------
Plan hash value: 2383791439
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 50000 | 5175K| 162 (0)| 00:00:02 |
| 1 | COUNT | | | | | |
|* 2 | FILTER | | | | | |
| 3 | TABLE ACCESS BY INDEX ROWID| T | 50000 | 5175K| 162 (0)| 00:00:02 |
|* 4 | INDEX RANGE SCAN | T_IDX | 9000 | | 23 (0)| 00:00:01 |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter(ROWNUM>1)
4 - access("ID">TO_NUMBER(:N))
SQL>
SQL> set autotrace off
SQL>
SQL> select /* FIND_ME */ * from (
2 select * from t where id > :n
3 )
4 where rownum > 1;
no rows selected
SQL>
SQL> -- Now the execution plan generated by the PARSE call issued by SQL*Plus
SQL> -- will be re-used by the subsequent executions
SQL> select * from table(dbms_xplan.display_cursor(null, null));
SQL_ID 8q13ghbwgsmkv, child number 0
-------------------------------------
select /* FIND_ME */ * from ( select * from t where id > :n ) where
rownum > 1
Plan hash value: 2383791439
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 162 (100)| |
| 1 | COUNT | | | | | |
|* 2 | FILTER | | | | | |
| 3 | TABLE ACCESS BY INDEX ROWID| T | 50000 | 5175K| 162 (0)| 00:00:02 |
|* 4 | INDEX RANGE SCAN | T_IDX | 9000 | | 23 (0)| 00:00:01 |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter(ROWNUM>1)
4 - access("ID">:N)
23 rows selected.
SQL>
So that's interesting: By using the TRACEONLY EXPLAIN option I now ended up with a potentially "wrong" execution plan that is actually eligible for sharing with other executions.
What surprised me most was the fact that I expected a bind variable type mismatch (CHAR vs. NUMBER, check the "Predicate Information" section) between the parse and the execution and therefore a re-optimization that actually peeked at the bind variables rather than re-using and sharing the existing cursor, but obviously the cursor was eligible for sharing. Very likely this is due to the fact that the parse call didn't actually bind any variables hence the mentioned mismatch wasn't possible.
Summary
So in summary I think what can be said is this:
- Don't use AUTOTRACE if you want to get the actual execution plan
- The potentially "wrong" execution plans reported by AUTOTRACE usually do not represent a threat because these are EXPLAIN PLAN cursor
- The potential threat of AUTOTRACE variants that actually execute the statement is the fact that the plan used by this actual execution is definitely eligible for sharing with other executions, but this no different from any other execution, so nothing special about AUTOTRACE here either
- There is a potential threat when using the AUTOTRACE TRACEONLY EXPLAIN option - the PARSE only but not execute behaviour could leave undesirable cursors behind that are eligible for sharing. This applies in particular to SQL statements using bind variables
Oracle WebCenter: The Integrated Leader
As we talk about leadership this week, it’s impressive to see Oracle WebCenter as a leader, not just in Enterprise Content Management, but also in Horizontal Portals and in Web Content Management. It really points to how Oracle WebCenter is the leading platform for user engagement.
It’s hard for any of the vendors to match the investment that Oracle has made in this space. The WebCenter products are integrated with Oracle Fusion Middleware, providing an easy development environment, great management tools, and a consistent methodology. Customers are able to leverage their other IT investments and skillsets to run WebCenter.
WebCenter is also integrated with Oracle hardware. Oracle SuperCluster offers an optimized solution with Oracle WebCenter Content pre-loaded. Oracle Optimized Solution for Oracle WebCenter Content on SPARC SuperCluster is a screaming high-performance content management solution can ingest over 270 million documents per day and can perform over 370 million searches per day. Let us know if that’s not enough for you, we can always expand it because it scales horizontally.
Oracle WebCenter is also integrated out-of-the-box with key enterprise applications. Oracle E-Business Suite, PeopleSoft, Siebel, JD Edwards and Oracle Fusion Applications integrations make it easy to present content in those applications, or to create mashups for specific tasks, where you can bring 2 or more applications together on the same screen or with relevant content to drive faster business processes.
This investment over the past three years is paying off. Customers are looking for solutions that can benefit their bottom line today. And the lowered costs and improved productivity show immediately. Customers cut costs of business processes (like invoice processing, where we have seen up to 90% savings) and storage costs (where we have seen 75% savings by consolidating content), but they also see productivity go up. The result is people can find the content they need without having to wade through irrelevant and out-of-date content, so they can make better decisions faster.
Ouch!
Here’s a set of Instance Activity stats I’ve never seen before, and I’d rather never see again. From an active standby running 11.1.0.7 on AIX:
select
name, value
from v$sysstat
where
name in (
'consistent gets - examination',
'consistent gets',
'session logical reads'
)
or name like 'transaction tables%'
;
NAME VALUE
---------------------------------------------------------------- --------------------
session logical reads 102,731,023,313
consistent gets 102,716,499,376
consistent gets - examination 98,170,595,252
transaction tables consistent reads - undo records applied 96,590,314,116
transaction tables consistent read rollbacks 2,621,019
5 rows selected.
The instance has been up for about 60 hours – and 95% of the work it has done has been trying to find the commit times for transactions affecting blocks that are in need of cleanout. If you look at the two statistics about the transaction tables (those are the things in the undo segment header blocks) you can see that the average work done to find a commit time was a massive 48,000 visits to undo blocks.
The solution was fairly simple – kill all the reports which had been running for the last six hours, because they were the ones that were causing a problem, while simultaneously suffering most from the problem – at the time I killed the worst offender it was managing to read about 50 blocks per minute from the database, and doing about 100,000 buffer visits to undo blocks per second.
You probably won’t see this every again, but if you do, a quick check is:
select * from v$sess_io order by consistent_changes;
Repeat a couple of times and check if any sessions are doing a very large number (viz: tens of thousands) of consistent changes per second.
PeopleSoft Applications Portal 9.1 Feature Pack 1 Now available
Oracle/PeopleSoft is happy to announce the first feature pack release of the PeopleSoft Applications Portal. This is the first release in the new continuous release model, which we believe will enable us to make new functionality and features available to customers faster. We also expect that the new features will be easier to uptake in more fine-grained packages. The release continues Oracle’s commitment to protecting and extending the value of PeopleSoft applications. It provides valuable enhancements that improve the productivity of end users, as well as improvements to help reduce the total cost of ownership. While the feature pack contains many enhancements, in this post we'll highlight the major enhancements, including the following:
- Unified and seamless navigation
- Content management
- Collaboration
- User Experience/PeopleTools uptake
In addition, there are some collaborative capabilities that are provided by the Applications Portal that will also be enhanced. These enhancements will extend beyond the use of the portal.
Normal 0 false false false EN-US X-NONE X-NONE MicrosoftInternetExplorer4 /* 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-family:"Calibri","sans-serif"; mso-ascii- mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi- mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;}
Normal 0 false false false EN-US X-NONE X-NONE MicrosoftInternetExplorer4 /* 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-family:"Calibri","sans-serif"; mso-ascii- mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi- mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;}
The English and Multi-Language CD recuts for the PeopleSoft Portal Solutions 9.1 Feature Pack 1 enhancements are now available on the Oracle Software Delivery Cloud (OSDC). Physical CD shipments will be ready by January 30, 2012. Documentation updates are also complete and available on OSDC and My Oracle Support.
The recertified upgrade scripts are posted to My Oracle Support here:
PeopleSoft Portal Solutions 8.9 to 9.1 Feature Pack 1 Upgrade
PeopleSoft Portal Solutions 9.0 to 9.1 Feature Pack 1 Upgrade
The Feature Pack recut CD is intended for organizations that are implementing PeopleSoft Portal Solutions 9.1 newly, or are upgrading from an earlier release. Feature pack enhancements and maintenance through PeopleSoft Portal Solutions 9.1 Maintenance Pack 1, and PeopleSoft Portal Solutions Bundle #6 are included in these recuts.
New Release ModelNormal 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-family:"Times New Roman","serif";}
Instead of large Portal releases that occur every two or three years, Oracle-PeopleSoft is moving the Applications Portal to a new release model based on Feature Packs. Feature Packs are a new delivery mechanism supplementing the existing delivery mechanisms of bundles and maintenance packs.
Feature Packs will consist of a roll-up of new features and updates, and in addition, at the delivery of Feature Packs, Oracle will include the roll-up of capabilities and updates previously delivered in bundles and maintenance packs as well as re-certify upgrades and integrations.
Unified NavigationNormal 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-family:"Times New Roman","serif";}
Setting up the PeopleSoft Applications Portal for use with other PeopleSoft applications has been a manual process prior to Feature Pack 1 (FP1). For example, using Applications Portal to access PeopleSoft HCM and other application pages, an administrator sets up the node and registry entries for each CREF and assigns the security information manually. To automate this process in Applications Portal, we are providing a Workcenter specifically supporting Unified Navigation. The Workcenter will guide administrators through the process, and bring all the necessary pages together to streamline the process. The Unified Navigation framework federates all PeopleSoft application nodes in one place so everything can be managed from Applications Portal. Unified Navigation supports systems using PeopleTools 8.50 and above.
Content ManagementNormal 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-family:"Times New Roman","serif";}
Content management is an important part of Applications Portal, and the following new features make it more useful and powerful:
- Configurable WorkCenter for delivering and managing content
- Securable portal content by business data
- Update Content usage tracking
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-family:"Times New Roman","serif";} The content management WorkCenter offers the ability to more easily manage and consume content, and it also provides the ability to capture and display (in related content) additional contextual information such as ratings, tags, and discussions associated with any piece of content. This enriches the user experience by providing users with additional valuable collaborative information about the content they are viewing. The WorkCenter also makes it easier to navigate among published content items.
CollaborationNormal 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-family:"Times New Roman","serif";}
A few new features are included to facilitate collaboration and other Enterprise 2.0 activities. This includes improvements to Related Attachments and the calendar.
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-family:"Times New Roman","serif";} Related Attachments is a new feature provided by Portal’s Related Links service. This service can be used by any application using the Related Content Framework, enabling users to attach files to virtually any PeopleSoft page or component. The Related Links service is context-sensitive, so related attachments can be keyed to specific data on a page.
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-family:"Times New Roman","serif";} Calendars in Portal and Collaborative Workspaces will now support aggregating user tasks, worklist tasks, and action items. This brings all relevant time/date dependent events into a user’s calendar, making them easier to manage and act upon. This consolidated calendar streamlines user event management by enabling users to refer to a single calendar to manage their work.
User Experience--PeopleTools UptakeNormal 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-family:"Times New Roman","serif";}
Some of the enhancements that are extending the value of the PeopleSoft applications to customers include the following:
- Authorization as a Service
- Guidance on branding and creating a rich self-service user experience
- Global Search
Additional and detailed information is available in my.oracle.support:
Normal 0 false false false EN-US X-NONE X-NONE MicrosoftInternetExplorer4 /* 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-family:"Calibri","sans-serif"; mso-ascii- mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi- mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} Configuring a Contemporary User Experience in PeopleSoft Applications Portal Red Paper (Doc ID 1399586.1)
Normal 0 false false false EN-US X-NONE X-NONE MicrosoftInternetExplorer4 /* 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-family:"Calibri","sans-serif"; mso-ascii- mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi- mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} Portal Solutions Cumulative Feature Overview Tool [ID 793160.1
Normal 0 false false false EN-US X-NONE X-NONE MicrosoftInternetExplorer4 /* 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-family:"Calibri","sans-serif"; mso-ascii- mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi- mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} PeopleSoft Applications Portal Solutions 9.1 Documentation Homepage (Doc ID 887960.1)
A Quick Pas de Deux with Dancer
FREE Webcast on RDA! Today.
Reminder: Based on my previous blog entry on Data Collections - http://blogs.oracle.com/Support/entry/ask_the_support_blogger_he, I'm conducting a FREE Customer Workshop on RDA and DBA Diagnostics TODAY, 2pm EST
Hope to have you there.
-Chris
If Content is the King, then Portal is the Queen
By Alakh Verma, Director, Platform Technology Solutions
The World Wide Web (WWW) was conceived as a tool by Tim Berners-Lee, which created and gathered knowledge through human interaction and collaboration. Web 1.0 came as merely a presentation web with static HTML pages of information. Web 2.0 then gradually advanced towards online participation in content creation and social interaction like e-commerce, e-service, and content strategy, which is all aspects of the “Transactional Web” using social media like Facebook, Twitter, and LinkedIn, etc. We are now transitioning into Web 3.0 that was first defined by Dakota Reese Brown as “The Contextual Web.” Content and Context will now be extremely significant in determining what content we need and with whom we need to collaborate in social business.
It is estimated that by 2020, there would be 4 billion people online; 31 billion connected devices, 25 million applications, 1.3 trillion sensors/tags and 50 trillion gigabytes of content created in networked society. So, we are moving in the world where content is going to be the king and help determine the success or failure of any business. Web content has changed and so is web content management. During the last decade, we focused on making it easier and more powerful for non-technical people to move content from their desktop to their Web site and helped the enterprises with powerful workflows, approval processes and the ability to integrate with other enterprise tools and applications. The next decade will be more focused on providing Web experience or customer experience management on the Web. And Content and Portal would remain at the center stage as we evolve into a new era of computing.
The explosive growth of content and more specifically unstructured content such as videos on YouTube, photos and chat messages on Facebook and emails have given birth to yet another evolutionary paradigm of big data management as we enter the year 2012. As Content remains the king, it is paramount to store, manage, archive and retrieve from the unified repository and Oracle WebCenter Content and Oracle WebCenter Sites does it all seamlessly. Customers have started seeking pleasant Web experience with their transactions and businesses need to offer a robust Customer engagement platform to meet that.
Content is the King
As content is the king, Web portal or public portal (defined by webopedia) that refers to a Web site or service that offers a broad array of resources and services, such as e-mail, forums, search engines, and online shopping malls seems to be the queen to render the context based content from the unified repository from any source to complement each other. Without a sound portal framework, users would not be able to get the right content in the context of their business in real-time to execute their transactions.
Portal is the Queen
For example, if any customer visits BestBuy on their Web portal for getting any product information leading them to subsequent sales transaction, the first thing they would look for is a context based search interface that would help the visitor to provide the relevant content. The portal interface should also provide the similar other products or recommended products based on other user feedbacks and ratings. Also, quick references and recommendations with an option to verify via chat/email become almost convincing to the prospective buyer to make decision.
Interestingly, technologies such as Oracle WebCenter Portal and Oracle WebCenter Sites offer these capabilities and help portal to be the queen in our Web based business transactions and compliment Web Content management in the overall customer experience management.
Oracle Learning Library Mobile

As I discussed in the past, the Oracle Learning Library isn't just about Oracle Application Express or the Oracle Database. There is content there for virtually every Oracle product offered - JD Edwards, NetBeans, Solaris, Java, Oracle Business Intelligence, Fusion Middleware, Oracle E-Business Suite, etc. There are tutorials, white papers, Oracle By Examples, demonstrations, data sheets, and more.
And at the risk of being criticized (again), I can proudly proclaim that this is all running entirely on Oracle Application Express at http://apex.oracle.com - the same hosted instance of Oracle Application Express that gets over 10 million page views a week and between 600 - 700 new workspace requests every week.











