On 28-Jan-2015 09:48 -0600, Mike Cunningham wrote:
We have one system where the entire schema was created using SQL
commands. Journaling was setup automatically. All was good.
CREATE SCHEMA [or CREATE COLLECTION] will effect automatic creation
of the *JRN object QSQJRN to which all TABLE objects for CREATE TABLE
will automatically be journaled. Both because the journal object name
is not unique across the system\iASP [for which recovery potentially can
be impacted] and for issues like the origin for this topic, use of the
defaults for those [synonymous] CREATE statements is not ideal.
We then had a need to replicate the entire schema to a new name for
a training so saved the production library and restored to the
training library. That all appeared to work. All objects that were in
the production schema were created in the training version. Including
the journal object.
Apparently the action was to effect Restore Library (RSTLIB) to a new
library name; and on the same system\iASP? Besides the journaling, the
catalog VIEW objects would be in error with that scenario; recovery for
that is to CALL QSQXRLF (DLT 'NewLibName') optionally followed by the
same call but the token CRT for the first parameter to effect the
recreate of those VIEW objects with the new library name.
What we didn't notice was that the training files were all attached
to the journal in production. It worked but was not as it should be
There should have been a bunch of ugly-looking diagnostic conditions
logged during the restore, to indicate the duplicate-JID condition being
resolved. I seem to recall that the restore request would have ended
with an exception, to bring attention to the logged conditions.?
so we were doing a process of ending journaling on all the training
library tables and access paths and reattaching them to the journal
in the training library. Was on a command line using ENDJRNPF and
ENDJRNAP then STRJRNPF and STRJRNAP. That all went OK until we hit an
SQL VIEW. The VIEW object was showing as an LF type but neither
ENDJRNPF or ENDJRNAP would work. Each said the object was not of the
correct type.
Presumably that was the msg CPF7002 "File &1 in library &2 not a
physical file."
A logical file [different from the Access Paths of a logical file]
can be implicitly journaled. Implicit journaling of the logical file
can be ignored in possibly all cases; perhaps this is an exception, for
which the effects may not be desirable, yet if there is no actual
problematic effect that can be articulated [such as recovery fails],
then the effect would be a restriction, because the status of
/journaled/ remains valid. An attempt to End Journal Object (ENDJRN) is
AFaIK, also unsupported; I expect the ENDJRN command also effectively
would complain of the file type, but I suppose with a msg CPE3440
"Operation not supported."
AIUI the implicit journaling should be controlled entirely by the
database (DB) feature. After the underlying physical file objects are
no longer journaled, the implicit journaling should implicitly be
removed or reestablished to the other journal after the underlying data
has been assigned to that other journal. I can see how that effect
would be unlikely in the given scenario, up to that point, such that
until some action against the VIEW for which implicit journaling was
[again] required, the VIEW might remain journaled to the old\original;
as I do not fully understand the details about that feature of implicit
journaling of the LF, that the object is journaled when required may be
the only concern, such that to what journal is immaterial.
To get by the errors we had to delete the VIEW in the training
library and recreate it in the training library.
Was the VIEW still showing as journaled, or merely showing the
historical journaled-to information? Even if still journaled, that
apparent illogical condition might be easily ignored with no
ill-effects. Given there is no support to effect [a nonexistent]
ENDJRNLF, explicit or programmed attempts to end journaling of the LF
[for other than Access Paths] are going to fail, so easily circumvented
by simply not making that attempt.
I expect the proper outcome was, as noted above, that the implicit
journaling would have been ended; optionally journaling started again,
to the same journal as the underlying data, if\when journaling was
deemed to be required, just as had transpired when the VIEW was first
implicitly journaled. If the journal to which the LF gets journaled is
immaterial such that the latent assignment is never replaced, then
perhaps the DB feature better would have established a journal much like
those in QUSRSYS [for a moment I thought of the journals like QSQTTJRN
in QRECOVERY, but for what the implicit journaling effects, I am sure a
journal that was saved\restored as part of DR is required; thus the
choice of the journal of the underlying data].
I did not think about it until we were done but should we have done
this process using Navigator or some way using STRSQL to adjust
object journaling?
One method is to pre-create the library as a non-SQL library, and
then Start Journal Library (STRJRNLIB) to request the library function
much like the SQL COLLECTION, but preferably with a journal object name
other than QSQJRN. There is also the deprecated QDFTJRN Data Area
(DTAARA) support; I recall however, documenting support missing from the
STRJRNLIB support, and IIRC that was even something related to restore
activity. If the catalog VIEW files are required, then the
aforementioned QSQXRLF program can be used to make the non-SQL library
look and act even more like a SQL SCHEMA.
As an Amazon Associate we earn from qualifying purchases.