Feed aggregator
MongoDB: The Definitive Guide By Kristina Chodorow
MongoDB - As everyone know it's a document database that provides high performance, high availability, and easy scalability. Some people used Phone System. They might found this database on it. It's not difficult to deploy or test it. For Example: Deploy a Replica Set.Anyway, I didn't write about how to deploy or use about it on this post. I wanted to talk about a book tittles MongoDB: The Definitive Guide, 2nd Edition Powerful and Scalable Data Storage By Kristina Chodorow.
A book was upgraded from a previous edition. It shows you the many advantages of using document-oriented databases, and good demonstrates. A book covers how to begin with MongoDB, how to install, perform and etc it. In a book, readers find 6 parts. Introduction to MongoDB, Designing Your Application, Replication, Sharding, Application Administration and Server Administrator.
After readers read a book. They are supposed to understand much more about a document-oriented database and how to install and perform with MongoDB. Concept in a book is very clear and it's easy to read and follow samples in a book. A book also gives idea for readers to use MongoDB and designing application.
However, A book has some errors about technical information and code in sample. Reader should use MongoDB doc for help during read and to find out more information. Written By: Surachart Opun http://surachartopun.com
MDS XML versus MUDE Part1: Introduction
This is my first blog post in quite a while… mostly because of all the planning and preparation that went into the Rittman Mead BI Forum, which is now sadly behind us. There’s been a lot of other activity around Oracle BI as well. Of course, we had OBIA 11.1.1.7.1 PS1 release recently, and this has us very busy internally, preparing for our first implementation, and thinking about what the training course will look like. Mark covered the subject very well… but still expect something from me on the new OBIA in the not-so-distant future. I’ve also been busy with my upcoming Kscope New Orleans presentations. Edward Roske and I have a 2-hour, double-room presentation on Essbase and OBIEE integration; I have an OBIEE and Data Vault presentation that I’m presenting with Kent Graziano; and then, I have my only solo presentation concerning MDS XML versus MUDE as a way of doing multi-user RPD development.
I presented on the MDS XML topic already at Collaborate 13 this year, and what I noticed from discussions with the attendees is that most users don’t understand where this feature fits in. Honestly… I wasn’t too sure myself when the feature was first released, so I thought I would take a look and see how organizations might use it. I was planning on addressing Aggregation next on the blog (a subject I recently spoke on at Collaborate as well), but the MDS XML subject seems to have more momentum… so here we go.
If you aren’t aware of what MDS XML is, or if you have an idea, but are still throwing your hands in the air, then let me try to explain first what it is. The OBIEE (and Siebel Analytics, and nQuire before that) metadata repository file has always been binary… that single RPD file that we deploy to the BI Server. But a single, monolithic binary file is a problematic solution for the OBIEE metadata layer… just as it is problematic for almost any deployment large or small. Microsoft faced a similar crossroads not so long ago with Office file formats: the world wanted non-binary, and at that time, XML was king. So Microsoft launched a file-format conversion project to produce a resulting Office file format based on XML and open standards (or at least… as open as Microsoft can allow itself).
The paramount issue with binary files in any technology project is their difficulty integrating with version control systems (VCS). Most of the efficiency capabilities of these systems, from merging functionalities, to cheap delta copies, revolves around the ability to do basic text diff’ing. We immediately lose all of this functionality when working with a binary file. But even a monolithic text file would be difficult to manage as well because it becomes impossible to track the granular changes made to individual objects. So what we’ve needed in OBIEE is the ability to store our repository as a collection of granular text documents, using a recognized format (such as XML) and having them all act together to form our metadata definition.
We have that capability now with the MDS XML feature in the Admin Tool. Whenever we “Create” a repository, “Open” a repository, or “Copy|Save As” a repository, we have the option to work instead with a directory of XML files using Oracle’s standard MDS format.
The Admin Tool will ask us for a directory to serve as the “core” directory for the RPD… a container to hold all the subsequent subdirectories and individual XML files (I used “core” instead of “base” because there is actually a “base” subdirectory in the directory tree.) The core directory serves as the pointer to the RPD… we browse to this high-level directory when opening, creating or copying an RPD file stored in this way. In the below screenshot, the “gcbc” directory is the core directory I specified in the Admin Tool during metadata repository development.
In the next few posts, I’ll examine this new file format and see what we can actually do with it. In all honesty, I put my first MDS XML abstracts forward at conferences before I even knew what was possible. I wanted to put this new feature through it’s paces and see what (if any) holes it filled in the current project delivery paradigm. In the next post, I’ll take a brief look at MUDE (I know, I’m sorry…) to see where the bar is currently set with repository multi-user development for OBIEE. After that, I’ll take MDS XML for a stroll along with the Git version control system… arguably the most powerful VCS to date. Finally, I’m planning on taking a look at what a delivery methodology might look like using Git… including RPD migration and rollout.
Managing Compensation to Win the War for Talent
A Guest Post by Oracle Solutions Specialist, Jeff Haynes (pictured left)
If there’s one thing HR and Compensation departments have learned
since 2008, it’s that the budgets for rewards programs are anything but
set in stone. Many historically well-funded merit and bonus pools were
slashed as corporate performance waned. A clear emerging trend coming
from this down turn is that you can’t make mediocre compensation
decisions with thin budgets. Wise and well-informed decisions that
impact your highest performers and those with the hottest and most
critical skill sets can go a long way towards competing and winning the
war for talent.
In general, all the elements of talent management loom large as
executives look to gain a competitive edge in innovation, new market
opportunities, and gains in productivity and quality. In fact, a study
by The Boston Consulting Group demonstrated the importance of sound
talent management practices on enterprise value by comparing the growth
of stocks in Fortune’s “100 Best Companies to Work For” versus the
S&P 500. Firms that made Fortune’s list at least three times in the
last 10 years outperformed the S&P by nearly 100 percentage points
in 2011. With those kinds of returns, who doesn’t want to implement the
types of best-practice talent management programs demonstrated by these
firms?
One such practice that stands out is reward segmentation and
differentiation. Segmentation is the purposeful compartmentalization of
particular groups within your workforce. These could be based on
categories, such as high performers, job families with critical skills,
high potentials, different geographies, or different business units.
Differentiation is the careful, disproportional distribution of rewards
to these segments. In “The Next Wave in Integrated Talent Management,”
Bersin and Associates demonstrated that companies with higher standard
deviations in compensation have 15 to 20 percent greater performance
when measured by revenue and profit growth.
Who Pays for Performance?
Today’s tight rewards budgets coupled with these eye-opening studies
have moved “pay-for-performance” front and center. More than 80 percent
of firms offer variable compensation programs and a third said they plan
to increase pay-for-performance, according the 2013 Global Top Five
Employer Rewards Priorities Survey by Deloitte. To give some historical
perspective, in today’s labor market, 80 percent of employees are
eligible and receive bonuses; this is more than a 30 percent increase
over the last 15 years. Studies have shown that variable compensation is
really the best place to differentiate pay; and, every major academic
review of rewards researched in the past 30 years has confirmed that
incentives (variable pay) increase performance (Ledford, Gerhart, and
Fang World at Work Journal Q2 2013).
As appealing as it may seem, a pay-for-performance initiative should not
be undertaken lightly. The following are some baseline criteria where
pay for performance typically works best:
- Quantifiable / Attainable Outcomes: The organization has a results-oriented culture where precise, measurable performance criteria are identified that create business success
- Competitive: Bonus plans are common in industry / particular job levels
- Pragmatic: Plans are simple and well understood
- Communication / Leadership: The plans are not a substitute for management
-
Strategic HR: HR functions as an enabler of collaboration, expertise,
and decision-making, and the pay-for-performance plan is a part of an
integrated talent management strategy
Here’s Where Oracle’s Technology Comes In
The fifth criterion, the role of strategic HR, is evolving.
Specifically, it is moving towards being a proponent of technology―as an
enabler of the talent management strategy (The State of the HR
Profession, 2011).Obviously we at Oracle are in the business of
designing, developing, and selling great HCM applications―and technology
will undoubtedly enable an organization to be more successful at these
activities.
But, let's be clear―all the best software in the world won't solve poor management practices.
Often, we find that the selection and implementation of Oracle’s
software actually drives HR to re-engineer its talent processes and to
implement more sound and relevant management practices.
So, as you and your organization consider your next steps in integrated talent
management, give reward segmentation and differentiation some
thought. Is it a part of your talent strategy? How well are you doing
it? Are you driving pay for performance? What’s holding you back? As
Abraham Lincoln once said, “Give me six hours to cut down a tree and I
will spend the first four sharpening the axe.” How sharp is your pay-for-performance axe?

Fusion Applications Social Relationship Management (SRM) Community is Live
A Guest Post by Milo Velazquez, Senior Product Supportability Engineer, Oracle (pictured left)
A new community centered on Social Relationship Management is available in My Oracle Support Communities (MOSC).
The goal of this community is to connect technical and functional users
of Oracle SRM products in a collaborative forum. We have provided useful
and informative content to help guide new and experienced users in the
implementation and use of the SRM products.
Highlights of the Site
- SRM Video Training Library -- features a number of short videos designed
to bring the user up to speed on the most popular features in SRM

- Product Specific section -- includes links to SRM product documentation,
including what's new with SRM, How-To documents, overviews of every
aspect of SRM, and more.

- Frequently Asked Questions – organized by categories, intended to provide additional guidance
Post Your Questions and/or Start Discussions
- Start by posting a thread in our SRM Discussions section. Our knowledgeable and helpful community moderators will respond promptly to your questions and find the best resources to provide needed information.
- Look at the existing discussion threads as these may provide ready answers for your questions even before you ask.
Get Connected
We hope you find the information posted in the Fusion Applications SRM
community to be valuable, and we look forward to your membership and
active participation
Oracle Learn Cloud Drives Business Performance
A Guest Post by Vice President David Koehn, Oracle Applications (pictured left)
“Blurring the line between retirement and resort.” That’s one of the taglines for Vi (formerly Classic Residence by Hyatt), a national leader in high-end senior living. Vi also is a great example of an organization that has the philosophy of learning integrated into its corporate culture.
Vi is dedicated to enriching the lives of senior citizens by providing
high-quality customer care and services. The company’s financial growth
is driven by satisfied customers, and Vi believes that customer
satisfaction can only be delivered by satisfied employees. In fact, more
than 30 percent of Vi’s sales come from resident referrals. Therefore,
having a strong customer-centric culture is vital to its value
proposition.
Vi invests heavily in employee education and development to ensure every
employee has the opportunity to learn and grow within the organization.
When Judy Whitcomb, VP of Vi’s human resources and learning program,
began the search for a learning management system (LMS), her top priorities were flexibility and the ability to configure the user
experience for the varying needs of the learners and functions within
the company. Vi needed a delivery channel for learning to address the
dynamic nature of a diverse workforce with diverse learning needs and
Oracle Learn Cloud seemed to be the obvious fit. With Oracle Learn
Cloud, Vi was able to reduce learning expenditure by 28 percent while
improving customer satisfaction by more than six percent.
“Our partnership with Oracle Learn Cloud has made it possible to create
highly customizable learning experiences and portals. Oracle Learn Cloud
gives us the tools and resources to meet our specific needs. That got
our learning platform to market faster.”
Human Resources and Learning and Organizational Development, Vi
In today’s global network of local markets, the one-size-fits-all
learning model doesn’t work with individuals needing different types of
goals and coaching by function, location, and level. What customers
really want is a flexible learning management system that can be easily
configured and customized according to the various business needs of
their organization. Oracle Learn Cloud is designed to be 100 percent
configurable right out of the box. In addition, our 700+ customers can
tailor the user experience according to their various business needs
quickly and easily. Large enterprise customers can deliver tailored
learning experiences through multiple sub portals.So, how reliable is Oracle Learn Cloud? Built on a secure and robust cloud infrastructure, Oracle Learn Cloud can scale to the growing needs of an enterprise with reduced latency. We have the capacity to handle 30 million transactions a month with a .4 second server response time. Oracle Learn Cloud also is available ala carte or integrated with any HCM/ERP system.
At Oracle, we measure our success in terms of customer success. We
strongly believe in providing value through a total customer experience
that doesn’t just stop at the product level. Our Learn Cloud team is
dedicated to providing you with operations and data center excellence,
worldwide support, business intelligence and an active community to
share knowledge and best practices.
<strong>Contributions by Angela Golla,
Oracle Blogs
Oracle hosts a long list of technical blogs on subjects such as Java, Virtualization, Cloud Computing, Database, Security and more. Go to http://blogs.oracle.com/ to learn more. This is a great way to stay current with the latest Oracle news.
How to hint
Here’s a live example demonstrating a point I’ve often made – you have to be very detailed in your hinting or Oracle will find a way to obey your hints and do the wrong thing. A recent posting on the OTN database forum gave use the following query and execution plan:
SELECT
ERO.DVC_EVT_ID,
E.DVC_EVT_DTTM
FROM D1_DVC_EVT E,
D1_DVC_EVT_REL_OBJ ERO
WHERE
ERO.MAINT_OBJ_CD = 'D1-DEVICE'
AND ERO.PK_VALUE1 = :H1
AND ERO.DVC_EVT_ID = E.DVC_EVT_ID
AND E.DVC_EVT_TYPE_CD IN (
'END-GSMLOWLEVEL-EXCP-SEV-1',
'STR-GSMLOWLEVEL-EXCP-SEV-1'
)
ORDER BY
E.DVC_EVT_DTTM DESC
-----------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | Cost (%CPU)| Pstart| Pstop | A-Rows | A-Time | Buffers |Reads |
-----------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 3196 (100)| | | 134 |00:00:13.85 | 3195 | 2136 |
| 1 | SORT ORDER BY | | 1 | 3196 (1)| | | 134 |00:00:13.85 | 3195 | 2136 |
| 2 | NESTED LOOPS | | 1 | | | | 134 |00:00:13.85 | 3195 | 2136 |
| 3 | NESTED LOOPS | | 1 | 3195 (1)| | | 1059 |00:00:07.77 | 2138 | 1197 |
|* 4 | INDEX RANGE SCAN | TEST1 | 1 | 30 (0)| | | 1059 |00:00:00.07 | 11 | 11 |
| 5 | PARTITION RANGE ITERATOR | | 1059 | 1 (0)| KEY | KEY | 1059 |00:00:07.69 | 2127 | 1186 |
|* 6 | INDEX UNIQUE SCAN | D1T400P0 | 1059 | 1 (0)| KEY | KEY | 1059 |00:00:07.67 | 2127 | 1186 |
|* 7 | TABLE ACCESS BY GLOBAL INDEX ROWID| D1_DVC_EVT | 1059 | 2 (0)| ROWID | ROWID | 134 |00:00:06.08 | 1057 | 939 |
-----------------------------------------------------------------------------------------------------------------------------------------
You’ll notice that something close to half the time spent came from the table access in line 7 (This is 11g, and we have a plan which shows the “double nested loop” of an index access followed by a table access – for each rowid returned in line 3 (totalling 7.77 seconds) we access the table through the nested loop driven by line 2 which totals 13.85 seconds).
After a little chat, the suggestion arose to introduce an index that avoided the table access – it’s doing a fairly large amount of random I/O, and we might be able to run the query roughly twice as fast if we didn’t visit it. So the DBA set up a suitable test index (called test2) on the D1_DVC_EVT table, and found that the optimizer didn’t use it (perhaps because the index was larger then the alternative, perhaps because the clustering_factor was much bigger) – so he added a hint to the code: /*+ index (e test2) */ which made Oracle use the index to produce the following plan:
---------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | Cost (%CPU)| Pstart| Pstop | A-Rows | A-Time | Buffers | Reads | ---------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 98415 (100)| | | 134 |00:04:11.82 | 100K| 96848 | | 1 | SORT ORDER BY | | 1 | 98415 (1)| | | 134 |00:04:11.82 | 100K| 96848 | |* 2 | HASH JOIN | | 1 | 98414 (1)| | | 134 |00:04:11.82 | 100K| 96848 | |* 3 | INDEX RANGE SCAN | TEST1 | 1 | 30 (0)| | | 1059 |00:00:00.01 | 11 | 0 | | 4 | PARTITION RANGE ALL | | 1 | 98249 (1)|1048575| 1 | 7566K|00:03:34.58 | 100K| 96848 | | 5 | PARTITION RANGE SUBQUERY| | 287 | 98249 (1)|KEY(SQ)|KEY(SQ)| 7566K|00:03:10.87 | 100K| 96848 | |* 6 | INDEX FULL SCAN | TEST2 | 2296 | 98249 (1)|1048575| 1 | 7566K|00:02:45.47 | 97412 | 96848 | ----------------------------------------------------------------------------------------------------------------------------
Unfortunately, although Oracle obeyed the hint – it had to, since it was legal and in-context – it didn’t take the path the DBA expected.
When you hint, you have to make it impossible for Oracle find any path you don’t want, and that can take a lot of hints. In this case the DBA simply wanted to use the same nested loop path that he’d originally seen, but using the new index instead. To get the path safely he needed at least 4 hints: one to specify the join order, one to specify the join method, and one for each table to specify the access method. In this case:
/*+
leading(ero e)
use_nl(ero e)
index(ero test1)
index(e test2)
*/
Once you’ve hinted some SQL and got it working the safe thing to do, in 11g, is to check the outline section of the actual execution plan to see if you’ve missed any important hints and then, if you can’t change the production code, attach the SQL Baseline from your hinted code to the SQL text from the original. (See – for example: http://jonathanlewis.wordpress.com/2011/01/12/fake-baselines/ )
It’s hard to create a full set of hints by hand – and I often see hinted SQL in production systems where the plan that appears happens to be the right one but it’s not the only plan that could be derived from the hints. So my 11g mantra for hinting is this: “if you can hint it, baseline it”.
Patching an Exadata Compute Node
So where does someone start when they are new to exadata and need to patch to a newer release of the Software.
For the Compute Nodes Start here
Exadata YUM Repository Population, One-Time Setup Configuration and YUM upgrades [ID 1473002.1]
This note walks you thru either setting up a direct connection to ULN and building a repository or using an ISO image that you can down for setting up the rpeository. Best Practice would be to setup a repository external to the Exadata and then add the repo info in the Exadata compute nodes. Once the repository is created and updated or ISO downloaded. you will need to create
/etc/yum.repos.d/Exadata-computenode.repo [exadata_dbserver_11.2_x86_64_latest] name=Oracle Exadata DB server 11.2 Linux $releasever - $basearch - latest baseurl=http:///yum/unknown/EXADATA/dbserver/11.2/latest/x86_64/ gpgcheck=1 enabled=0This needs to be added to all Exadata Compute Nodes . then ensure all repositories are disabled to avoid any accidents
sed -i 's/^[\t ]*enabled[\t ]*=[\t ]*1/enabled=0/g' /etc/yum.repos.d/*Download and stage patch patch 13741363 in a software directory of each node This will have the helper scripts needed . Always make sure to get the updated versions. You will need to disable and stop the crs on the node you are patching as root and then perform a server backup .
$GRID_HOME/bin/crsctl disable crs $GRID_HOME/bin/crsctl stop crs -f /13741363//dbserver_backup.shThis will providecreate a backup and results similar to below will show up.
INFO] Unmount snapshot partition /mnt_snap [INFO] Remove snapshot partition /dev/VGExaDb/LVDbSys1Snap Logical volume "LVDbSys1Snap" successfully removed [INFO] Save partition table of /dev/sda in /mnt_spare/part_table_backup.txt [INFO] Save lvm info in /mnt_spare/lvm_info.txt [INFO] Unmount spare root partition /mnt_spare [INFO] Backup of root /dev/VGExaDb/LVDbSys1 and boot partitions is done successfully [INFO] Backup partition is /dev/VGExaDb/LVDbSys2 [INFO] /boot area back up named boot_backup.tbz (tar.bz2 format) is on the /dev/VGExaDb/LVDbSys2 partition. [INFO] No other partitions were backed up. You may manually prepare back up for other partitions.Once The backup is complete you can proceed with the update
yum --enablerepo=exadata_dbserver_11.2_x86_64_latest repolist // thisis the official channel for all updates yum --enablerepo=exadata_dbserver_11.2_x86_64_latest updateThis will Download the appropriate rpm's and update the compute and reboot. The process can take between 10-30 mins . Once the node is up the Clusterware will not come up. Validate the image using imageinfo
[root@exa]# imageinfo Kernel version: 2.6.32-400.21.1.el5uek #1 SMP Wed Feb 20 01:35:01 PST 2013 x86_64 Image version: 11.2.3.2.1.130302 Image activated: 2013-05-27 14:41:45 -0500 Image status: success System partition on device: /dev/mapper/VGExaDb-LVDbSys1This confirms that the compute node has been upgraded to 11.2.3.2.1 Unlock crs as root
$GRID_HOME/crs/install/rootcrs.pl -unlock su - oracle .oraenv --select oracle database to set home relink all make -C $ORACLE_HOME/rdbms/lib -f ins_rdbms.mk ipc_rds ioracle su root $GRID_HOME/crs/install/rootcrs.pl -patch $GRID_HOME/bin/crsctl enable crsThis concludes a compute node patch application. Rinse and repeat for all compute nodes 8 in X2-8
Now if you have read thru all this you will kind of see how many manual steps are involved. Fortunately Oracle Just Released a utility ot automate all these Tasks for you. Rene Kundersma of Oracle Talks about this new utility Call dbnodeUpdate.sh in his Blog Post Here
Andy Colvin has published on his Blog his take on these Scripts and a demo Here
The Scope of the Bottleneck Course Problem
Phil and I pay attention to what Bob Samuels says about California higher education for a few reasons. First, as a faculty member at UCLA, he sees the system from the inside. Second, as President of the University Council of the AFT, he is a good source for the union’s perspective on issues. And finally, as somebody who has spent significant time studying the financial structure of California public higher education in detail, he has data and insights that beyond the usual anecdotal observations by individual faculty members. (I look forward to reading his book when it comes out this summer.)
So with all that as background, his comments on the scope of the bottleneck course problem are worth reading:
In my interviews with students, I have found that the biggest reasons for a delay in graduation is that students switch majors, they fail out of courses, they cannot get required courses, they do not qualify for their intended majors, they have to work to pay for their living expenses, they do not think there are any jobs for them after graduation, they pursue double majors, they do not receive adequate advising, they have medical problems and personal issues. Students also complain about the number of requirements for certain majors and their dislike of large lecture classes. A comprehensive survey of the UC system would help to determine what is really happening on a local level.
Another important aspect of this problem is the question of how much money individual campuses dedicate to undergraduate instruction. UCOP has reported on the increase in classes and the decrease in faculty relative to the number of students, but it is still unclear what has caused these changes. After all, during the last five years, while the state did reduce the UC budget by $1 billion, total tuition revenue went up by over $1.2 billion. It would seem that as students pay more for their education, they would get more support and smaller classes instead of less support and larger classes, but as this blog has stressed, the university continues to use undergraduate funds to subsidize many other university functions.
The focus on time-to-graduation is important because, as Phil and I detailed in the portion of our position paper that I published earlier today, a delay in graduation is costly to students and taxpayers alike. As Bob points out, we don’t have a lot of clean data telling us exactly how much of the delay in aggregate graduation time is due factors that colleges and universities can control, like access to bottleneck courses or better student advising on what courses they should be taking, and how much of it is due to factors in the students’ lives that are external to the school itself. This is important information to have, both to give us a sense of where the state should be focusing its efforts and in terms of monitoring the success of those efforts. Furthermore, at least some of the data can be gathered relatively quickly and easily—for example, through student surveys. While Phil and I do believe there is enough evidence that bottleneck courses are a problem to merit increased attention and funding, we also believe that getting more hard data quickly enough to influence the policy that is currently being shaped should be a high priority.
The financial aspects that Bob highlights in the second quoted paragraph are important too. Our position all along has been that there are a variety of ways to solve the bottleneck course problem and that technology is not a silver bullet. While we take no position on the specifics of Bob’s math, it is certainly legitimate to ask whether budget money that is currently being applied to other priorities should be redirected to opening more course sections of bottleneck courses.
The post The Scope of the Bottleneck Course Problem appeared first on e-Literate.
Right to Educational Access Paper, Part I
Phil and I will be co-hosting a CrowdHall event to answer any questions people might have about our position paper on California’s bottleneck course problem. As part of that, we will be serializing the report here in the blog in the hopes of stimulating discussion. In this first installment, we have the introduction to the paper and a description of the current initiatives of the three California systems from the perspective of the bottleneck course problem.
IntroductionWhen the Master Plan was adopted in California starting in 1960, the basic premise was to guarantee students a place within one of the three public systems based on their high school record. It was assumed that by having a place in a public institution, the student would have access to needed courses.1
For various reasons, this assumption is no longer valid.
Both the Governor and the California State Senate have identified the problem of bottleneck courses as a serious problem that harms both students in the California public college and university systems and California taxpayers.
A bottleneck course is one that students are required to take in order to graduate but are overenrolled or unavailable during a reasonable schedule, and therefore, not available to the students when they need the courses.
The consequences of such a bottleneck are varied and serious:
- Students who are not able to get into the course must stay in school an extra semester or more.
- Because financial aid often depends on a full course load, students will often take not just one extra class but a full semester of extra classes.
- Taking a full load of classes for an extra semester often means that students are prevented from entering the workforce and earning a full-time income for another semester.
- Students can be frustrated at the lack of course access and lack of progress and drop out.
- Tuition for in-state student is subsidized by the state; therefore, every student who stays an extra semester because of a bottleneck course problem costs the state taxpayers money.
- To the degree that the student’s college costs are further subsidized by Federal financial aid, college-specific scholarships, or other public sources of money, the student adds further cost to taxpayers.
- To the degree that the student’s college costs are covered by loans, the student goes further into debt.
- Students who do not graduate in a reasonable amount of time have a lower chance of graduating at all.
- Meanwhile, students who are slower to graduate means that there are fewer spaces available for students who want to get into college.
In short, bottleneck courses cost students money, drive them further into debt, and lower their chances of graduation. Bottleneck courses also force state and federal taxpayers to subsidize those students taking not one but multiple courses, most of which they do not need or want to take. And this problem prevents other students from being able to start their college education while doing so.
How big of an issue is the bottleneck course problem? While we do not have the data necessary to quantify it exactly, consider the following:
- As of 2010, 34.8% of students graduate California public baccalaureate colleges in four years, while 65.1% graduate within six years.
- As of 2010, only 25.3% of California community college students graduated within three years.
- Also in 2010, a survey of California community college students found that 20% reported difficulty in gaining access to required courses, while in 2012, as many as 80% of California community colleges reported wait lists for some classes.
- Programmatic funding per student in the 2012 California state budget is $5,447 for the community colleges, $12,729 for Cal State, and $24,909 for UC. The delay in student graduation adds to the state-subsidized costs of education.
- California colleges and universities currently have an average of 7,000 students on their waiting lists. It is clear that the state systems are not meeting student demand.
These data points strongly suggest that bottleneck courses pose a serious moral and fiscal challenge that is worthy of the attention of the Governor and State Legislature.
The Nature of the Problem and the Role of Online EducationAt its heart, the bottleneck course is the problem and online education presents an opportunity to address the problem – but it is not the only opportunity. As the bottleneck course is a resourcing problem, there are any number of non-technological solutions that could be adopted in addition to the application of online education. Several non-technological approaches to address the bottleneck course problem include increased state funding, re-allocation of faculty to focus more on lower-division courses, increased revenue from tuition increases, and broader articulation agreements to support concurrent enrollment and credit transfers.
That said, both the Governor and the Legislature have expressed an interest in exploring the degree to which educational technology in general and online learning in particular can be employed as a tool to address the bottleneck course problem.
The intention of this paper is to make recommendations for educational technology-enabled solutions as viable options without dismissing other approaches. To the contrary, our view is that any statewide framework for a solution should provide a mandate for the student right to educational access and a set of tools to help meet the mandate, while still empowering individual colleges and universities, as well as individual faculty members, to solve the bottleneck course problems in the ways that best suit their local needs.
Scope of PaperWhile there are other potential benefits of online education – including expanding the number of students served and increasing revenue – we believe the state should focus on the bottleneck course problem first and ensure our public higher education systems serve matriculated students.
Educational initiatives should focus on the student, not the institution, and specifically on admitted students. Admitted students should have the right to get the lower-division courses they need, and if the school cannot provide the courses, there should be statewide access to either face-to-face or online courses to fill the same need.
This paper will focus on the application of state-driven online education initiatives to address the bottleneck course problem at the three public systems in California – California Community Colleges (CCC), California State University (CSU) and the University of California (UC).
Current Initiatives From Three SystemsCalifornia colleges and universities are no strangers to online education, at least at the individual campus level. While campus-based online education can be a valuable service for students, institutional collaboration across the state offers the greatest opportunity for addressing bottleneck courses.
While the following data points are based on distance education, note that approximately 9 out of 10 distance education courses are delivered online, via the Internet. These data points combine online courses offered to students off campus and on campus.
- Per the Chancellor’s Office Distance Education (DE) Fact Sheet, approximately 28% of CCC students take at least one distance education course and 18% of all CCC courses are offered by distance education. This equates to roughly 41,000 DE course sessions within a calendar year. Of the three systems, CCC has the greatest usage of online education at the campus level.
- Per the Katz and Associates study “Distance and Online Education in the CSU“, approximately 9% of all CSU for-credit courses are offered as distance education (combining full-time students with extended studies and continuing education). This includes 63 fully-online or hybrid programs (19 baccalaureate and 44 masters).
- Per the January 2013 Regents meeting, the ten UC campuses offer more than 2,500 online courses, but the vast majority are through extension programs for non-matriculated students. Approximately 114 online courses are offered for credit for matriculated undergraduate students, but of these, only 27 are available during the academic year.
Prior to 2010, all of the California efforts were based on campus or district-wide programs – there simply were not any online courses designed to be available outside of a home campus other than through the transfer process.
A key question to address, therefore, is: what online initiatives are the three systems (CCC, CSU, UC) providing and how do these initiatives address the challenge of bottleneck courses?
California Virtual CampusThe California Virtual Campus (CVC) was established in 1999 “to support development and delivery of online learning in California community colleges” at the individual college level. Over time, the mission of CVC has expanded to include system-wide products and services, and in 2009, the CVC mission further expanded to cover the CSU, UC and independent/private California colleges.
Today the online course portal – the CVC Catalog – forms the core of CVC’s mission, and it “serves as a clearinghouse for information about distance education programs and courses”. Prospective or current students can search for individual courses by keyword, college, subject area, and academic term.
There is no aggregation of data, however – the results are listed as specific courses offered by specific colleges or universities – and there is no direct link to the course within the campus student information system. The results include a summary description of the course and schedule as shown in figure 1 above. The links do not take you to the specific course, just to the registration page of the appropriate college, and there is no process to streamline or support concurrent enrollment or ability to transfer course credits between colleges.
Cal State Online
In 2011 the Technology Steering Committee (TSC), comprised of campus presidents and Chancellor’s Office staff, proposed the initiative that became CSU Online (since renamed Cal State Online). Cal State Online was operationally established later that year with the hiring of an executive director and the selection (in 2012) of Pearson as a services partner.
Based on the Sep 2012 board of trustees presentation, the mission of Cal State Online is to:
- Increase student access to CSU Programs;
- Facilitate success by leveraging technology;
- Centralize marketing and outreach efforts to make sure that students know about CSU-wide online options;
- Provide additional revenue for the campuses that can be used to support campus programs and priorities;
- Offer a central unit that powers outreach, marketing and technology support for online degree programs;
- Herald the University’s name, reputation and quality programming in places well beyond the reach of the traditional campuses;
- Redefine and greatly expand the University’s outreach and connection to its community;
- Centrally address the need for quality education online for students unable or unwilling to be in residence;
- Centralize and expand the University’s position as a leading provider of superior online programs; and
- Future proof the CSU.
The initial and current focus is to leverage perceived strengths of CSU, including:
- The 50+ fully online self-support programs that currently exist; and
- The undergraduate degree completion program options which are focused on returning students and welcoming back students with strong CSU campus connections.
For the Spring 2013 term Cal State Online provided initial support of two baccalaureate degree completion programs (where the student needs to transfer in with 60 credits and then complete the degree online) and five master’s level fully-online programs. Each program is offered and developed by a specific campus – Cal State Online plays the role of supporting the campus with appropriate services.
By Fall 2013, Cal State Online plans to have five baccalaureate degree completion programs and six master’s programs.
None of these courses are available for students outside the host campus program – they are intended for students entering a fully-online program at a specific campus.
Course fees are based on $500 per credit hour, leading to a cost of $6,000 per semester for students in a fully-online program.
UC OnlineUC Online (also known as UCOE for University of California Online Education) was created in 2010 with the goal of expanding access to UC courses and creating new revenue for the system. The idea was to offer courses with the same quality standards as applied on UC campuses to new students, addressing the enrollment and revenue gaps due to state funding decreases.
UC Online also seeks to increase online offerings by specific campuses, thus helping time-to-degree for students at a particular campus.
Prospective UC students can take UC Online classes, and if admitted to a UC campus, have the credits accepted by the campus. These students form the basis of the mission to expand enrollment and revenue.
UC Online sought to fund itself primarily through external grants, but those grants have not materialized, leading UC Online to take out a $6.9 million loan from the UC system. Further plans for funding are based on revenue from non-UC students, and these plans include a $4.3 million investment in marketing.
However, as of Spring 2013, UC Online offered 14 courses, with 11 non-UC students registered for a course. As described by the Chronicle of Higher Education in October 2012, UC Online “needs to attract at least 3,000 non-UC students this year [2012-2013] and add 1,000 more each year until it reaches 7,000 non-UC students to pay back its loan on time, said DoQuyen Tran-Taylor, project manager for UC Online.”
UC Online originally planned to offer 25 – 40 high-demand courses and allow UC students to take these for credit at their institution. Based on the current course catalog, there were only three courses listed for spring 2013 with seven courses proposed and awaiting faculty approval for future terms. Approximately 1,700 UC students have taken UC Online courses, primarily as offerings from their home campus.
According to the January 2013 Regents meeting, “21 additional UCOE supported courses are in development and 12 of their courses are the only online systemwide courses currently approved to be offered to all UC undergraduates”. This information is not reflected on the UC Online website and its upcoming courses page.
From the Regents meeting:
“The Academic Senate is slated to consider an inter-UC articulation process patterned after the system already in place for course articulation between UC campuses and the California Community Colleges. Such a system would leave approval of courses in the hands of the home campus faculty for major or GE requirements when students take them from other UC campuses and would generate a searchable database of pre-approved courses linked to major or GE requirements so that the current staff- and time-intensive approval process could be replaced with a more efficient system. This process could apply to any systemwide course, including campus-developed online courses and offerings from systemwide programs.
Finally, the infrastructure and processes needed to recruit, enroll, and support eligible non-UC students in for-credit UC courses have been developed by UCOE in partnership with Blackboard Services. The system is supported by UC Merced to provide enrollment and support services. Winter/spring 2013 will be the first major test of the marketability of approved systemwide courses to non-UC students. The infrastructure and processes developed for non-UC students provide the foundation for the systems and services needed to support UC student enrollment across campuses; e.g., the systemwide catalogue, cross-campus data transfers, and support services.”
These are noble goals, but the ability of UC Online to deliver is in question – particularly in terms of developing courses and cross-campus enrollment.
UC Online documents (official web site and discussion document for Regents’ meeting) call out the problem.
- Web site: “While UC students have the opportunity to enroll in any UC course offered by another campus through the simultaneous enrollment process, access through this procedure will likely be very limited for UC Online courses during 2012-13. We hope to have alternative methods for enrollment in UC Online courses originating from other UCs available by fall, 2013.”
- Regents meeting: “It is clear now that both the campuses and UCOE would benefit from an infusion of funding on a temporary basis to facilitate continued development. The cross-campus hub needs to be developed, and there is currently no budgeted fund source.”
Course fees range from $1,400 – $2,100 per course.
SummaryAs currently designed, CVC and Cal State Online do not address the problem of bottleneck courses, while UC Online has yet to prove that it can hit its planned targets and become self-sustaining. In sum, initiatives at all three systems fall short of solving the access problem for bottleck courses.
- California Virtual Campus (CVC) is the statewide initiative originally formed to serve the CCC system. This initiative makes it easier for a student to find individual online courses at each campus, but the portal merely gives visibility across systems, it does not provide for the aggregation of course offerings or a centralized registration system . The only route for a student to benefit from the discovery of an online course at a different campus is through the transfer process.
- Cal State Online was formed by CSU, and targets full-online degree completion programs at the baccalaureate level and fully-online master’s programs, for students who cannot or do not desire to attend classes on campus. There is no expressed intention from Cal State Online, based on official documents, to allow admitted CSU students to take these courses unless the students enter a fully-online program.
- UC Online was formed by UC, and is the only systemwide initiative designed to allow students to take online courses offered from another campus and help shorten time-to-degree, at least based on program plans. The problem with this initiative is that it has failed to meet its targets, and there are serious questions about the ability to become self-sustaining and deliver on the mission.
The state of California needs to be very targeted in its investments into online education to ensure that these investments address the problem of bottleneck courses.
- As described in http://ucfuture.universityofcalifornia.edu/documents/ca_masterplan_summary.pdf, the Master Plan created the framework of the three systems with interdependent missions, and established the principle of universal access based on high school graduation rankings.
The post Right to Educational Access Paper, Part I appeared first on e-Literate.
Reading the Tea Leaves
Anthony (@anthonyslai) has been on a roll lately, and his latest post reminded me to put words behind a hunch I have.
When the Chromebook Pixel was announced, a lot of head-scratching ensued. What’s the point of a fantastic piece of expensive, high-end hardware that runs an internet-tethered OS like Chrome OS? After all, Chromebooks have settled into a niche at the bottom of the device market, one where netbooks were once aimed.
Then, I heard that Google was giving Pixels to its employees. Obviously most Google’s employees are developers, and in order to do their work, they’d have to do development.
Prior to I/O, I fully expected that Google would announce a cloud-based IDE, which would explain why employees were given Pixels.
No such announcement came.
However, every I/O attendee received a Chromebook Pixel, which only strengthens my hunch that a cloud-based IDE is coming.
There were several announcements at I/O that contributed to this line of thinking.
First, Android Studio, a custom IDE for Android development based on IntelliJ IDEA, which will include hooks for Cloud Messaging and other Google services. Speaking of Google services, the Play Services APIs and Hangouts were also announced.
The former adds several features that are self-contained, allowing developers to upgrade apps without requiring newer versions of Android. The latter consolidates several messaging products and effectively removes support for XMPP in favor of the Hangouts API.
Google has been slowly backing away from open standards recently in favor of their own APIs, e.g. lost in the most recent Spring-cleaning announcement, which included Google Reader, was an announcement that the CalDAV API would be limited to a whitelist in favor of the Calendar API. Details are scant, but the loss of CalDAV support for calendar applications like iCal is kind of a big deal.
I/O this year focused squarely on developers, not on product. No new Android version was unveiled, but rather, existing Android apps, like Maps, Plus, Play Services and Hangouts, received major, version-independent updates. This points to alleviating a huge developer concern, fragmentation.
So, why give attendees an expensive paperweight in the Pixel?
The other shoe has to be a browser-based IDE that leverages the computing power of the Pixel with Google’s network infrastructure, while providing all Google’s APIs and services in one package, the ultimate ecosystem package for Android and possibly Chrome OS developers.
This isn’t all that crazy, given that services like App Engine already use Google’s infrastructure.
Should this IDE materialize, the key here is distributing the compilation workload between the machine and server, while minimizing the bandwidth consumption.
But if you happen to live in a Google Fiber city, you could develop on a Pixel and use Google’s bandwidth and server infrastructure, allowing Google to control even the transport of your code.
So, Google could have all the bases covered, providing an unprecedented development experience.
Anyway, I’m not a developer, but I play one sometimes. I’ve run this idea past a few developers, and it seems plausible, even a little bit desirable.
What do you think?
Find the comments.Possibly Related Posts:
- The Week in Google
- A Wake for Google Reader
- Another Go with the Chromebook
- Chrome Books Are Not for You
- App Inventor for Android, Good or Bad?
Creating a Physical Standby with RMAN Active Duplicate in 11.2.0.3
This topic has been written about by other DBAs, but I wanted it to be available in Pythian’s blog. When I searched for how this was done, other sites were either not very clear on the steps they did, assumed that you already know what you are doing, or they went through the steps too quickly.
So to continue, and before going into any of the steps in creating your physical standby, if this is your first time building a Standby, there is some terminology you need to know beforehand, it will help you your dataguard environment better and what is being done, instead of simply copying a number of steps. These are just the definitions in Oracle’s documentation, but they will help you avoid the arduous search.
- LOG_ARCHIVE_DEST_n .- It controls different aspects of how redo transport services transfer redo data from primary database destination to a standby.
This parameter has several attributes that are needed to setup your Dataguard environment, I will only mention the critical ones:- ASYNC .-This is the default, the redo data generated by a transaction need not have been received at a destination which has this attribute before that transaction can commit.
or - SYNC .-The redo data generated by a transaction must have been received by every enabled destination which has this attribute before that transaction can commit.
- AFFIRM and NOAFFIRM .- Control whether a redo transport destination acknowledges received redo data before or after writing it to the standby redo log. The default isNOAFFIRM.
- DB_UNIQUE_NAME .- Specifies a unique name for the database at this destination. You must specify a name; there is no default value
- VALID_FOR .-Identifies when redo transport services can transmit redo data to destinations based on the following factors:
- redo_log_type .-whether online redo log files, standby redo log files, or both are currently being archived on the database at this destination
- database_role .-whether the database is currently running in the primary or the standby role.
- ASYNC .-This is the default, the redo data generated by a transaction need not have been received at a destination which has this attribute before that transaction can commit.
- FAL_SERVER .-Specifies the FAL (fetch archive log) server for a standby database. The value is an Oracle Net service name.
- FAL_CLIENT .-Specifies the FAL (fetch archive log) client name that is used by the FAL service, configured through the FAL_SERVER initialization parameter, to refer to the FAL client.
The value is an Oracle Net service name, which is assumed to be configured properly on the FAL server system to point to the FAL client (standby database). - LOG_ARCHIVE_CONFIG .- Enables or disables the sending of redo logs to remote destinations and the receipt of remote redo logs.
This parameter has several attributes, the most important for this exercise is below- DG_CONFIG .- Specifies a list of up to 30 unique database names (defined with the DB_UNIQUE_NAME initialization parameter) for all of the databases in the Data Guard configuration.
Now that we have the definitions out of the way (which you can find at Oracle 11.2. Documentation) we will continue with the setup of our Physical Standby.
For this exercise I have the following :
- Primary : testgg1 Server : dlabvm13
- Standby : testgg2 Server : dlabvm14
The first thing that we need to do, is find the location of where the Redo Logs, Datafiles reside in the Primary and where will they reside in the Standby so that you can set your parameters LOG_FILE_NAME_CONVERT and DB_FILE_NAME_CONVERT properly. Make sure that these directories have the necessary space to hold the Primary database. If you don’t have this space, then do not continue.
Next, assure that you are in archivelog mode and that force logging is enabled in your primary.
If your database is not in archive log mode, do the following:
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 534462464 bytes Fixed Size 2230072 bytes Variable Size 163580104 bytes Database Buffers 364904448 bytes Redo Buffers 3747840 bytes Database mounted. SQL> alter database archivelog; Database altered. SQL> alter database open; Database altered. SQL> alter database force logging; Database altered. SQL> select log_mode,force_logging from v$database; LOG_MODE FOR ------------ --- ARCHIVELOG YES
Now that we are running in archive log mode and force logging is set for the primary, make sure that the Listener/ Tns entries are set correctly and that you can tnsping them both from the primary/standby.
For more details on how to set them up, go to Kamran’s blog entry ( Step 2 ) .
The result in both the primary and standby servers should be similar to below
oracle@dlabvm13.dlab.pythian.com [testgg1] /home/oracle/bin oracle $ tnsping testgg1 TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 14-MAY-2013 09:44:34 Copyright (c) 1997, 2011, Oracle. All rights reserved. Used parameter files: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dlabvm13.dlab.pythian.com)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = testgg1))) OK (0 msec) oracle@dlabvm13.dlab.pythian.com [testgg1] /home/oracle/bin oracle $ tnsping testgg2 TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 14-MAY-2013 09:44:40 Copyright (c) 1997, 2011, Oracle. All rights reserved. Used parameter files: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dlabvm14.dlab.pythian.com)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = testgg2))) OK (10 msec)
Then create and replicate the password file from the primary $ORACLE_HOME/dbs and rename it to the standby database name. The password file name must match the ORACLE_SID used at the standby site, not the DB_NAME.
oracle@dlabvm13.dlab.pythian.com [testgg1] /u01/app/oracle/product/11.2.0/dbhome_1/dbs oracle $ orapwd file=orapwtestgg1 password=test entries=5 oracle@dlabvm13.dlab.pythian.com [testgg1] /u01/app/oracle/product/11.2.0/dbhome_1/dbs oracle $ scp orapwtestgg1 dlabvm14:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwtestgg2 orapwtestgg1 100% 2048 2.0KB/s 00:00
Now that the password file has been created, you can setup the init file for the Primary Database. As you can see at the end, it’s the parameters we explained at the beginning of this entry.
SQL> !cat dg.ora *.audit_file_dest='/u01/app/oracle/oradata/dump/testgg1/adump' *.audit_trail='db' *.compatible='11.2.0' *.control_files='/u01/app/oracle/oradata/testgg1/control/control01.ctl','/u01/app/oracle/oradata/testgg1/control/control02.ctl' *.db_block_size=8192 *.db_cache_size=128M *.db_domain='' *.db_name='testgg1' *.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area' *.db_recovery_file_dest_size=2G *.db_unique_name='testgg1' *.diagnostic_dest='/u01/app/oracle/oradata/dump/testgg1' *.log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=testgg1' *.log_archive_dest_2='SERVICE=testgg2 ASYNC valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=testgg2' *.log_archive_dest_state_1='enable' *.log_archive_dest_state_2='enable' *.open_cursors=300 *.pga_aggregate_target=128M *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=512M testgg11.UNDO_TABLESPACE='UNDOTBS1' FAL_SERVER=testgg2; FAL_CLIENT=testgg1; DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/','/u01/app/oracle/oradata/testgg1/TESTGG1/datafile/' LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/testgg2/TESTGG2/onlinelog/','/u01/app/oracle/oradata/testgg1/TESTGG1/onlinelog/' LOG_ARCHIVE_CONFIG='DG_CONFIG=(testgg1,testgg2)'
One of the coolest things about this method, is that almost all of the work we will do will be in the Primary database server. The only thing you have to do in the Standby Server is create the locations of where my diagnostic files/redo/datafiles/control files will reside and verify the connectivity between the Primary and the Standby and just start the Standby Instance, which is our next step.
The next step is to set the ORACLE_SID,ORACLE_HOME and ORACLE_BASE for the Standby Instance and open it with the minimal options ever:
oracle@dlabvm14.dlab.pythian.com [testgg2] /home/oracle/bin oracle $ export ORACLE_HOME="/u01/app/oracle/product/11.2.0/dbhome_1" oracle@dlabvm14.dlab.pythian.com [testgg2] /home/oracle/bin oracle $ export ORACLE_BASE=/u01/app/oracle oracle@dlabvm14.dlab.pythian.com [testgg2] /home/oracle/bin oracle $ export ORACLE_SID=testgg2 oracle@dlabvm14.dlab.pythian.com [testgg2] /home/oracle/bin oracle $ cat dg.ora DB_NAME=testgg1 DB_UNIQUE_NAME=testgg2 DB_BLOCK_SIZE=8192 oracle@dlabvm14.dlab.pythian.com [testgg2] /home/oracle/bin oracle $ sqlplus SQL*Plus: Release 11.2.0.3.0 Production on Tue May 14 09:53:30 2013 Copyright (c) 1982, 2011, Oracle. All rights reserved. Enter user-name: /as sysdba Connected to an idle instance. SQL> startup nomount pfile='/home/oracle/bin/dg.ora'; ORACLE instance started. Total System Global Area 238034944 bytes Fixed Size 2227136 bytes Variable Size 180356160 bytes Database Buffers 50331648 bytes Redo Buffers 5120000 bytes SQL> exit Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
Now let’s get back to the Primary database server, where the next thing to do is add the standby logs. In my case I created two with the same size as the Online Redo Logs that I have in my Primary.
SQL> select instance_name,host_name from v$instance; INSTANCE_NAME HOST_NAME ---------------- ---------------------------------------------------------------- testgg1 dlabvm13.dlab.pythian.com SQL> select name from v$database; NAME --------- TESTGG1 SQL> select GROUP#,THREAD#,MEMBERS,BYTES FROM V$LOG; GROUP# THREAD# MEMBERS BYTES ---------- ---------- ---------- ---------- 1 1 1 104857600 2 1 1 104857600 SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 104857600; Database altered. SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 104857600; Database altered. SQL> SELECT GROUP#, BYTES FROM V$STANDBY_LOG; GROUP# BYTES ---------- ---------- 3 104857600 4 104857600
Once we have created the Standby Logs in my Primary Database, we will create the following RMAN run commands and also the changes to the standby’s spfile in this RMAN block.
oracle@dlabvm13.dlab.pythian.com [testgg1] /home/oracle/bin
oracle $ cat duplicate.rmn
run {
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate channel prmy3 type disk;
allocate channel prmy4 type disk;
allocate auxiliary channel stby type disk;
duplicate target database for standby from active database
spfile
parameter_value_convert 'testgg1','testgg2'
set db_unique_name='testgg2'
set db_file_name_convert='/u01/app/oracle/oradata/testgg1/TESTGG1/datafile/','/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/'
set log_file_name_convert='/u01/app/oracle/oradata/testgg1/TESTGG1/onlinelog/','/u01/app/oracle/oradata/testgg2/TESTGG2/onlinelog/'
set control_files='/u01/app/oracle/oradata/testgg2/control/control01.ctl','/u01/app/oracle/oradata/testgg2/control/control02.ctl'
set log_archive_max_processes='10'
set fal_client='testgg2'
set fal_server='testgg1'
set standby_file_management='AUTO'
set log_archive_config='dg_config=(testgg1,testgg2)'
set log_archive_dest_2='service=testgg1 ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=testgg1'
;
}
Now that the the RMAN command file hs been created, you just need to run this command in the target database, which is the Primary Database , connecting to the Standby as the auxiliary.
oracle@dlabvm13.dlab.pythian.com [testgg1] /home/oracle/bin
oracle $ rman target sys/test@testgg1 auxiliary sys/test@testgg2
Recovery Manager: Release 11.2.0.3.0 - Production on Thu May 16 08:42:46 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: TESTGG1 (DBID=839852638)
connected to auxiliary database: TESTGG1 (not mounted)
RMAN> @duplicate.rmn
RMAN>
RMAN> run {
2> allocate channel prmy1 type disk;
3> allocate channel prmy2 type disk;
4> allocate channel prmy3 type disk;
5> allocate channel prmy4 type disk;
6> allocate auxiliary channel stby type disk;
7> duplicate target database for standby from active database
8> spfile
9> parameter_value_convert 'testgg1','testgg2'
10> set db_unique_name='testgg2'
11> set db_file_name_convert='/u01/app/oracle/oradata/testgg1/TESTGG1/datafile/','/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/'
12> set log_file_name_convert='/u01/app/oracle/oradata/testgg1/TESTGG1/onlinelog/','/u01/app/oracle/oradata/testgg2/TESTGG2/onlinelog/'
13> set control_files='/u01/app/oracle/oradata/testgg2/control/control01.ctl','/u01/app/oracle/oradata/testgg2/control/control02.ctl'
14> set log_archive_max_processes='10'
15> set fal_client='testgg2'
16> set fal_server='testgg1'
17> set standby_file_management='AUTO'
18> set log_archive_config='dg_config=(testgg1,testgg2)'
19> set log_archive_dest_2='service=testgg1 ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=testgg1'
20> ;
21> }
using target database control file instead of recovery catalog
allocated channel: prmy1
channel prmy1: SID=32 device type=DISK
allocated channel: prmy2
channel prmy2: SID=33 device type=DISK
allocated channel: prmy3
channel prmy3: SID=34 device type=DISK
allocated channel: prmy4
channel prmy4: SID=35 device type=DISK
allocated channel: stby
channel stby: SID=19 device type=DISK
Starting Duplicate Db at 16-MAY-13
contents of Memory Script:
{
backup as copy reuse
targetfile '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwtestgg1' auxiliary format
'/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwtestgg2' targetfile
'/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfiletestgg1.ora' auxiliary format
'/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfiletestgg2.ora' ;
sql clone "alter system set spfile= ''/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfiletestgg2.ora''";
}
executing Memory Script
Starting backup at 16-MAY-13
Finished backup at 16-MAY-13
sql statement: alter system set spfile= ''/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfiletestgg2.ora''
contents of Memory Script:
{
sql clone "alter system set audit_file_dest =
''/u01/app/oracle/oradata/dump/testgg2/adump'' comment=
'''' scope=spfile";
sql clone "alter system set diagnostic_dest =
''/u01/app/oracle/oradata/dump/testgg2'' comment=
'''' scope=spfile";
sql clone "alter system set log_archive_dest_1 =
''location=use_db_recovery_file_dest valid_for=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=testgg2'' comment=
'''' scope=spfile";
sql clone "alter system set db_unique_name =
''testgg2'' comment=
'''' scope=spfile";
sql clone "alter system set db_file_name_convert =
''/u01/app/oracle/oradata/testgg1/TESTGG1/datafile/'', ''/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/'' comment=
'''' scope=spfile";
sql clone "alter system set log_file_name_convert =
''/u01/app/oracle/oradata/testgg1/TESTGG1/onlinelog/'', ''/u01/app/oracle/oradata/testgg2/TESTGG2/onlinelog/'' comment=
'''' scope=spfile";
sql clone "alter system set control_files =
''/u01/app/oracle/oradata/testgg2/control/control01.ctl'', ''/u01/app/oracle/oradata/testgg2/control/control02.ctl'' comment=
'''' scope=spfile";
sql clone "alter system set log_archive_max_processes =
10 comment=
'''' scope=spfile";
sql clone "alter system set fal_client =
''testgg2'' comment=
'''' scope=spfile";
sql clone "alter system set fal_server =
''testgg1'' comment=
'''' scope=spfile";
sql clone "alter system set standby_file_management =
''AUTO'' comment=
'''' scope=spfile";
sql clone "alter system set log_archive_config =
''dg_config=(testgg1,testgg2)'' comment=
'''' scope=spfile";
sql clone "alter system set log_archive_dest_2 =
''service=testgg1 ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=testgg1'' comment=
'''' scope=spfile";
shutdown clone immediate;
startup clone nomount;
}
executing Memory Script
sql statement: alter system set audit_file_dest = ''/u01/app/oracle/oradata/dump/testgg2/adump'' comment= '''' scope=spfile
sql statement: alter system set diagnostic_dest = ''/u01/app/oracle/oradata/dump/testgg2'' comment= '''' scope=spfile
sql statement: alter system set log_archive_dest_1 = ''location=use_db_recovery_file_dest valid_for=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=testgg2'' comment= '''' scope=spfile
sql statement: alter system set db_unique_name = ''testgg2'' comment= '''' scope=spfile
sql statement: alter system set db_file_name_convert = ''/u01/app/oracle/oradata/testgg1/TESTGG1/datafile/'', ''/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/'' comment= '''' scope=spfile
sql statement: alter system set log_file_name_convert = ''/u01/app/oracle/oradata/testgg1/TESTGG1/onlinelog/'', ''/u01/app/oracle/oradata/testgg2/TESTGG2/onlinelog/'' comment= '''' scope=spfile
sql statement: alter system set control_files = ''/u01/app/oracle/oradata/testgg2/control/control01.ctl'', ''/u01/app/oracle/oradata/testgg2/control/control02.ctl'' comment= '''' scope=spfile
sql statement: alter system set log_archive_max_processes = 10 comment= '''' scope=spfile
sql statement: alter system set fal_client = ''testgg2'' comment= '''' scope=spfile
sql statement: alter system set fal_server = ''testgg1'' comment= '''' scope=spfile
sql statement: alter system set standby_file_management = ''AUTO'' comment= '''' scope=spfile
sql statement: alter system set log_archive_config = ''dg_config=(testgg1,testgg2)'' comment= '''' scope=spfile
sql statement: alter system set log_archive_dest_2 = ''service=testgg1 ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=testgg1'' comment= '''' scope=spfile
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area 534462464 bytes
Fixed Size 2230072 bytes
Variable Size 163580104 bytes
Database Buffers 364904448 bytes
Redo Buffers 3747840 bytes
allocated channel: stby
channel stby: SID=18 device type=DISK
contents of Memory Script:
{
backup as copy current controlfile for standby auxiliary format '/u01/app/oracle/oradata/testgg2/control/control01.ctl';
restore clone controlfile to '/u01/app/oracle/oradata/testgg2/control/control02.ctl' from
'/u01/app/oracle/oradata/testgg2/control/control01.ctl';
}
executing Memory Script
Starting backup at 16-MAY-13
channel prmy1: starting datafile copy
copying standby control file
output file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_testgg1.f tag=TAG20130516T084319 RECID=7 STAMP=815561001
channel prmy1: datafile copy complete, elapsed time: 00:00:07
Finished backup at 16-MAY-13
Starting restore at 16-MAY-13
channel stby: copied control file copy
Finished restore at 16-MAY-13
contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script
sql statement: alter database mount standby database
contents of Memory Script:
{
set newname for tempfile 1 to
"/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_temp_8qbok7fk_.tmp";
switch clone tempfile all;
set newname for datafile 1 to
"/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_system_8ocl7bho_.dbf";
set newname for datafile 2 to
"/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_sysaux_8ocl7k6n_.dbf";
set newname for datafile 3 to
"/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_sys_undo_8ocl7q6c_.dbf";
set newname for datafile 4 to
"/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_users_8qbolh3g_.dbf";
backup as copy reuse
datafile 1 auxiliary format
"/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_system_8ocl7bho_.dbf" datafile
2 auxiliary format
"/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_sysaux_8ocl7k6n_.dbf" datafile
3 auxiliary format
"/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_sys_undo_8ocl7q6c_.dbf" datafile
4 auxiliary format
"/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_users_8qbolh3g_.dbf" ;
sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_temp_8qbok7fk_.tmp in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 16-MAY-13
channel prmy1: starting datafile copy
input datafile file number=00001 name=/u01/app/oracle/oradata/testgg1/TESTGG1/datafile/o1_mf_system_8ocl7bho_.dbf
channel prmy2: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/oradata/testgg1/TESTGG1/datafile/o1_mf_sysaux_8ocl7k6n_.dbf
channel prmy3: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/testgg1/TESTGG1/datafile/o1_mf_sys_undo_8ocl7q6c_.dbf
channel prmy4: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/testgg1/TESTGG1/datafile/o1_mf_users_8qbolh3g_.dbf
output file name=/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_sys_undo_8ocl7q6c_.dbf tag=TAG20130516T084335
channel prmy3: datafile copy complete, elapsed time: 00:00:45
output file name=/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_users_8qbolh3g_.dbf tag=TAG20130516T084335
channel prmy4: datafile copy complete, elapsed time: 00:00:55
output file name=/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_system_8ocl7bho_.dbf tag=TAG20130516T084335
channel prmy1: datafile copy complete, elapsed time: 00:01:05
output file name=/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_sysaux_8ocl7k6n_.dbf tag=TAG20130516T084335
channel prmy2: datafile copy complete, elapsed time: 00:01:05
Finished backup at 16-MAY-13
sql statement: alter system archive log current
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy RECID=7 STAMP=815561103 file name=/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_system_8ocl7bho_.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=8 STAMP=815561104 file name=/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_sysaux_8ocl7k6n_.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=9 STAMP=815561104 file name=/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_sys_undo_8ocl7q6c_.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=10 STAMP=815561104 file name=/u01/app/oracle/oradata/testgg2/TESTGG2/datafile/o1_mf_users_8qbolh3g_.dbf
Finished Duplicate Db at 16-MAY-13
released channel: prmy1
released channel: prmy2
released channel: prmy3
released channel: prmy4
released channel: stby
RMAN> **end-of-file**
RMAN> exit
As you can see that was easy as pie. Now I just to start the recovery process in the Standby Database, in my case I used Active Dataguard so that I can show you that it is actually working, but just beware that this is a Licensable Option.
SQL> alter database open; Database altered. SQL> alter database recover managed standby database disconnect; Database altered. SQL> select protection_mode,protection_level,database_role,name from v$database; PROTECTION_MODE PROTECTION_LEVEL DATABASE_ROLE NAME -------------------- -------------------- ---------------- --------- MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE PHYSICAL STANDBY TESTGG1 SQL> select instance_name,host_name from v$instance; INSTANCE_NAME HOST_NAME ---------------- ---------------------------------------------------------------- testgg2 dlabvm14.dlab.pythian.com SQL> select * from sender.test; select * from sender.test * ERROR at line 1: ORA-00942: table or view does not exist
Now I go back to the primary, and create a table called test in the schema sender, and as you can see above this table doesn’t exist in the Standby database
SQL> select instance_name,host_name from v$instance; INSTANCE_NAME HOST_NAME ---------------- ---------------------------------------------------------------- testgg1 dlabvm13.dlab.pythian.com SQL> select protection_mode,protection_level,database_role,name from v$database; PROTECTION_MODE PROTECTION_LEVEL DATABASE_ROLE NAME -------------------- -------------------- ---------------- --------- MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE PRIMARY TESTGG1 SQL> create table sender.test(id number); Table created. SQL> insert into sender.test values(1); 1 row created. SQL> commit; Commit complete. SQL> alter system switch logfile; System altered.
I go back to the Standby and we can see that we have our table that we just created.
SQL> select protection_mode,protection_level,database_role,name from v$database; PROTECTION_MODE PROTECTION_LEVEL DATABASE_ROLE NAME -------------------- -------------------- ---------------- --------- MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE PHYSICAL STANDBY TESTGG1 SQL> select instance_name,host_name from v$instance; INSTANCE_NAME HOST_NAME ---------------- ---------------------------------------------------------------- testgg2 dlabvm14.dlab.pythian.com SQL> select * from sender.test; ID ---------- 1
There are various way to see if this is working or not. You can use in the following query to see what was the last archive received/applied in the Standby Database.
SQL> SELECT 'Last Applied : ' Logs, TO_CHAR(next_time,'DD-MON-YY:HH24:MI:SS') TIME,thread#,sequence# FROM v$archived_log WHERE sequence# = (SELECT MAX(sequence#) FROM v$archived_log WHERE applied='YES' ) UNION SELECT 'Last Received : ' Logs, TO_CHAR(next_time,'DD-MON-YY:HH24:MI:SS') TIME,thread#,sequence# FROM v$archived_log WHERE sequence# = (SELECT MAX(sequence#) FROM v$archived_log ); LOGS TIME THREAD# SEQUENCE# ---------------- ------------------ ---------- ---------- Last Applied : 16-MAY-13:11:42:52 1 65 Last Received : 16-MAY-13:11:42:52 1 65
While in the Primary Database, you can check what is the current sequence and what is the pending sequence to be applied
SQL> SELECT (SELECT name FROM V$DATABASE ) name, (SELECT MAX (sequence#) FROM v$archived_log WHERE dest_id = 1 ) Current_primary_seq, (SELECT MAX (sequence#) FROM v$archived_log WHERE TRUNC(next_time) > SYSDATE - 1 AND dest_id = 2 ) max_stby, (SELECT NVL ( (SELECT MAX (sequence#) - MIN (sequence#) FROM v$archived_log WHERE TRUNC(next_time) > SYSDATE - 1 AND dest_id = 2 AND applied = 'NO' ), 0) FROM DUAL ) "To be applied", ( (SELECT MAX (sequence#) FROM v$archived_log WHERE dest_id = 1 ) - (SELECT MAX (sequence#) FROM v$archived_log WHERE dest_id = 2 )) "To be Shipped" FROM DUAL; NAME CURRENT_PRIMARY_SEQ MAX_STBY To be applied To be Shipped --------- ------------------- ---------- ------------- ------------- TESTGG1 65 65 0 0
I hope this little guide helps you out when you are trying to build your Physical Standby from an Active Duplicate. As always, test anything that I have said or mentioned before trying it in a production environment.
Six months as Technical Evangelist at Couchbase
Expert Oralce RAC 12c - upcoming book

Table of contents
- Overview of Oracle RAC
- Clusterware Management and Troubleshooting
- RAC Operational Practices
- RAC New Features
- Storage and ASM Practices
- Application Design Issues
- Managing and Optimizing a Complex RAC Environment
- Backup and Recovery in RAC
- Network Practices in RAC
- RAC Database Optimization
- Locks and Deadlocks
- Parallel Query in RAC
- Clusterware and Database Upgrades
- Oracle RAC One Node
- Virtualized RAC - Setup DB Clouds - Part 1
- Virtualized RAC - Setup DB Clouds - Part 2
Hmm... Users Experience the Average SQL Elapsed Time
Oracle Database performance tuning and analysis has come a long way in the last 20 years. First there was the “just add more resources” approach and tuning the blatantly poor SQL. Then there was ratio analysis, followed by wait event analysis, time based analysis, and unit of work time based analysis. In addition to the performance diagnosis and analysis evolution, the Oracle Database as a product has changed, and architectures are more diverse. Yet with all this change, some things are in many ways timeless. They relate to complexity, basic mathematical statistics, efficiency, and doctrinal purity. Over the next few weeks, I'll post four different "myths." Last week I posted about increased complexity. This posting centers on a user's experience.
Myth #2The second myth is Users experience the average SQL elapsed time. Concurrency, multiple execution plans, different bind variables, and the current cache situation make the average elapsed time less relevant—and perhaps even misleading. Let me explain.
If I tell someone the average elapsed time for their key SQL statement is 10 seconds, 99.9% of the time they will picture in their minds a bell curve. They will think to themselves, “OK. This means that usually the statement runs for about 10 seconds, sometimes less and sometimes more.” Unless verified, my research clearly shows that there is likely to be a significant difference between the average and the typical elapsed time(s). This means we are missetting expectations and flat-out misleading users. Not the place we want to be!
It is very simple to calculate the average SQL statement elapsed time. Even a Statspack report will show you the total elapsed time and the total number of executions over the report interval. The average elapsed time is simply the total elapsed time divided by the total number of executions. So it’s very enticing to make a quick statement about the elapsed time using the average.
Now suppose this SQL statement has two execution plans: one typically completes in 2 seconds and the other completes in 18 seconds. Now also assume that they both get executed the same number of times (don’t count on this in your environment!). The average elapsed time would then be 10 seconds. Now I picture myself telling my client that I had discovered the key SQL statement and its average elapsed time is 10 seconds. The “2 seconds” group would think I’m making the situation look worse than it is so I can claim an amazing performance improvement. The “12 seconds” group would think I’m simply an idiot. Either way, I lose. So I needed a way to find out the truth.
What I learned through my research is that if the statement is important to the users and I care about not misleading them, I need to collect some data, calculate the statistics, and create a histogram. I even blogged about the problem here and and provided solutions here! My research clearly showed three reliable ways to collect elapsed times: Oracle tracing by SQL_ID, instrumenting application code, and sampling running SQL. I have created a low overhead tool called “SQL Sampler” to sample SQL statement elapsed times. You can download it for free from my website here. The moral of this story is Do not expect users to experience average elapsed times, and if appropriate, provide details about the typical elapsed times.
Thanks for reading!
Craig.
If you enjoy my blog, I suspect you'll get a lot out of my courses; Oracle Performance Firefighting, Advanced Oracle Performance Analysis, and my One-Day Oracle Performance Research Seminar. I teach these classes around the world multiple times each year. For the latest schedule, go to www.orapub.com . I also offer on-site training and consulting services.
P.S. If you want me to respond to a comment or you have a question, please feel free to email me directly at craig@orapub .com. Another option is to send an email to OraPub's general email address, which is currently orapub.general@comcast .net.

Oracle Social Network: Collaboration in the Cloud
“The biggest change over the past few years is social networking,” said Oracle CEO Larry Ellison. “Today, organizations want to connect their people, their applications, their processes and their customers. Oracle Social Network provides that; all the tools are integrated and employees can work from anywhere in the world with the devices best suited to their job.”
Oracle Social Network includes stream-based Conversations that consolidate IM, e-mail, applications, content, editing tools, and telephony into a single context. Unlike other collaboration tools that simply generate a lot of noise, Oracle Social Network enables Conversations that are context-based and tied to business activities and processes to help users collaborate more effectively.
We invite you to view this screencast as part of the New Business Imperative: Social, Mobile, Cloud Series to find out how Oracle Social Network can help your company collaborate more intelligently and effectively.
Big data projects require database optimization first
Recently, more enterprises have been eager to delve into big data to gain valuable insight that will eventually lead to a competitive advantage. However, a significant number of failed business intelligence (BI) projects have demonstrated that firms need to enter into these projects with the proper strategies, technologies and support from database experts.
Data Center Knowledge contributor Patrick Lastennet reported that big data is still largely in its early stages for many sectors. Now that companies are dealing with not only an increasing volume of information, but also an ever-expanding variety of data, analysis has become far more complicated than before. Lastennet revealed that extracting clusters of disparate databases together to analyze both structured and unstructured information can be challenging for firms that do not have the proper tools or knowledge. He stressed that companies need more powerful solutions to process big data because real-time insight is the key to performing accurate analysis and optimizing strategies.
Updating the framework
In order to better manage the volume, velocity and variety of big data, Lastennet argued that companies need to re-examine underlying infrastructure. Many firms, he explained, still rely on legacy systems for storing and managing data, but to handle the constant flow of information and leverage real-time operations, these enterprises will need to migrate to more robust systems that can support all big data needs. Lastennet noted that many businesses have deployed software-as-a-service (SaaS) applications to collect data through a remote service without the concern of overloading their existing infrastructure. While migrating from a legacy systems may be daunting, he stressed that the benefits, including enhanced real-time analysis, can far outweigh the required effort or possible risks. With the right data center facilities, he was adamant that any firm can drive innovation through big data initiatives.
In a report for InformationWeek, contributor Shankar Ranganathan asserted that one of the reasons many companies fail to see ROI quickly enough from big data projects is that when it comes to larger data warehouse implementations, it can take more than a year before users see any significant benefits. As a result, companies may need to seek dba services to ensure a faster, more seamless transition and avoid any obstacles that could hinder success.
There are endless opportunities that come with mining big data, but first, enterprises need to re-organize data assets for more accurate and higher-quality analytics.
RDX's business intelligence and big data experts assist customers in leveraging data contained in large data stores. For more information, please visit our Business Intelligence and Predictive Analytics pages or contact us.
Configuring SSL on OEID v3.0
Oracle Endeca Information Discovery (OEID) version 3.0 now supports secure connection over HTTP, something useful for when implementing Endeca in a production environment where its expected that all security risks been controlled. Sending requests and data over unsecured HTTP is generally considered one of the more higher-risk vulnerabilities, with the solution generally being to add SSL encryption to standard HTTP communications.
However, enabling SSL connections between different parts of the OEID package seems on the surface to be a bit tricky, since all communications with the Endeca Server are via web service calls; therefore, having the Endeca Server configured for SSL requires all other servers that connect to it to be updated and re-configured. In this blog post therefore I’m going to walk through a step-by-step guide on how to setup this feature, and how to ensure everything subsequently works correctly.
SSL configuration on Oracle WebLogic Server
All Weblogic domains will need to be ‘SSL enabled’ and the secure port should be defined. This can be done as one of the steps in the ‘Fusion Middleware configuration Wizard’. To see the setting select the ‘Administrator Server’ from the list, as shown in the screenshot below, when you reach this option point.
The next step is to check the ‘SSL enabled’ option and choose a ‘SSL Listen Port’.
Generate keys
The first step to configure SSL configuration between different parts of OEID is to generate an SSL key, and then share it between them. A key generator script comes as part of the OEID Weblogic domain installation, and should be accessible on:
WebLogicInstallationpath/user_projects/Endeca_domain/EndecaServer/bin/generate_ssl_keys.sh
When running this script, the Endeca Server WebLogic Server needs to be running, and the script requires both credentials to access the Endeca server, and also an SSL passphrase.
Browser certification
As an OEID developer, you might want to check some web-service requests on your browser; for example, if you want to make sure the Endeca Server is up and running you can try requesting its WSDL document:
https://Endeca_server_host:Endeca_server_port/endeca-server/ws/manage?wsdl
Having the SSL configuration, you need to add SSL certificates to your browser in order to receive reply from the server.
Open your browser and go to its preferences page. Go to Advanced > Encryption tab and click on ‘view certificates’. This is the place that you will need to import the generated esClientCert.p12 file and private passphrase to.
Integrator Configuration
Integration configuration would be done in three areas; Integrator initial file, JRE variables and each graph component’s settings.
- Integrator.ini, This files is by default in the root of the Integrator installation directory. Add following lines under “-vmargs”.
-Djavax.net.ssl.keyStore=yourcertkeystorefile.jks
-Djavax.net.ssl.keyStorePassword=keystorepass
-Djavax.net.ssl.trustStore=yourtruststorefile.jks
-Djavax.net.ssl.trustStorePassword=truststorepass
- JRE Configuration, Same variables should be added to the Integrator designer JRE. To do so open clover Preferences on Window menu. Under Java> Installed JREs select the available jdk and click Edit. Add same option to ‘Default VM arguments’ and Finish the edit.
Components
Any graph component requesting a web-service call must be configured for SSL connection. Settings are not all the same and differ for each type. For a WEB_SERVICE_CLIENT component like below it is enough to make sure all calls are to a https address and the correct port has been defined. You’ll also need to Disable SSL Certificate Validation.
For a BULK ADD/REPLACE component it is enough to check SSL Enabled option.
Endeca Studio Data Sources
Create a folder under default lifreay path/data and call it ‘endeca-data-sources’. All you need to do is to re-copy generated key-stores to the new folder.
As a result if you add the ssl passphrase to the data source definition in the Studio control panel, the definition should be correct and connect successfully.
Provisioning Service
In case of Provisioning Service, firstly copy key-stores to path to Oracle Web-Logic/user-projects/domains/oracle.eid-ps/eidProvisioningConfig/
Secondly, go to the WebLogic Administration console. For the current server, enter the SSL passphrase in the key-stores and SSL configuration page, and then restart the server from the control page.
Learn deploying a Replica Set - MongoDB
Anyway, I was interested in deploying a replica set.
PRIMARY = centos
SECONDARY = centostest1First, I connected to a primary node starting mongodb and set something.
[surachart@centos mongo]$ bin/mongod -replSet surachart --rest --fork --logpath /tmp/mongodb-centos.log
about to fork child process, waiting until server is ready for connections.
forked process: 3989
all output going to: /tmp/mongodb-centos.log
child process started successfully, parent exiting
[surachart@centos mongo]$
[surachart@centos mongo]$ ps -aef | grep 3989
500 3989 1 2 14:33 ? 00:00:02 bin/mongod -replSet surachart --rest --fork --logpath /tmp/mongodb-centos.log
500 4038 1545 0 14:35 pts/0 00:00:00 grep 3989
[surachart@centos mongo]$ tail /tmp/mongodb-centos.log
Tue May 28 14:35:18.690 [FileAllocator] allocating new datafile /data/db/local.ns, filling with zeroes...
Tue May 28 14:35:18.690 [FileAllocator] creating directory /data/db/_tmp
Tue May 28 14:35:18.715 [FileAllocator] done allocating datafile /data/db/local.ns, size: 16MB, took 0.004 secs
Tue May 28 14:35:18.716 [FileAllocator] allocating new datafile /data/db/local.0, filling with zeroes...
Tue May 28 14:35:18.720 [FileAllocator] done allocating datafile /data/db/local.0, size: 64MB, took 0.004 secs
Tue May 28 14:35:18.723 [initandlisten] waiting for connections on port 27017
Tue May 28 14:35:18.723 [websvr] admin web console waiting for connections on port 28017
Tue May 28 14:35:18.727 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)
Tue May 28 14:35:18.727 [rsStart] replSet info you may need to run replSetInitiate -- rs.initiate() in the shell -- if that is not already done
Tue May 28 14:35:28.729 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)
[surachart@centos mongo]$
[surachart@centos mongo]$ bin/mongo
MongoDB shell version: 2.4.3
connecting to: test
> config = { "_id" : "surachart", "members" : [ { "_id" : 0, "host" : "centos:27017" } ] }
{
"_id" : "surachart",
"members" : [
{
"_id" : 0,
"host" : "centos:27017"
}
]
}
> rs.initiate(config)
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
> rs.conf()
{
"_id" : "surachart",
"version" : 1,
"members" : [
{
"_id" : 0,
"host" : "centos:27017"
}
]
}
surachart:PRIMARY>Then, I connected to a secondary node starting mongodb.
[surachart@centostest1 mongo]$ bin/mongod -replSet surachart --rest --fork --logpath /tmp/mongodb-centostest1.log
about to fork child process, waiting until server is ready for connections.
forked process: 2844
all output going to: /tmp/mongodb-centostest1.log
child process started successfully, parent exiting
[surachart@centostest1 mongo]$ ps -aef |grep 2844
500 2844 1 12 14:37 ? 00:00:07 bin/mongod -replSet surachart --rest --fork --logpath /tmp/mongodb-centostest1.log
500 2890 1577 0 14:38 pts/0 00:00:00 grep 2844
[surachart@centostest1 mongo]$ tail /tmp/mongodb-centostest1.log
Tue May 28 14:38:18.845 [FileAllocator] done allocating datafile /data/db/local.ns, size: 16MB, took 0.014 secs
Tue May 28 14:38:18.846 [FileAllocator] allocating new datafile /data/db/local.0, filling with zeroes...
Tue May 28 14:38:18.862 [FileAllocator] done allocating datafile /data/db/local.0, size: 64MB, took 0.009 secs
Tue May 28 14:38:18.864 [initandlisten] waiting for connections on port 27017
Tue May 28 14:38:18.865 [websvr] admin web console waiting for connections on port 28017
Tue May 28 14:38:18.868 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)
Tue May 28 14:38:18.868 [rsStart] replSet info you may need to run replSetInitiate -- rs.initiate() in the shell -- if that is not already done
Tue May 28 14:38:28.869 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)
Tue May 28 14:38:38.870 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)
Tue May 28 14:38:48.871 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)
[surachart@centostest1 mongo]$After I made sure a secondary node that could start and no any issues. I come back to a primary node and added new node (a secondary node).
surachart:PRIMARY> rs.add("centostest1:27017")
{ "ok" : 1 }
surachart:PRIMARY> rs.conf()
{
"_id" : "surachart",
"version" : 2,
"members" : [
{
"_id" : 0,
"host" : "centos:27017"
},
{
"_id" : 1,
"host" : "centostest1:27017"
}
]
}
surachart:PRIMARY>
surachart:PRIMARY>and also checked on a secondary node.
[surachart@centostest1 mongo]$ bin/mongo
MongoDB shell version: 2.4.3
connecting to: test
surachart:SECONDARY>
surachart:SECONDARY>
surachart:SECONDARY>It looked good. Finally, I tested it by inserting data.
On Primary node:
surachart:PRIMARY> db.test.save( { a: 1 } )
surachart:PRIMARY> db.test.save( { b: 2 } )
surachart:PRIMARY> db.test.find()
{ "_id" : ObjectId("51a45f6b9f2bc22d6f79b98e"), "a" : 1 }
{ "_id" : ObjectId("51a45f709f2bc22d6f79b98f"), "b" : 2 } On Secondary node:
surachart:SECONDARY> db.test.save( { 3: 2 } )
not master
surachart:SECONDARY> db.test.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }So, used "rs.slaveOk()" on a secondary node to allow read operations.
surachart:SECONDARY> rs.slaveOk
function (value) { return db.getMongo().setSlaveOk(value); }
surachart:SECONDARY> rs.slaveOk()
surachart:SECONDARY> db.test.find()
{ "_id" : ObjectId("51a45f6b9f2bc22d6f79b98e"), "a" : 1 }
{ "_id" : ObjectId("51a45f709f2bc22d6f79b98f"), "b" : 2 }I could read data and done to begin about deploying a replica set on MongoDB.
Another test - Demote a primary to a secondary.
On centos:
surachart:PRIMARY> rs.stepDown()
Tue May 28 15:26:37.327 DBClientCursor::init call() failed
Tue May 28 15:26:37.329 JavaScript execution failed: Error: error doing query: failed at src/mongo/shell/query.js:L78
Tue May 28 15:26:37.330 trying reconnect to 127.0.0.1:27017
Tue May 28 15:26:37.331 reconnect 127.0.0.1:27017 ok
surachart:SECONDARY>
surachart:SECONDARY>Meanwhile, on centostest1.
surachart:SECONDARY>
surachart:SECONDARY>
surachart:PRIMARY>
surachart:PRIMARY>
surachart:PRIMARY> rs.status()
{
"set" : "surachart",
"date" : ISODate("2013-05-28T08:30:51Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "centos:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3093,
"optime" : {
"t" : 1369729404,
"i" : 1
},
"optimeDate" : ISODate("2013-05-28T08:23:24Z"),
"lastHeartbeat" : ISODate("2013-05-28T08:30:51Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : 0,
"syncingTo" : "centostest1:27017"
},
{
"_id" : 1,
"name" : "centostest1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 3177,
"optime" : {
"t" : 1369729404,
"i" : 1
},
"optimeDate" : ISODate("2013-05-28T08:23:24Z"),
"self" : true
}
],
"ok" : 1
}
surachart:PRIMARY>and and... read more on document...
Written By: Surachart Opun http://surachartopun.com













