Because the P6 Extended Schema is the lifeline of data for Primavera Analytics it is an important topic to cover.
There are two white papers which go into depths about the feature, how to setup, how it works, and some advanced configurations and techniques.
The key to having project publish is a job service called the Arbiter. If you query the jobsvc table as admuser you will see this job.
select * from jobsvc where job_type = 'JT_ProjectArbiter';
When this job runs it looks through your projects to see which ones have changes, which have crossed the time threshold, and which have been marked as 'Publish Now' and
adds these projects to the queue. Without this service running no projects would be published.
In a scenario where your database has crashed or other environmental issues may cause this job to be stuck in a running or bad state you will want to get it running again as quickly as
possible. One way would be to put a monitor on this row and trigger a database alert if it is stuck in running state for an extended period of time or does not run on the designated schedule.
If the arbiter is running ok but some projects might not be getting processed there are a few reasons:
1- There are no changes on the project so there is no need to process it. As discussed in an earlier blog not all changes on the project count as a change, changing a code or udf assignment wouldn't count as a change.
2- There is a setting called 'Publish Idle Projects.' This really only occurs when you first turn on publication. At that time it will go through all projects with enable publication
checked and process them, when it is completed this is turned off. It is turned off by altering a value - ProjectNonDemandStopKey - in the Settings table to zero. If this setting
is zero then new projects will not be published until they have changes, have been scheduled, or have been opted in by choosing 'Publish Now.' You can turn this back on from the database
by running the following as admuser:
update SETTINGS set setting_value = (select max(proj_id) from project)
where SETTING_NAME = 'ProjectNonDemandStopKey';
This will force the arbiter to go through and add any unpublished projects into the queue. Once it has completed those projects it will set itself back to zero and turn off.
3- Is a rare scenario where none of the above conditions have been met and you just want to force in all unpublished projects. You could run the following:
update project set px_next_date = sysdate where proj_id in
(select proj_id from project
where PX_ENABLE_PUBLICATION_FLAG = 'Y'
and PX_LAST_UPDATE_DATE is null;
We will have more blogs discussing the Project and Global publication services. This one is intended to give a little more background on the services.