Skip navigation.

Feed aggregator

Austin Community College’s ACCelerator: Big bet on emporium approach with no pilots

Michael Feldstein - Sun, 2015-03-22 14:55

By Phil HillMore Posts (302)

While at SXSWedu, I was able to visit Austin Community College’s ACCelerator lab, which got a fair bit of publicity over the past month. While the centerpiece of ACCelerator usage is for developental math, the 600+ workstation facility spread over 32,000 square feet also supports Tutoring in a variety of subjectsFirst year experienceGroup advisingAcademic CoachingAdult EducationContinuing EducationCollege readiness assessment preparation, and Student skills workshops.


But it is the developmental math course that has received the most coverage.

Austin Community College welcomed second lady Dr. Jill Biden and Under Secretary of Education Dr. Ted Mitchell on Monday, March 9, to tour the Highland Campus’ ACCelerator and meet with students and faculty of the college’s new developmental math course, MATD 0421. [snip]

“I teach a lot of developmental students,” says Dr. Biden. “The one stumbling block does seem to be math and math anxiety and ‘Can I do it?’. This (course) seems to be so empowering and so positive. Students can see immediate success.”

MATD 0421 is a self-paced, emporium-style course that encompasses all three levels of developmental math. Paul Fain at Inside Higher Ed had an excellent article that included a description of the motivation.

Dismal remedial success rates have been a problem at Austin, which enrolls 60,000 students. So faculty members from the college looked around for alternative approaches to teaching math.

“Really, there’s nothing to lose,” said [Austin CC president] Rhodes.

The Highland Campus, where the ACCelerator lab is located, is built in a former shopping mall. Student in Austin CC can choose courses at any of the 8 campuses or 5 centers. All developmental math at the Highland Campus is run through MATD 0421, so students across the system can choose traditional approaches at other campuses of the emporium approach at Highland.

Austin CC picked this approach after researching several other initiatives (Fain describes Virginia Tech and Montgomery College examples). The IHE article then describes the design:

Austin officials decided to try the emporium method. They paired it with adaptive courseware, which adjusts to individual learners based on their progress and ability to master concepts. The college went with ALEKS, an adaptive software platform from McGraw-Hill Education.

Fain describes the personalization aspect:

The new remedial math course is offered at the ACCelerator. The computer stations are arranged in loose clusters of 25 or so. Faculty members are easy to spot in blue vests. Student coaches and staff wear red ones.

This creates a more personalized form of learning, said Stacey Güney, the ACCelerator’s director. That might seem paradoxical in computer lab that has a bit of a Matrix feel. But Güney said that instead of a class size of 25 students per instructor, the course features 25 classes of one student.

“In here there is no back of the classroom,” she said.

While the program is fairly new (second term), there are some initial results described by the official site:

In MATD 0421’s inaugural semester:

  • The withdrawal rate was less than half the rate for traditional developmental math courses.
  • 75 percent of the students completed the equivalent of one traditional course.
  • Nearly 45 percent completed the equivalent to a course and one-half.
  • Over 14 percent completed the equivalent to two courses.
  • 13 students completed all the equivalent of three courses.

Go read the full IHE article for a thorough description. I would offer the following observations.

  • Rather than a pilot program, which I have argued plagues higher ed and prevents diffusion of innovations, Austin CC has committed to a A) a big program up front (~700 students in the Fall 2014 inaugural semester) and ~1,000 students in Spring 2015, yet B) they offer students the choice of traditional or emporium. To me, this offers the best of both worlds in allowing a big bet that doesn’t get caught in the “purgatory of pilots” while offering student choice.
  • While the computer lab and software are easy headlines, I hope people don’t miss the heavy staffing that are a central feature of this lab – there are more than 90 faculty and staff working there, teaching the modular courses, roving the aisles to provide help, and working in help desks. The ACCelerator is NOT an exercise in replacing faculty with computers.
  • During my tour, instructor Christie Allen-Johnson and associate professor Ann P. Vance described their plans to perform a more structured analysis of the results. Expect to see more validated outcomes starting at the end of CY2015.
  • When and if Austin CC proves the value and results of the model, that would be the time to migrate most of the remaining developmental math courses into this emporium model.
  • The one area that concerns me is the lack of structured time for students away from the workstations. Developmental students in community colleges often have not experienced academic success – knowing how to succeed, learning how to learn, believing in their ability to succeed – and often this non-cognitive aspect of math is as important as the actual coursework. Allen-Johnson described the availability of coaching that goes beyond coursework, but that is different than providing structure for coaching and self-regulated learning.

The post Austin Community College’s ACCelerator: Big bet on emporium approach with no pilots appeared first on e-Literate.

SQLDeveloper XML Extensions and auto-navigation

The Anti-Kyte - Sun, 2015-03-22 09:42

It’s official, England are now the second best cricket team in the British Isles !
After all, Scotland were dispatched with ease and as for Wales…they didn’t even make it to the Cricket World Cup.
OK, technically they did because they’re part of England for the purposes of cricket…although you’d be hard pressed to get them to admit it.
Ireland are, of course, some way in front having actually managed to actually win the odd game against Test Playing Nations.
Whilst it takes quite some effort to find silver lining in the cloud of English Cricket’s latest debacle, the same cannot be said if SQLDeveloper is your Oracle Database IDE of choice …

Why I use SQLDeveloper

Now, I’m well aware that each developer has their own favourite IDE. TOAD and PL/SQL Developer are fine tools in their own right, each with their own strengths. Which of these tools you swear by, or swear at, is always likely to be based on some fairly subjective criteria.

One of the main reasons I have for using SQLDeveloper is that it’s so easy to extend by means of a judicious application of XML, combined with a bit of SQL and/or PL/SQL.

Fun with Foreign Keys

As with all of the mainstream IDE’s, SQLDeveloper displays a table’s constraints as standard. However, what it doesn’t show is which tables have Foreign Keys to the table you’re looking at.

If, for example, you want to find out which tables have a Foreign Key to HR.COUNTRIES, you need to run a query like this :

select owner, table_name, constraint_name
from all_constraints
where constraint_type = 'R'
and (r_owner, r_constraint_name) in 
    select owner, constraint_name
    from all_constraints
    where constraint_type in ('U', 'P')
    and owner = 'HR'
    and table_name = 'COUNTRIES'
order by owner, table_name, constraint_name

OWNER                          TABLE_NAME                     CONSTRAINT_NAME
------------------------------ ------------------------------ ------------------------------
HR                             LOCATIONS                      LOC_C_ID_FK


Wouldn’t it be handy if you could somehow add a tab onto the table view in SQLDeveloper and have this information
pop-up for the table you’re looking at.
Well, funny you should say that….

	<item type="editor" node="TableNode" vertical="true">
		<title><![CDATA[Child Tables]]></title>
					select owner, table_name, constraint_name
					from all_constraints 
					where constraint_type = 'R' 
					and (r_owner, r_constraint_name) in
						select owner, constraint_name 
						from all_constraints 
						where constraint_type in ('U', 'P') 
						and owner = :OBJECT_OWNER 
						and table_name = :OBJECT_NAME 
					order by owner, table_name, constraint_name 

It may not be immediately obvious how this xml code is going to help us.
The answer is that it’s the SQLDeveloper extension that we’ve just written. Yep, just that one xml file.

It’s probably worth taking a closer look at the structure of this file in terms of the XML…

	<item type="editor" node="TableNode" vertical="true">
		<title><![CDATA[Enter the Tab Name Here]]></title>
				<![CDATA[Enter your query here]]>

If you want to add a node to a different object type, it seems that you just need to change the node attribute of the item tag as appropriate.
For example, specifying “Viewnode” should enable you to add a Tab to your Views.

Anyway, to add this to SQLDeveloper, we just need to do a bit of pointing and clicking…

To start with, save the above code into an xml file. I’ve called mine deps_fk.xml.

In SQLDeveloper, go to the Tools menu and select Preferences

In the tree on the left hand side expand the Database node. Then click on User Defined Extensions.


Now click the Add Row button at the bottom of the Right Hand Pane and you should see a new Row appear under the Type and Location headings like this :


If you now click in the row you’ve just created under the Type heading, you should get a drop-down list of values.
Select Editor from the list :


In the Location field, you just need to tell SQLDeveloper where your xml file is :


Finally, hit the OK button at the bottom of the window to save your changes and then re-start SQLDeveloper.

Now, if we open the HR.COUNTRIES table, we can see that there’s now an additional tab called Child Tables.
When we go to this tab, we are rewarded with :


This stuff has been done before. As well as this post from Tony Andrews, I also posted something similar several years ago.
I must be getting old, I’m starting to repeat myself !

Whilst all this is quite handy, wouldn’t it be good to be to be able to link directly to the Child table ?

Linking to other objects

Jeff Smith’s post here might be just what we’re looking for.

Using Jeff’s linking technique, we can improve our extension a bit…

	<item type="editor" node="TableNode" vertical="true">
		<title><![CDATA[Child Tables]]></title>
					select owner,  
						    ||':oracle.dbtools.raptor.controls.grid.DefaultDrillLink' table_name,
					from all_constraints 
					where constraint_type = 'R' 
					and (r_owner, r_constraint_name) in
						select owner, constraint_name 
						from all_constraints 
						where constraint_type in ('U', 'P') 
						and owner = :OBJECT_OWNER 
						and table_name = :OBJECT_NAME 
					order by owner, table_name, constraint_name 

Now when I run this, the table_name appears in blue.


By clicking it, I can navigate directly to the child table…


When the code is run, in this example, the string generated for the table_name column is :


You can link to all sorts of things using this technique. In fact, it would seem to be that you can link to any object that has a node in the SQLDeveloper Navigator Tree. If you want to play around, just select the string from dual in SQLDeveloper (using F9 to execute).

For example :

select 'SQLDEV:LINK:HR:TRIGGER:UPDATE_JOB_HISTORY:oracle.dbtools.raptor.controls.grid.DefaultDrillLink'
from dual;

…returns a link to the UPDATE_JOB_HISTORY trigger in the results grid.
Note that the link syntax is case sensitive in that the owner, object type and object name all need to be in uppercase for this to work.

Another point worth noting, specifying a type of PACKAGE takes you to the package header.
If you want to link to the body, then specify PACKAGE BODY.

Other SQLDeveloper Extension Types

There’s a whole bunch of stuff you can do to customise SQLDeveloper using nothing more than a bit of boilerplate xml.
In addition to Jeff’s blog, there is an Oracle Wiki which contains, among other things,

It’s definitely worth a look, especially if, like me, you need something to take your mind off the cricket.

Filed under: SQLDeveloper Tagged: adding tabs to sqldeveloper, all_constraints, finding child constraints, linking to tabs in sqldeveloper, oracle.dbtools.raptor.controls.grid.DefaultDrillLink, sqldeveloper xml extensions

Background REST Service Access with A-Team Mobile Persistence Accelerator

Andrejus Baranovski - Sun, 2015-03-22 06:35
REST service transfers light data, but service execution time could bring significant delay to the enterprise mobile application. I have already introduced you to the A-Team Mobile Persistence Accelerator (AMPA) in previous post - REST Service Access with A-Team Mobile Persistence Accelerator. Based on AMPA author - Steven Davelaar suggestions, I will post today updated application, where REST service call will be handled in background. This will allow mobile user to continue working with the MAF application, while REST call is being processed in background thread.

Here you can download updated sample application - Remote read in background is configurable through AMPA persistence mapping, I have changed it to be false - let's see how it works for slow REST service execution:

Data Control method is executing (sequential in this example) remote findAll operation through AMPA, to fetch employees data. Data collection is loaded to the UI, after service execution is completed:

Server side ADF BC VO is set to wait 30 seconds (waiting for 30 seconds after VO was executed), before completing SOAP response. This allows to simulate slow REST service execution and check how MAF mobile application behaves with sequential service call:

Executing search operation over slow REST operation blocks entire MAF mobile application. User can't navigate to other screens and is locked into current screen, until response comes. This is how it looks like, when I changed search criteria - mobile application waits for the response:

Obviously this is inappropriate, because it blocks application and user can't continue his work. Let's test with AMPA configured to execute REST calls in background - remoteReadInBackground = true:

Data Control method responsible to execute REST action is refactored. I'm only starting remote findAll operation - not waiting it to complete. AMPA generated service class EmployeeService is changed to include additional constructor, where I'm passing instance of Data Control class and a flag to prevent auto query. Here is applyFilter method from Data Control class, it call REST service in background, through AMPA:

AMPA generated class is changed with overriden method refreshEntityList. This method is called automatically by AMPA, when background REST call is completed. Here I'm calling Data Control class method, responsible to refresh UI and display data fetched from the background service:

Data Control class method responsible for UI refresh - it updates Data Control collection and invokes synch with UI:

I will describe a test I have completed, with REST service execution in background. Perform search action with a parameter:

ADF BC on server side executes VO with SQL statement, there is a wait time of 30 seconds:

MAF mobile application is not blocked anymore, as it was with sequential REST service execution. User can navigate to other screen and do different actions:

Once ADF BC VO completes execution and SOAP service returns response, Service Bus is transforming SOAP response to REST. Mobile application receives data and UI refresh happens, to present latest changes. User can view the changes, once he is back to the screen:

In the same way, user could run another search:

While search is running, user could view details for present data:

After returning back to the search list, results for the new search query are displayed - data from REST service call executed in background:

User could load details screen and view the data:

HP Mini T210 3F0 boot failure and System Rollback Data disk space issues with Roxio BackOnTrack / aswrvt.sys

Gareth Roberts - Sun, 2015-03-22 04:10

If you have an HP Mini 210 or 100 and have had issues with disk running out of space, failures to boot, I feel for you. After a heap of hassle, I sorted my out problems without having to reinstall Windows, and so I'm sharing my experiences as I found many many people with the same issue, but no central resolution. The issues I've had are as follows

  • Failure to boot: 3F0 Harddisk does not exist
  • Running out of space (see Roxio BackOnTrack)
  • Black screen after attempting to uninstall Roxio BackOnTrack
3F0 Harddisk does not exist

IF you get a failure to startup, screen with 3F0 Harddisk does not exist:

  1. To access the BIOS, turn on the computer and immediately press the esc key to display the Startup Menu, and then press the F10 key.
  2. Press F9 to reset the BIOS defaults, and press Enter to confirm the action.
  3. Press F10 to save the change and exit the BIOS, and then press Enter to confirm.

Hopefully now the computer will restart.

Low disk space - "System Rollback Data" hidden secret directory

This netbook came preinstalled with Roxio BackOnTrack, which is the primary source of my woes. Recently I found I was running out of disk space and after deleting a heap of data, then finding I was running out again I installed WinDirStat to check what was going on. On inspection I found a super secret hidden folder System Rollback Data, which is not even visible with "show system files" switched on. Note this is not to be confused with Microsoft Windows System Restore. This folder contained 160Gb out of my 250Gb SSD !!

So after reading I found many pointers for Roxio BackOnTrack being the culprit of the System Restore Data directory size. Note that it seems Roxio BackOnTrack and this super secret directory may have a hook into the boot loader. So beware!

Anyway, without further ado here's what I hit and how to fix it.

  • Uninstall Roxio BackOnTrack from the Programs & Features or similar. Note this may take a long time if the backup store is large. I didn't wait, and end task'ed the uninstall process. That may have been a bad idea.
  • After killing the uninstall and rebooting I got the dreaded 3F0 hard disk does not exist, fix as per above.
  • After fixing 3F0 issue, Windows would not boot, I tried safe mode, command prompt, last known good configuration, all that happened was a black screen after the initial Windows splash. On logging I found Windows load stopped at aswrvt.sys, no further progress. After a lot of searching I found a post that mentioned to delete the file delete the syscow32.sys file in WINDOWS/system32/drivers folder. The next issue was trying to get a utility running so I could get access to the C:\ Drive.
  • As the HP Mini 210 doesn't have a CD/DVD drive I decided to run a USB Boot program, after trying Windows restore disk, which didn't boot, I decided to use EaseUS Todo Back Emergency Disk, so I did the following:
    • Installed EaseUS Todo Backup Free to another computer and ran it.
    • Tools > Create Emergency disk, then created USB bootable drive
    • Put that in the HP Mini and changed boot options to move USB to top of the list
    • When EaseUS started up went to Tools > Windows Command Prompt and ran commands along the lines of the following and found I only had syscow32x.sys, so backed up and deleted that:
      cd windows\system32\drivers
      copy syscow32x.sys c:\temp
      del syscow32x.sys
    • Closed EaseUS Todo Backup
  • Rebooted - filesystem check kicked in, and Windows booted successfully !

  • Get rid of Roxio BackOnTrack - run uninstallapp.exe from C:\Program Files\Roxio ... takes a long time (10's of minutes dependeing on data size), watch the disk space free up as it runs :-)

  • Remove Roxio BackOnTrack via Control Panel - Programs and Features

After all that, my machine is running sweetly again. Hopefully this post saves someone from throwing a perfectly fine HP Mini 100 / 210 out the window !!

Catch ya!

This is a post from Gareth's blog at

What’s this ‘WHERE 1=1′?

Patrick Barel - Sun, 2015-03-22 01:30

Since some time I have been adding WHERE 1=1 to all my queries.
I get queries like this:

  FROM emp e
 WHERE 1=1
   AND e.ename LIKE 'A%'
   AND e.deptno = 20

Lots of people ask me what’s the use of this WHERE 1=1.

You know I like to type as little as possible but here I am typing a lot of extra characters. And yet, it makes my development life a lot easier.

If my query has a lot of predicates and I want to see what happens then I usually comment those predicates out by using — (two dashes). I use my own CommentLine plug-in for this. This is easy for the second and higher predicates. But if I want to comment out the first predicate, then it get a bit harder. Well, not harder, but more work.

If I didn’t use the WHERE 1=1 and I wanted to comment out the ename predicate then I would have to do something like this:

  FROM emp e
 WHERE /*e.ename LIKE 'A%'
   AND */e.deptno = 20

I agree, it’s not hard to do, but I think it’s a lot more work than just adding — (two dashes) in front of a line:

  FROM emp e
 WHERE 1 = 1
--   AND e.ename LIKE 'A%'
   AND e.deptno = 20

And, as I don’t like typing or at least, I want to make it as easy for me as possible, I am using another one of my plug-ins, Template, where I defined a template w1 which results in

WHERE 1 = 1

making it easy for me to write the queries.

I think adding this extra predicate has no (or hardly any) influence on the execution time of the query. I think the optimizer ignores this predicate completely.

I hope this explains a bit why I write my queries like this.

What&#8217;s this &#8216;WHERE 1=1&#8242;?

Bar Solutions - Sun, 2015-03-22 01:30
Since some time I have been adding WHERE 1=1 to all my queries. I get queries like this: SELECT * FROM emp e WHERE 1=1 AND e.ename LIKE 'A%' AND e.deptno = 20 Lots of people ask me what’s the use of this WHERE 1=1. You know I like [...]

Installing Languages on PeopleSoft Update Images

Javier Delgado - Sat, 2015-03-21 02:52
One of great things about PeopleSoft Update Manager images is that they could be used as a Demo environment to try the latest and greatest features of the PeopleSoft application. All you need to do is to download the image and install it and you can already play with the application.

However, the initial install of the Update Image will only have the English language enabled. If you are using PeopleSoft Update Manager, once you upload the target environment and define the change package, the application will automatically install the languages you have in place in your own environment. However, if you just want to install the Update Image and you do not have a target environment to upload, this approach is not feasible.

Below I describe the steps to follow in order to install additional languages into an Update Image without having a target environment.

1.- Launch the Update Image.

2.- Install the client database connectivity tools by running the installer shipped in the oracle-12c-client-64bit shared folder.
3.- Connect to the database using SQL Developer and run the following command:
insert into PS_PTIASPTARGETLNG values ('ESPDEMO', '<language>');

4.- Install the PeopleTools client by running the installer located in the client-854 shared folder.
5.- Connect to the Update Image environment using Application Designer and open the PTIASPLANG_VW.PTIASPLANGCD.FieldFormula PeopleCode. Once in there, add the lines in bold.
(...)Function AssembleDMoverCommand() Returns array of string   Local array of string &arrRet = CreateArrayRept("", 0);      Local string &srvName;   Local string &userID;   Local string &userPwd;   Local string &dmsLogPath;   Local string &dmsPath;   Local string &psdmtxPath;   Local string &mlDatPath;      Local string &paramName;   Local string &paramValue;   REM prepare data mover parameters from database;   Local SQL &sqlParam = GetSQL(SQL.PTIASPDMPARAM);   While &sqlParam.Fetch(&paramName, &paramValue)      Evaluate &paramName      When "USERID"         &userID = &paramValue;         Break;      When "USERPWD"         &userPwd = &paramValue;         Break;      When "DMSPATH"         &dmsPath = &paramValue;         Break;      When "PSDMTXPATH"         &psdmtxPath = &paramValue;         Break;      When "SVRNAME"         &srvName = &paramValue;         Break;      When "DMLOGPATH"         &dmsLogPath = &paramValue;         Break;      When "MLDATPATH"         &mlDatPath = &paramValue;         Break;      When-Other         Break;      End-Evaluate;   End-While;   &sqlParam.Close();      Local string &cmdString;   &cmdString = &psdmtxPath | " -CT " | %DbType;   If All(&srvName) Then      &cmdString = &cmdString | " -CS " | &srvName;   End-If;   /* BNB - J.Delgado - 08 Mar 2015 - BEGIN */   Local string &tmp;   &tmp = &userPwd;   /* BNB - J.Delgado - 08 Mar 2015 - END */   If All(&userPwd) Then      &userPwd = Decrypt("mldmpswd", &userPwd);   End-If;   /* BNB - J.Delgado - 08 Mar 2015 - BEGIN */   If None(&userPwd) Then      &userPwd = &tmp;   End-If;   /* BNB - J.Delgado - 08 Mar 2015 - END */   &cmdString = &cmdString | " -CD " | %DbName | " -CO " | &userID | " -CP " | &userPwd | " -FP " | &dmsPath;      REM DMover executable file location, whole DMover command, DMS Log File, Dat file Path, DMS file Path are pushed into the array for following process;   &arrRet.Push(&psdmtxPath, &cmdString, &dmsLogPath, &mlDatPath, &dmsPath);   Return &arrRet;End-Function;(...)
Note: This change removes the requirement of a previous target environment upload. 
6.- Connect to the PeopleSoft application using PIA. Associate the PTIASPMLLOAD Application Engine process to the AE_REQUEST component.

7.- Run the PTIASPMLLOAD process using the Request AE page. The language to be installed should associated to the PTIASPMLLDAET.PTIASPPROPVAL field.

Once the process is run, make sure you reboot the web server and application server in order to use the Update Image in the newly installed language.

Free Apache Cassandra Training Event in Cambridge, MA March 23

Pythian Group - Fri, 2015-03-20 14:24

I’ll be speaking, along with DataStax and Microsoft representatives at Cassandra Essentials Day this coming Monday (March 23) in Cambridge. MA. This free training event will cover the basics of Apache Cassandra and show you how to try it out quickly, easily, and free of charge on the Azure cloud. Expect to learn about the unique aspects of Cassandra and DataStax Enterprise and to dive into real-world use cases.

Space is limited, so register online to reserve a spot.

Categories: DBA Blogs

My Co-op Experience at Pythian

Pythian Group - Fri, 2015-03-20 06:30
That's me in front of our office. I promise there is a bigger Pythian logo!

That’s me in front of our office. I promise there is a bigger Pythian logo!

Unlike most other engineering physics students at Carleton who prefer to remain within the limits of engineering, I had chosen to apply for a software developer co-op position at Pythian in 2014. For those of you who do not know much about the engineering physics program (I get that a lot and so I will save you the trip to Google and tell you), this is how Stanford University describes their engineering physics program: “Engineering Physics prepares students to apply physics to tackle 21st century engineering challenges and to apply engineering to address 21st century questions in physics.” As you can imagine, very little to do with software development. You might ask, then why apply to Pythian?

Programming is changing the way our world functions. Look at the finance sectors: companies rely on complicated algorithms to determine where they should be investing their resources which in turn determines the course of growth for the company. In science and technology, algorithms help us make sense of huge amounts of unstructured data which would otherwise take us years to process, and help us understand and solve many or our 21st century problems. Clearly, learning how to write these algorithms or code cannot be a bad idea, rather, one that will be invaluable. A wise or a not so wise man once said, (you will know what I mean if you have seen the movie iRobot): “If you cannot solve a problem, make a program that can.” In a way, maybe I intend to apply physics to tackle all of 21st century problems by writing programs. (That totally made sense in my head).

Whatever it might be, my interest in programming or my mission to somehow tie physics, engineering, and programming together, I found myself looking forward to an interview with Pythian. I remember having to call in for a Skype interview. While waiting for my interviewers to join the call, I remember thinking about all the horror co-op stories I had heard: How you will be given piles of books to read over your work term (you might have guessed from this blog so far, not much of a reader, this one. If I hit 500 words, first round’s on me!). Furthermore, horror stories of how students are usually labeled as a co-op and given no meaningful work at all.

Just as I was drifting away in my thoughts, my interviewers joined the call. And much to my surprise they were not the traditional hiring managers in their formal dresses making you feel like just another interviewee in a long list of interviewees. Instead they were warm and friendly people who were genuinely interested in what I could offer to the company as a co-op student. The programming languages I knew, which one was my favourite, the kind of programs I had written, and more. They clearly stated the kind of work I could expect as a co-op student, which was exactly the same kind of work that the team was going to be doing. And most importantly, my interviewers seemed to be enjoying the kind of work they do and the place they work at.

So, when I was offered the co-op position at Pythian. I knew I had to say yes!

My pleasant experience with Pythian has continued ever since. The most enjoyable aspect of my work has been the fact that I am involved in a lot of the team projects which means I am always learning something new and gaining more knowledge each day, after each project. I feel that in an industry like this, the best way to learn is by experience and exposure. At Pythian that is exactly what I am getting.

And if those are not good enough reasons to enjoy working for this company, I also have the privilege of working with some extremely experienced and knowledgeable people in the web development industry. Bill Gates had once suggested that he wants to hire the smartest people at Microsoft and surround himself with them. This would create an environment where everyone would learn from each other and excel in their work. And I agree with that. Well now if you are the next Bill Gates, go ahead, create your multibillion dollar company and hire the best of the best and immerse yourself in the presence of all that knowledge and intelligence. But I feel I have found myself a great alternative, a poor man approach, a student budget approach or whatever you want to call it, take full advantage of working with some really talented people and learn as much as you can.

Today, five months into my yearlong placement with Pythian, I could not be more sure and proud of becoming a part of this exciting company, becoming a Pythianite. And I feel my time spent in this company has put me well in course to complete my goal of tying physics, engineering and programming together.

Categories: DBA Blogs

Log Buffer #415, A Carnival of the Vanities for DBAs

Pythian Group - Fri, 2015-03-20 06:25

This Log Buffer Edition covers the Oracle, SQL Server and MySQL with a keen look on the novel ideas.


The case was to roll forward a physical standby with an RMAN SCN incremental backup taken from primary.

Oracle Database 12c: Smart upgrade

This blog covers how to specify query parameters using the REST Service Editor.

Production workloads blend Cloud and On-Premise Capabilities


SQL Server:

Mail Fails with SQLCMD Error

How to get Database Design Horribly Wrong

Using the ROLLUP, CUBE, and GROUPING SETS Operators

The Right and Wrong of T-SQL DML TRIGGERs (SQL Spackle)

How converting extensive, repetitive code to a data-driven approach resolved a maintenance headache and helped identify bugs


Distributing innodb tables made simpler!

Choosing a good sharding key in MongoDB (and MySQL)

Update a grails project from version 2.3.8 to version 2.4.4

MySQL Enterprise Backup 3.12.0 has been released

If table is partitioned it makes it easy to maintain. Table has grown so huge and the backups are just keep running long then probably you need to think of archival or purge.

Categories: DBA Blogs

Using strace to debug application errors in linux

Pythian Group - Fri, 2015-03-20 06:24

strace is a very useful tool which traces system calls and signals for a running process. This helps a lot while debugging application level performance issues and bugs. Aim of this post is to demonstrate the power of strace in pinning down an application bug.

I came across an issue in which nagios was sending the following alerts for a RHEL6 system.

***** Nagios ***** Notification Type: PROBLEM Service: NTP Host: xxxxx Address: xx.xx.xx.xx State: UNKNOWN Date/Time: Tue Feb 17 10:08:36 EST 2015 Additional Info: cant create socket connection

On manually executing the nagios plugin on the affected system, we can see that the command is not running correctly.

# /usr/lib64/nagios/plugins/check_ntp_time -H localhost -w 1 -c 2
can’t create socket connection

I ran strace on the command. This would create a file /tmp/strace.out with strace output.

# strace -xvtto /tmp/strace.out /usr/lib64/nagios/plugins/check_ntp_time -H localhost -w 1 -c 2

Following are the options which I passed.

-x Print all non-ASCII strings in hexadecimal string format.
-v Print unabbreviated versions of environment, stat, termios, etc. calls. These structures
are very common in calls and so the default behavior displays a reasonable subset of struc?
ture members. Use this option to get all of the gory details.
-tt If given twice, the time printed will include the microseconds.
-o filename Write the trace output to the file filename rather than to stderr. Use if -ff
is used. If the argument begins with `|’ or with `!’ then the rest of the argument is
treated as a command and all output is piped to it. This is convenient for piping the
debugging output to a program without affecting the redirections of executed programs.

Time stamps displayed with -tt option is not very useful in this example, but it is very useful while debugging application performance issues. -T which shows the time spend in each system call is also useful for those issues.

From strace output,

10:26:11.901173 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
10:26:11.901279 connect(3, {sa_family=AF_INET, sin_port=htons(123), sin_addr=inet_addr(“″)}, 16) = 0
10:26:11.901413 getsockname(3, {sa_family=AF_INET, sin_port=htons(38673), sin_addr=inet_addr(“″)}, [16]) = 0
10:26:11.901513 close(3) = 0
10:26:11.901621 socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 3
10:26:11.901722 connect(3, {sa_family=AF_INET6, sin6_port=htons(123), inet_pton(AF_INET6, “::1″, &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable) <—————-
10:26:11.901830 close(3) = 0
10:26:11.901933 socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) = 3
10:26:11.902033 connect(3, {sa_family=AF_INET, sin_port=htons(123), sin_addr=inet_addr(“″)}, 16) = 0
10:26:11.902130 socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP) = 4
10:26:11.902238 connect(4, {sa_family=AF_INET6, sin6_port=htons(123), inet_pton(AF_INET6, “::1″, &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable) <—————-
10:26:11.902355 fstat(1, {st_dev=makedev(0, 11), st_ino=3, st_mode=S_IFCHR|0620, st_nlink=1, st_uid=528, st_gid=5, st_blksize=1024, st_blocks=0, st_rdev=makedev(136, 0), st_atime=2015/02/17-10:26:11, st_mtime=2015/02/17-10:26:11, st_ctime=2015/02/17-10:16:32}) = 0
10:26:11.902490 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc5a8752000
10:26:11.902608 write(1, “can’t create socket connection”, 30) = 30

Let us have a deeper look,

You can see that socket() is opening a socket with PF_INET (IP v4) domain and IPPROTO_IP (tcp) protocol. This returns file descriptor 3. Then connect() is connecting to the socket using the same file descriptor and connects to ntp port (123) in localhost. Then it calls getsockname and closes the file descriptor for the socket.

10:26:11.901173 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
10:26:11.901279 connect(3, {sa_family=AF_INET, sin_port=htons(123), sin_addr=inet_addr(“″)}, 16) = 0
10:26:11.901413 getsockname(3, {sa_family=AF_INET, sin_port=htons(38673), sin_addr=inet_addr(“″)}, [16]) = 0
10:26:11.901513 close(3) = 0

Next it does the same but with PF_INET6 (IP v6) domain. But you can see that connect() fails with ENETUNREACH.

10:26:11.901621 socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 3
10:26:11.901722 connect(3, {sa_family=AF_INET6, sin6_port=htons(123), inet_pton(AF_INET6, “::1″, &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable) <—————-
10:26:11.901830 close(3)

From connect man page,

Network is unreachable.

This process is repeated with IPPROTO_UDP (udp) protocol as well.

On checking the system, I see that that only IPv4 is enabled. ‘inet6 addr’ line is missing.

[root@pbsftp ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:56:90:2E:31
inet addr:xx.xx.xx.xx Bcast:xx.xx.xx.xx Mask:xx.xx.xx.xx <——————–
RX packets:5494691 errors:0 dropped:0 overruns:0 frame:0
TX packets:4014672 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5877759230 (5.4 GiB) TX bytes:5608605924 (5.2 GiB)

IPv6 is disabled in the system using following /etc/sysctl.conf entries.

net.ipv6.conf.all.disable_ipv6 = 1

This behavior of nagios plugin is wrong as it should not die when one of the connect fails.

Issue is fixed in upstream patch.

Enabling IPv6 by removing following entries from /etc/sysctl.conf and running ‘sysctl -p’ would act as a workaround.

net.ipv6.conf.all.disable_ipv6 = 1

To fix the issue, the upstream patch need to be either backported manually to create an rpm or a support ticket need to be opened with the operating system vendor to backport the patch in their product release.

Categories: DBA Blogs

Using OEM System Targets with Oracle Utilities Products

Anthony Shorten - Thu, 2015-03-19 17:43

One of the common requirements of an IT group is to rack the availability of a system. A system is the total end to end architecture for a particular product. All of the components need to be tracked to truly determine whether the system is available or not.

Within Oracle Enterprise Manager it is possible to track each component individually and is also possible to create a definition which groups the targets in an architecture together with some availability rules. This is known as a Generic System target within Oracle Enterprise Manager. Using the Oracle Application Management Pack for Oracle Utilities in combination with other targets it is possible to define such a target to track the overall availability of the Oracle Utilities product.

Here is how you can set it up. Note: The example below uses Oracle Utilities Customer Care And Billing as an example, this technique applies to any Oracle Utilities product supported by the Oracle Application Management Pack for Oracle Utilities.

  • Logon to Oracle Enterprise Manager using an appropriate administration user.
  • Navigate to the Setup --> Add Target --> Generic System menu option to initiate the maintenance of the Generic System target. For example:

Setup --> Add Target --> Generic System

  • Fill in the appropriate settings for your Generic System.
    • Name the system appropriately for your site.
    • Add comments which are useful for other administrators to understand the target. This might sound trivial but some comments can help other administrators understand the system represented by this target
    • The Privilege Propogating System allows administrators to grant priviledges to other administrators in a manner in which new administrators get the same privileges as its member targets. In other words, granting a privilege to a system target may grant the same privileges to the member targets, if Privilege Propogating System is enabled.
    • Time Zone is set for the target just like any other target for scheduling etc..
    • System Properties allows you to add additional tagging information.
Generic System Information
  • Select the targets to be added to the System definition. At a minimum consider the following:
    • Add the Oracle Utilities Batch Server, Oracle Utilities Web Application and Oracle Utilities Web Services Application to the Generic System. Avoid adding the Oracle Utilities Home and Oracle Utilities System Environment targets as they do not have any availability status.
    • Add the base Fusion Middleware targets including the Oracle WebLogic Domain, Oracle WebLogic Server and Application Deployment targets associated with Oracle Utilities products. Customers using Inbound Web Services should also add that Web Services Application Deployment to track Web Services availability. Oracle WebLogic Cluster targets can be also added if desired.
    • Add the database targets associated with the environment (if you want to track them as well) whether that the Database Instance target (for non-PDB or Oracle 11 and below targets) or Pluggable Database targets (for PDB implementations in Oracle 12c).
    • Avoid duplication of targets. For example, avoid adding Host targets as the child targets are already covered.
    • If you have other targets in your architecture then consider adding them such as SOA etc.. Remember that you may only use targets that are in the base Oracle Enterprise Manager or you have licensed.
Example Target selection
  • Once all the targets are selected, you can proceed to the next stages. For example:

Selecting Targets

  • Confirm the relationships between the targets. Oracle Enterprise Manager will typically default all of it for you but you can add or modify your own relationships as necessary. For example:

Confirming Relationships

  • The next step is to identify the Key Members used to track availability. Targets that are not Key Members are also tracked but do not contribute to the overall system definition of availability. You might ask then why we should added them into a definition. Well, Generic System targets are used for other purposes (that will be covered in another article). Here are a few guidelines:
    • Select targets that are key to the architecture that will represent the critical points of your architecture.
    • Use parent objects to cover as many child objects as possible. For example, use Oracle WebLogic Servers or Oracle WebLogic Cluster as Key Members to cover the Applications deployed within those servers/clusters. This optimizes the definition by minimizing the definitions.
    • Ensure you cover each component of the architecture at least once in your Key Member definition to cover the end to end architecture.
    • Decide whether you want to consider either all or at least one target is available to consider the system available.
    • At a minimum use Oracle WebLogic Server target associated with the Oracle Utilities product deployments to cover online and Web Services, at least one Oracle Utilities Batch Server to cover batch and the database as Key Members for Oracle Utilities products. For example:

Key Targets example

  • The next step allows you to define the metrics and columns to be displayed on the home screen and dashboard for the Generic System target. For the example, the defaults are taken. For example:

Portal Definition

  • Review the definition for completeness. You can alter the definition at any time after saving it or now using the breadcrumbs at the top of the page to navigate to the definition you want to change. For example:

Review the setup

  • The Generic System target is now available for your tracking within Oracle Enterprise Manager. For example:

  • The Generic System target is now also available from the targets page like all other targets. For example:

Example Target on target screen

These targets are very useful and can be defined at a low or high level (and any level in between those extremes). They can be modelled on your IT group or just generically. This technique can combine targets from many different compoennts of the architecture.

    Oracle Priority Support Infogram for 19-MAR-2015

    Oracle Infogram - Thu, 2015-03-19 15:38

    A new blog I’ve never seen before, Emre Baransel, Support Engineer's Blog, looks good and hands-on. Here are some links:
    TIMESTAMP to DATE Conversion with Online Redefinition
    Standby Database SCN - x$kcvfh
    Auditing on Oracle Database in a Nutshell (11gR2)
    Two from MySQL Enterprise Backup:
    Distributing innodb tables made simpler!
    MySQL Enterprise Backup 3.12.0 has been released
    WebSocket Client API – Java 8, from Pavel Bucek’s Blog.
    From The Java Source: Java 9 and Beyond
    Uploading and showing image file from absolute server path ADF, from WebLogic Partner Community EMEA.
    EPM and BI
    From Business Analytics - Proactive Support:
    Documentation for OBIA - Important Information Please Read.
    Patch Set Update: Oracle Hyperion Essbase Family
    Patch Set Update: Oracle Hyperion Disclosure Management
    Oracle BI Applications now available for download!
    Tons of good videos on these channels:
    Oracle EPMWebcasts Channel Oracle EPM & BI Tutorials YouTube ChannelOracle Learning LibraryCloud Help Center
    From BI & Analytics Pulse: What’s New in Oracle BI Applications
    Service Bus 12c – Exposing a Pipeline as a REST Service, from the SOA & BPM Partner Community Blog.
    And from New Generation Database Access: OAuth 2.0 Security Concepts: Part I "Two Key Use Cases De-Mystified"
    REST Service Editor Query Parameters, from the Oracle Enterprise Pack for Eclipse Blog
    Studio C++
    Boost with Oracle Solaris Studio C++ 12.4, from Studio C++ stories.
    From the Oracle E-Business Suite Technology blog:

    March 2015 Updates to AD and TXK for EBS 12.2

    QlikView Tips & Tricks - part II

    Yann Neuhaus - Thu, 2015-03-19 15:00

    In a previous blog entry, I started to share some Tips & Tricks about the installation and configuration of some QlikView components/software. I will try to complete this list with some other interesting things to know. On this blog entry, I will try to explain how to enable the Task Performance Summary, to debug or at least enable the Communication with Salesforce and how to install the QlikView Management Console Connector (QlikView Management API).

    For the whole blog entry, let's define the following values:

    • %SYS_PROFILE% = C:/Windows/System32/config/systemprofile
    • %QV_SRV_HOME% = D:/Apps/QlikView Server (defined during the QlikView Server installation)
    • %DS_DATA_HOME% = D:/QlikView/DistributionService (defined in the QMC: System ˃ Setup ˃ Distribution Services ˃ QDS@hostname ˃ General ˃ Settings for QDS ˃ Application Data Folder)
    • %PROXY_HOST% =
    • %PROXY_PORT% = 11210
    • %PROXY_PORT_S% = 11211
    • %HOST_FQDN% =
    • %HOST_IP% =
    • %HOST_ALIAS% =
    • %QV_GRPS% = QV_GRP_SUP + QV_GRP_DEV + QV_GRP_ADM (some groups for QlikView, all under the domain "DOMAIN")
    • %QV_SYS_USER% = QV_SYS_USER (the "DOMAIN" user under which QlikView is running)

    Each time you will see one of these parameters or values in the text below, don't forget to replace them with YOUR OWN values. I only associate them for an example and to help you to find a match in your environment.

    I. Task Performance Summary

    Introduced in QlikView 11.2 SR7 and disabled by default, the Task Performance Summary is a new feature of QlikView to analyse the performance of the Tasks (I'm sure you already understood that from the title!). This new feature simply launch a little benchmark during the execution of all tasks to record some useful data like:

    • Name of the process that ran the task with its PID
    • CPU used by the process (Average, Peak)
    • CPU used by the Windows Server (Peak)
    • Virtual RAM used by the process (Average, Peak)
    • Virtual RAM used by the Windows Server (Peak)
    • Physical RAM used by the process (Average, Peak)
    • Physical RAM used by the Windows Server (Peak)
    • Duration of the reload task

    For debugging, performance analysis and performance improvements, it's pretty cool to have this kind of information. Enable the Task Performance Summary is quite simple:

    1. Login to the Windows Server with any Administrator account
    2. Open the file: %SYS_PROFILE%/AppData/Roaming/QlikTech/QlikViewBatch/Settings.ini
      1. Add at the end: EnableQVBProcessSummary=1
      2. Add an empty line at the end of the file (VERY IMPORTANT: the last line MUST be an empty line)
    3. Open a command prompt as Administrator and execute the command: "%QV_SRV_HOME%/Distribution Service/qvb.exe"
    4. In the command prompt, execute another command: services.msc
    5. Restart all QlikView Services
    6. Open the folder: %DS_DATA_HOME%/TaskResults/
    7. Refresh the folder's content until there is a new file created (if nothing new appears, force the execution of a QlikView Task)
    8. Open the last created xml file and check that inside there is a line which include CPU and RAM consumption

    Task1.pngModification of the Settings.ini file to enable the Task Performance Summary

    Task2.pngLine added in the TaskResults' xml files by the Task Performance Summary

    That's it, the Task Performance Summary is now enabled and will record the performance of the future task's executions.

    II. Communication with Salesforce

    If it's your first time with the QlikView Salesforce Connector, then there is one thing that is essential to understand: the QlikView Salesforce Connector requires an internet access to work. To be more precise, the connector will have to be able to access to the Salesforce Website to retrieve some data models that will be used by QlikView for any communication with a Salesforce Data Source. Therefore, if your enterprise network uses a proxy or anything else to prevent or restrict the access to internet, then this will need to be fixed.

    SalesForceIssueNW_P.pngLog file generated during a task execution when the proxy configuration isn't done

    SalesForceIssueW_P.pngLog file generated during a task execution when the proxy configuration is properly done

    On this section, I will just describe how to configure your Windows Server to allow the communication with the Salesforce Website by configuring the proxy settings:

    1. The QlikView Salesforce Connector must be properly installed
    2. Login to the Windows Server with the account under which QlikView is running
    3. Open: Internet Explorer ˃ Internet Options ˃ Connections ˃LAN settings
      1. Click on: Use a proxy server for your LAN
      2. Click on: Bypass proxy server for local addresses
      3. Click on: Advanced
      4. HTTP: Address = %PROXY_HOST%
      5. HTTP: Port = %PROXY_PORT%
      6. Secure: Address = %PROXY_HOST%
      7. Secure: Port = %PROXY_PORT_S%
      8. Exceptions =;localhost;%HOST_FQDN%;%HOST_IP%;%HOST_ALIAS%
    4. Click on: OK (3 times)

    SalesForce1.pngConfiguration of the proxy in the Internet Explorer's options

    After this modification, the communication and therefore the reload of QlikView Documents using Salesforce as a Data Source should be successful.

    III. QMC Connector

    In QlikView by default, the license management through the QlikView Management Console is quite difficult... That's why the QlikView Community is really active on this topic and some solutions have been developed to easily manage the QlikView licenses. The most common solution is to use the QMC Connector. This connector will use the QlikView Management API to manage a lot of things directly from a QlikView Document. The installation of this connector is quite easy:

    1. Download the QlikView Connector:
    2. Login to the Windows Server with any Administrator account
    3. Extract the QVSManager zip files into: C:/Program Files/Common Files/QlikTech/Custom Data/. This will create the folder "QVSManager" and in this folder, there should be 4 files
    4. Create a Windows local group:
      1. Open a command prompt as Administrator and execute: compmgmt.msc
      2. Open: System Tools ˃ Local Users and Groups ˃ Groups
      3. Create a new group with the following entries:
        1. Name = QlikView Management API
        2. Description = QlikView Management API
        3. Members = %QV_GRPS% + %QV_SYS_USER%
      4. Click on: Create
    5. Restart all QlikView Services
    6. Deploy the QlikView Document: QVSCALManager.qvw (I put it in a zip file for convenience)

    QMCConnector1.pngDeployment of the file in the "Custom Data" directory of QlikView

    QMCConnector2.pngCreation and configuration of the Windows Server's local group for the QVSManager

    Once this new QlikView Document is ready (Document deployed, new task created and scheduled, aso...), you should be able to see it in the QlikView AccessPoint and manage the QlikView licenses directly from this new application. Believe me, it will greatly facilitate your work!

    Okay, that was my second blog entry about QlikView, I guess that's enough for now :). I hope some of you found these tips useful and if needed, don't hesitate to let me a little comment below and I'll do my best to help you. See you soon!

    Might need to use Tunneling with Discoverer 11g

    Michael Armstrong-Smith - Thu, 2015-03-19 13:40
    I have noticed a few instances recently of Discoverer 11g Plus failing to open or taking an awful long time to open. In both of the cases where this has been reported to me by my clients, changing the plus communication protocol from Default to Tunneling did the trick.

    To enable tunneling for use with Discoverer Plus, use this workflow:

    1. Launch Enterprise Manager using something like:
    2. Enter your Username and Password. Username is typically Weblogic
    3. Under Farm, on left-hand side, expand Discoverer and Discoverer(11.1.1.x.0)
    4. In the Components window, highlight Discoverer Plus then click the Configure button
    5. In the Communication Protocols window, click the Tunneling radio button (see below)
    6. Click the Apply button
    7. Shut Down the Discoverer service from the top link by clicking on Discoverer | Control | Shut Down - confirm the action
    8. Restart the Discoverer service from the top link by clicking on Discoverer | Control | Start Up - confirm the action (sometimes you have to do this twice)


    The Secret Feature of Bucketsets in Oracle Business Rules

    Jan Kettenis - Thu, 2015-03-19 12:42
    In Oracle Business Rules one can use so-called "Bucketsets". I never liked the term as it is not in the dictionary (did you mean bucketseat?), and never understood what is wrong with "list of values" (LoV) as that is what it is.

    See for example the following bucketset that defines a list of values to be used for some status field:

    Anyway, bucketsets are typically used in decision tables to define the set of values to be used in conditions. Unfortunately you cannot use them to define the set of values to be used in actions. At least, that is what the UI seems to suggest, as bucketsets do not appear in the values you can choose from.

    But don't get fooled, you are being misguided, as it works after all. Just type it in as [bucketset_name].[value_name] and be surprised that it works!

    Funny enough this is not the case for IF-THEN rules.

     Let's call it room for improvement.

    Time to Update the Feed

    Oracle AppsLab - Thu, 2015-03-19 11:40

    For those of you who enjoy our content via the feed (thank you), I have news.

    Next week, I’ll be changing the feed’s name, so if you want to continue to receive AppsLab goodness in your feed reader of choice or in your inbox, you’ll need to come back here and subscribe again.

    Or maybe it’s time to switch over to our Twitter (@theappslab) or Facebook Page, if that’s your thing. I did nuke the Google+ Page, but I doubt anyone will notice it’s gone.

    Nothing else has changed.Possibly Related Posts:

    Our Policy on Cookies and Tracking

    Michael Feldstein - Thu, 2015-03-19 10:00

    By Michael FeldsteinMore Posts (1021)

    In the wake of the Pearson social media monitoring controversy, edubloggers like Audrey Watters and D’arcy Norman have announced their policies regarding code that can potentially track users on their blogs. This is a good idea, so we are following their example.

    We use Google Analytics and WordPress analytics on both e-Literate and e-Literate TV. The main reason we do so is that we believe the information these packages provide help us create more useful content. Even after a decade of blogging, we are still surprised sometimes by which posts earn your attention and which ones don’t. We look at our analytics results fairly regularly to see what we can learn about writing more content that you find to be worth your time. This is by no means the only or even the main way that we decide what we will write, but we think of it as one of relatively few clues we have to understand to which posts and topics will have the most value to you. We do not run ads and have no intention of doing so in the future. In the case of e-Literate TV, where the content is expensive to make, we may also use information regarding the number of viewers of the episodes in the future to demonstrate to sponsors that our content is having an impact. We make no effort to track individuals and, in fact, have always had a policy of letting our readers comment on posts without registering on the site. But Google in particular is likely making more extensive use of the usage data that they gather.

    In addition to the two analytics packages mentioned above, we do embed YouTube videos and use social media buttons, which may carry their own tracking code with them from the companies that supply them. Unfortunately, this is just part of the deal with embedding YouTube videos or adding convenient “Tweet this” links. The tracking code (which usually, but not always, means the same thing as “cookies”) on our site is pretty typical for what you will find for any site that provides these sorts of conveniences.

    But that doesn’t mean that you have to allow yourself to be tracked if you prefer not to be. There are a number of excellent anti-tracking plugins available for the mainstream browsers, including Ghostery and Disconnect. If you are concerned about being tracked (here or anywhere), then we recommend installing one or more of these plugins, and we also recommend spending a little time to learn how they work and what sorts of tracking code are embedded on the different sites you visit so that you can make informed and fine-grained decisions about what information you do and do not want to share. These tools often let you make service-by-service and site-by-site decisions, but they generally start with the default of protecting your privacy by blocking everything.

    To sum up and clarify our privacy policies:

    • We do use Google Analytics and WordPress analytics.
    • We do embed social media tools that in some cases carry their own tracking code.
    • We do not make any effort to track individuals on our sites.
    • We do not use or plan to use analytics for ads or in any way sell the information from our analytics to third parties, including but not limited to ads.
    • We may in the future provide high-level summaries of site traffic and video views to e-Literate TV sponsors.
    • We do support commenting on blog posts without registration.[1]
    • We do provide our full posts in our RSS feed, which excludes most (but not all) tracking code.
    • We do provide CC-BY licensing on our content so that it can be used on other sites, including ones that do not have any tracking code .
    1. Note: We do require an email address from commenters for the sole purpose of providing us with a means of contacting the poster in the event that the person has written something uncivil or marginally inappropriate and we need to discuss the matter with that person privately before deciding what to do about moderation. In the 10-year history of e-Literate, this has happened about three or four times. There are two differences relevant to reader privacy between requiring the email address and requiring registration. First, we allow people to use multiple email addresses or even temporary email addresses if they do not wish that email to be personally identifiable. We only require that the email address be a working address. Second and probably more importantly, without registration, there is no mechanism to link comments to browsing behavior on the site.

    The post Our Policy on Cookies and Tracking appeared first on e-Literate.

    Which PeopleTools version goes with which Application?

    Duncan Davies - Thu, 2015-03-19 06:00

    If you’re ever in the situation where you’re wondering what your options are with PeopleTools versions, and which applications they can be used with, then we have just the document for you.

    It shows you:

    – the Applications, their release dates, and – more critically – the dates that Premier and Extended Support ends

    – the PeopleTools versions, and the date that support ends (yes, 8.52 is now out of support)

    – the combinations of the two, for instance, can you go to Tools 8.53 with a v8.9 application? do we believe that PeopleTools 8.55 will support v9.1 applications?

    – what this means for Fluid. For example, if you’re on v9.1 but upgrade to PeopleTools 8.54, what Fluid functionality do you receive?

    Check out the White Paper here:



    SQL Server: Change Data Capture for Oracle

    Yann Neuhaus - Thu, 2015-03-19 02:55

    This new feature has been introduced in SQL Server 2012 and needs an Enterprise Edition. It uses a Windows Service which scans Oracle Logs and tracks DML changes from Oracle tables into SQL Server change tables.
    In other words, Change data capture records Insert, Update and Delete activities that is applied to Oracle tables.
    Let's see how it works.


    The database where you want to capture changes must be in ARCHIVELOG and OPEN.
    The user which will be used to connect to the Oracle database, must have DBA privileges.

    Change Data Capture services installation

    Installation will be done via msi packages. Those packages are not installed automatically with SQL Server 2012 or 2014. You will find them in your installation media under ToolsAttunityCDCOraclex641033.
    There are two msi packages, one for the CDC Service Configuration named AttunityOracleCdcService.msi and another for CDC Designer named AttunityOracleCdcDesigner.msi.

    Double click on AttunityOracleCdcService.msi and install the package, same for AttunityOracleCdcDesigner.msi.



    When both installations are done, go to the Application Panel and launch “Oracle CDC Service Configuration”.


    We will now have to prepare our SQL Server instance to use it. Each Oracle CDC Service instance lies a single SQL Server instance which will be used to manage it.
    To create this instance click on "Prepare SQL Server" or right click on Local CDC Service and select “Prepare SQL Server”:


    Once it is done select the SQL Server instance where you want to install the MSXDBCDC database and click on the Run button:


    The database is created:


    Let's check from SQL Server Management Studio the newly created database:


    At this point we can create a new CDC service:


    To create the windows service we have to provide the following information:

    • The Service Name
    • Use a local system account for the service account

    In addition, we must provide the following information for the associated SQL Server instance:

    • Server name
    • Authentication and login

    The next step consists in creating a master password for CDC service which will be used to create symmetric key.


    After that we will create an instance from the CDC Designer.
    When I open it, I have to enter the SQL server instance, I have created before, which is associated with the CDC service. Credentials are required to connect to the concerned SQL Server Instance.


    After connecting to the SQL Server I can see all related Oracle CDC Services. Next, after selecting the OracleCDCService1, I will create a new instance for this service:


    Provide a name to the future CDC Instance and then create the change associated database:


    After clicking on “Create Database” button the wizard will assist us to create the new Oracle CDC instance and the change database.


    Click Next.
    We have now to fill out the form with following information:

    • the Oracle connection string to our listener
    • user name
    • password


    Check if the connection to the source is successful:


    Click Next and then click on the Add button to select tables and columns for capturing changes.


    Select the schema and click on the Search button.
    Select the SCOTT.EMP table and click on the Add button.


    A message warns up that the SCOTT_EMP table has been added to the list:


    Now, you can see the table in the list:


    The Capture instance column, here SCOTT_EMP, will be used to name the capture instance specific to each table object in my SQL Server database.

    At this point, no CDC gating role is specified so it means that no gating role will be used to limit access to the change data.

    By default all the columns of the SCOTT.EMP table are selected for CDC. If I want to select just some columns I can click on the Edit button and choose the columns I want in CDC.
    Click on OK when your selection is finished and after click on Next:


    To be able to capture Oracle changes, supplemental logging have to be set up for the Oracle databases tables. For this purpose, a script have been generated automatically and have to be run immediately or later but you have to be aware that changes will not be captured until the script is executed.
    Click on the “Run Script” button:


    In order to run the script some credential must be provided and after click on the Run button:


    The script has been executed with success:


    Click on Next and in the last screen click on the “Run” button to finalize the CDC process:


    It looks like I have some errors...


    Let’s click on Details:


    Apparently I forgot to set up my Oracle database for supplemental logging, let’s do it:


    Now, we can click on the Next button:


    We have successfully created an Oracle CDC instance. Let’s check on my SQL Server:


    The mirror table will be always empty conceptually. The generated deployment script denies all DML permissions on the mirror table.

    I have a new database named OracleCDCInstance1 with, for the moment, an empty table named SCOTT.EMP, which is the table I selected earlier from the wizard.

    Back to my CDC Designer, I see that I have now an OracleCDCInstance1 which is for the moment not started:


    Now let's start the instance:


    The Detailed status has changed from Initial to IDLE:


    It may take a few minutes (one or two) to start change capture process. You may notice the detailed status that will change from IDLE to PROCESSING. Likewise, Processing and Counters areas will also change as oracle logs are ridden.
    Here I performed an update of the salary column in my table SCOTT.EMP from my Oracle database:


    We can see that the twelves operations are reflected in the counters area as twelves reads:


    If the Detailed Status changes to LOGGER instead of PROCESSING, it means that even you have a temporary delay mining Oracle logs and in this case PROCESSING will come back quickly even you have a problem of mining Oracle logs and in this case check the dbo.xdbcdc_trace in the MSXDBCDC database to check errors.

    We are also able to check information from log traces by clicking on the “Collect diagnostics” link which will generate diagnostics data from both Oracle environment and dbo.xdbcdc_trace table into a trace file:


    This feature gives the opportunity to use Change Data Capture in a SQL Server database using an Oracle database as a source. A major advantage of using CDC for Oracle is certainly the reduction of data level latency and at the same time, Oracle ETL knowledge becomes useless. It is also a good way to source SQL Server database with Oracle Data.
    Hope this article will help you, envoy ;-)