11.7.4
Trying to understand how the AI works. This is testing, if I delete all AI files, how to I build them again? Trying to understand this Kbase 46256
It seems that I have to do a prostrct builddb ......
Is it so that I need to get all the .ai files back before doing anyting? I assumed I could rebuild the .ai files and ENABLE the AI again?
Feel a bit confused...
**********************
RECOVERY:
3. Remove the ai file references from the dbname.st file lines starting "a "
$ vi dbname.st
4. Remove the dummy ai files on disk previously created
$ rm dbname.a*
Although this methodology was never supported, in OpenEdge 10.0B and previous versions, it was possible to run PROSTRCT REMOVE against After Image files which did not exist. In OpenEdge 10.1A it's no longer possible to do this so "PROSTRCT builddb" with an up-to-date copy of the <dbname>.st file needs to be used to recreate the database Control Area, which can also be used in earlier versions. Do not list the After Image files that have already been removed in the modified .st file, but be sure to include all other database extents and their full paths.
$ mv dbname.db REN_dbname.db
$ prostrct builddb dbname dbname.st
View dbname.st to see ai files are no longer present but all others are
$ prostrct list dbname
RENABLE AI :
5. Truncate the bi file
$ proutil dbname -C truncate bi
6. Add the required AI extents
$ prostrct add dbname dbname_ai.st
Where the st text file which contains only the ai file definitions (dbname_ai.st)
# dbname_ai.st example
a . f 512000
a . v 512000
a .
7. Enable After-Imaging, AI Management (and replication if needed according to site procedures.)
$ rfutil dbname -C mark backedup
$ rfutil dbname -C aimage begin
$ rfutil dbname -C aiarchiver enable
8. Start the database and take an online PROBKUP
$ proserve dbname [+params]
$ probkup online dbname dbname_newbaseline.backu
*****************************************************************************
> And I will be good to go?
As Ruanne has pointed out you need to edit the .st file and to use prostrct builddb to create new .db file.
Alternate approach:
Disable AI logging, copy any existent AI file to replase the lost one(s) and then enable AI logging.
You can make the replacement of the lost AI files before disabling AI. The order of steps does not matter.
First I have to do this:
But I have a windows platform, so touch is not possible. I also get a SYSTEM ERROR .....a1 is too small 0, blocksize 8192 extend failed.
How can I build a dummy-file that will be ok?
*********************************
A. Recovering from loss of all or some AI files that include the current BUSY AI extent to keep production online until downtime can be scheduled:
OPTION 1: Disable After-Imaging online
(Starting point after the AI files have been removed eg: rm dbname.a*)
1. Replace ALL ai files with the same permissions as the Control Area dbname.db file after reviewing "prostrct list dbname dbname.st" to count current ai files in control area:
$ touch dbname.a1
$ touch dbname.a2
$ touch dbname.a3
2. Disable After-Imaging online
$ rfutil dbname -C aimage aioff
At this point, AI is disabled against the database (and AIMGT and Replication if enabled), new connections can now be made to the database without error, production continues. But the database still has dummy ai files in its Control Area structure which needs to be corrected at the next opportunity to shut the database down.
$ proshut dbname -by -shutdownTimeout immed
************************************
I ended up with a prorest, much simpler, but still not sure how to fix it in windows, without the .ai file
I ended up with a prorest, much simpler, but still not sure how to fix it in windows, without the .ai file
touch can be "emulated" by:
type nul > dbname.a1
As far as unix cli commands go: I recommend downloading Git for Windows which has good set of fulle functional *nix commands to use on a DOS prompt.
On Windows you will not lose AI files while db is online because the files are locked on OS level.
Offline you can disable AI logging even if some AI files are lost:
proenv>proserve sports OpenEdge Release 11.7 as of Mon Mar 27 10:21:51 EDT 2017 15:15:36 BROKER This broker will terminate when session ends. (5405) 15:15:36 BROKER The startup of this database requires 17Mb of shared memory. Maximum segment size is 128Mb. 15:15:36 BROKER 0: ** Cannot find or open file D:\Proapps\Wrk_11.7\sports.a1, errno = 2. (43) 15:15:36 BROKER : Removed shared memory with segment_id: 41025536 (16869) 15:15:36 BROKER ** This process terminated with exit code 1. (8619) proenv>rfutil sports -C aimage end OpenEdge Release 11.7 as of Mon Mar 27 10:21:51 EDT 2017 ** Cannot find or open file D:\Proapps\Wrk_11.7\sports.a1, errno = 2. (43) After-image disabled. (846)
Yes, prorest is the way to go. These are instructions of last resort ;)
The Article 000046256, is specifically for UNIX. The objective of the instruction is to keep production running until you can fix the database structure again.
On Windows you'd get "Permission denied" trying to delete your ai files while the database is running.
The offline repair and recover instruction should work
If you've deleted all AI files, you build them again by ensuring the Control Area is repaired:
$ del foo.a*
$ prostrct list foo (now remove the ai extents from the .st file)
$ del foo.db
$ prostrct builddb foo foo.st (this has every extent except ai files in it)
$ prostrct add foo foo_ai.st (this only has the ai files in it)
prostrct remove command removes a description of extent (a record in _AreaExtent) as the first step.
Then it tries to delete the file itself. And who care if it fails? ;-)
proenv>prostrct remove sports ai OpenEdge Release 11.7 as of Mon Mar 27 10:21:51 EDT 2017 ** Cannot find or open file D:\Proapps\Wrk_11.7\sports.a1, errno = 2. (43) D:\Proapps\Wrk_11.7\sports.a2 successfully removed. (6968) proenv>prostrct remove sports ai OpenEdge Release 11.7 as of Mon Mar 27 10:21:51 EDT 2017 ** Cannot find or open file D:\Proapps\Wrk_11.7\sports.a1, errno = 2. (43) Error locating last extent record of area 12 : After Image Area 1. (6957) proenv>prostrct remove sports ai OpenEdge Release 11.7 as of Mon Mar 27 10:21:51 EDT 2017 Database contains no ai areas. (6954)
There are no needs to use prostrct builddb
> What does this command?
> prostrct builddb foo foo.st
It creates the records in _Area and _AreaExtent system tables based on information in st file.
Control Area (area # 1 or .db file) contains only those two tables.
"proenv>prostrct remove sports ai
OpenEdge Release 11.7 as of Mon Mar 27 10:21:51 EDT 2017
Database contains no ai areas. (6954)
There are no needs to use prostrct builddb"
Actually there is. Try to add ai extents back again without rebuilding the Control Area:
del foo.a3
prostrct remove foo ai
prostrct add foo foo_ai.st
Database add extent: ERROR adding extent: -20010. (6976)
A logical error in shared memory has occurred while adding extents online.
Recovery is performed by restarting the database. (12547)
prostrct add FAILED. (12867)
Ruanne, you're right.
But next 'prostrct add foo foo_ai.st' will be successful.
The lost extent stays in _AreaExtent but not in _FileList.
We can use a database (e.g. start it in multi-user mode) even though we're getting the error # 43 while opening db:
** Cannot find or open file D:\Proapps\Wrk_11.7\sports.a1, errno = 2. (43)
I'd say it's a bug.
So to clearify:
I can do:
(if the example.db has 9 ai extents and I have deleted them all)
prostrct remove example ai
prostrct add example example_only_ai_that_are_removed.st
And I will be good to go?
> And I will be good to go?
As Ruanne has pointed out you need to edit the .st file and to use prostrct builddb to create new .db file.
Alternate approach:
Disable AI logging, copy any existent AI file to replase the lost one(s) and then enable AI logging.
You can make the replacement of the lost AI files before disabling AI. The order of steps does not matter.
I tried to open it in dataadmin without -H and -S. But if I connected with -H and -S I came in without any error. It is a windows server x64. I can proably not do a direct connection when it is started as a server?
How do I check if the AI is working as it should ?
//Geir Otto
Compare the list of _AreaExtent._Extent-path and _Filelist._FileList-Name.
Or simply count the records in both tables.
> But if I connected with -H and -S I came in without any error.
Because broker/servers at startup has already complained about the missed AI extent.