Physical Data Mapping

BCM

Member
I am seeking technical information that describes the location of data in the physical files of the Progress database. Specifically, I wish to locate the addresses where the _Width column is located for any column of any table in the database.
 

bulklodd

Member
Specifically, I wish to locate the addresses where the _Width column is located for any column of any table in the database.

In general it's imposible. _Width column is not something special, it's an ordinary column in _field table. DB manager decides how each record must be kept and this decision depends on many factors: block size, number of slots and many many others. As I remember a record recid is related to a physical address, but it's useless when a record is splitted.
Read this article to understand how db manager makes a decision about record place.
http://www.peg.com/techpapers/monographs/space/space.html
 

joey.jeremiah

ProgressTalk Moderator
Staff member
( scratch head ) i don't fully understand your question ;)

if you're looking for the schema information you can access them directly
thru schema tables ( _<something> ) similar to the virtual system tables for misc stats etc.

in particular you can find the sql width in the _field table

<snippet>
for each _file no-lock,
each _field of _file no-lock:
display _file._file-name _field._field-name _field._format _field._width.
</snippet>

if you're looking to change the sql width property ofcourse do not change them directly
use the data dictionary > options > adjust field width

and use the dbtool utility to fix sql width violations and find incompatible values

but i'd recommend going over the docs first, just incase


other then that the progress database doesn't have fixed size space for fields
fields are variable length, formats only specify how they're displayed
 

BCM

Member
If it is impossible then how can dbTool modify the SQL Width - which is stored in the _Width column of the _Field table - while users are using the database?
 

bulklodd

Member
If it is impossible then how can dbTool modify the SQL Width - which is stored in the _Width column of the _Field table - while users are using the database?

You should ask Gus :) You're talking about the inner progress utility! I suppose progress utility knows the inner structure of db and it can use inner api to work with db. But this information is not public, we have the monographs only :)
 

BCM

Member
My hypothesis:
Progress does not need the _Width; that is for SQL connections.
Therefore, changing _Width while the database is in use should pose no problem for the Progress database nor Progress 4GL programs.

Why should Progress prevent the update when the database is in use?
Probable answer: Because the database operates on a set of
rules that have nothing to do with SQL, and the programmers
who implemented the ODBC interface missed this until version 10.

For some of us, this is a real problem. The only way this is not a problem is for those with all reporting handled by Progress 4GL routines.
 

joey.jeremiah

ProgressTalk Moderator
Staff member
sounds more like a PEG question ...
personally i would never ask these type of questions in progressTalk

i haven't used the dbtool util, is it a schema lock issue ?


do you really want to get into the physical data on disk ???
you can extract blocks using proutil dbrpr

but even if you do they're not just simple c structures
it would be pretty hard to decypher them

although, i think, there is a util at the PEG utilities page
written in c that directly traverse the database ( not sure for what version though )


generally speaking, recid are the records location inside an area
what block and what record slot in the block, that's it
 

joey.jeremiah

ProgressTalk Moderator
Staff member
WHO'S GUS !!! HOW DARE YOU SIR, HOW DARE YOU :)


i think Gus Bjorklund ( aka the wizard ) is vp of technology at the moment
he was also president of the real time division for a while

more importantly, i think, he headed the engine crew for a long time
and responsible for writing most of the progress database server

http://www.progress.com/about_us/leadership_team/bioitem.ssp?FUELAP_SITEDBID=SITE%5F%2D66&FUELAP_OP=FUELOP_NewScreen&DBID=BIODETAILS%5F105454&EXECTEMPLATE=false&

in any case you can speak to him directly at peg
although i think it would be rude to address him personally in a public forum

( kind of nice, it's not every day you can speak to a vp
of a billion dollar company )

but there are other amazing dba gurus at peg
like george potemkin and dan foreman to name a few
who know the database by heart, to say the least
 

BCM

Member
My employer licenses Progress ver 9.1D to support a commercial application we license. Our network guy has been to Progress school. I've worked with Progress on-and-off for 8 years. I have never particpated in PEG. How do I participate?
 

bulklodd

Member
My hypothesis:
Progress does not need the _Width; that is for SQL connections.
Therefore, changing _Width while the database is in use should pose no problem for the Progress database nor Progress 4GL programs.
I agree
Why should Progress prevent the update when the database is in use?
Probable answer: Because the database operates on a set of
rules that have nothing to do with SQL, and the programmers
who implemented the ODBC interface missed this until version 10.

I can only guess. I think it's related to the common approach, the metascheme (_field table is related to it also) can be changed only if you have 'scheme' lock and it's a rule. And from the point of view of db manager _field._width and _field._field-name fields are alike.

You may ask your question in PEG but I think it's useless, it's too inner information.
 

joey.jeremiah

ProgressTalk Moderator
Staff member
i hope i don't get kicked off this forum for doing this ( again :)


progresstalk is more of a pet forum
peg is where the real things happen

peg is an email group not a web forum
i think, it's been around since the 90's

all you have to do is go to the subscription page
http://www.peg.com/lists/subscribe.html

mark the topical lists you want to participate
and enter you email address

i think for your purposes subscribe to
the peg ( general ) and dba lists

i'd recommend opening a new mail account, there's a high volume of post's
if you'd like i can send you a gmail invite


just a word of caution peg is a very moderated forum
some of the behavior that's tolerated in progresstalk isn't at peg

i'd recommend going over the welcome page first
http://www.peg.com/welcome.html


i remember my first time :)
 

joey.jeremiah

ProgressTalk Moderator
Staff member
you can speak freely... just be more pc about it :)

who knows maybe it'll change your mind ?

in anycase you have to try out peg !
 
Top