Bij verify data ook foutieve tabelnamen en views die niet in XXXX.sql zitten controleren
svn path=/Website/branches/v2017.3/; revision=37596
This commit is contained in:
@@ -162,7 +162,7 @@ function checker (description, fnCheck, toggler)
|
||||
|
||||
%><table>
|
||||
<thead><tr><th>fac_verify_data.asp $Revision$ <input type='button' onclick='reload()' value='Refresh'>
|
||||
<br>Checking <%= (new Date).toLocaleString() %>
|
||||
<br>Checking <%= toDateTimeString(new Date(), true) %>
|
||||
<br>Customer: <%=customerId%>
|
||||
<br>Database: <%=Oracle.RealConnection.Properties("User Name")+'@'+Oracle.RealConnection.Properties("Data source") %>
|
||||
<% if (user_key > 0) Response.Write("<br>User: " + user.naam()); %>
|
||||
@@ -171,6 +171,67 @@ function checker (description, fnCheck, toggler)
|
||||
<%
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
// Check for other queries that should yield no records
|
||||
__GROUP = "DATABASE META CONSISTENTIE";
|
||||
checker("Meta consistentie van de database, belangrijk om te controleren voor oplevering",
|
||||
function ()
|
||||
{
|
||||
var noResults = [{ msg: "FAC_VERSION is niet goed gevuld",
|
||||
sql: "SELECT * FROM fac_version"
|
||||
+ " WHERE fac_version_cust IS NULL"
|
||||
// Deprecated + " OR fac_version_custnr IS NULL"
|
||||
// Deprecated + " OR fac_version_otap IS NULL"
|
||||
+ " OR fac_version_lang IS NULL"
|
||||
},
|
||||
{ msg: "FAC_VERSION is ongelijk aan customerId",
|
||||
sql: "SELECT * FROM fac_version"
|
||||
+ " WHERE UPPER(fac_version_cust) <> " + safe.quoted_sql(customerId)
|
||||
},
|
||||
{ msg: "'Vervangen imports' moeten weggehaald worden (of naar WEB_FACFAC)",
|
||||
sql: "SELECT *"
|
||||
+ " FROM fac_import_app fia, fac_functie ff"
|
||||
+ " WHERE fac_import_app_code LIKE '%_DEL' "
|
||||
+ " AND fia.fac_functie_key = ff.fac_functie_key"
|
||||
+ " AND fac_functie_code <> 'WEB_FACFAC'"
|
||||
},
|
||||
{ msg: "Datatype MLD_T_UITVOERTIJD.TIJDSDUUR is te klein (gebruik DB23aTO23b.sql)",
|
||||
sql: "SELECT type_name, attr_name, precision"
|
||||
+ " FROM user_type_attrs"
|
||||
+ " WHERE type_name = 'MLD_T_UITVOERTIJD' "
|
||||
+ " AND attr_name = 'TIJDSDUUR'"
|
||||
+ " AND precision < 12"
|
||||
},
|
||||
{ msg: "Vreemde tabelnamen die waarschijnlijk gedropped moeten worden",
|
||||
sql: "SELECT *" +
|
||||
" FROM user_objects" +
|
||||
" WHERE SUBSTR (object_name, 1, 4) NOT IN ('ALG_', 'ADM_', 'AUT_', 'BGT_', 'BES_', 'BEZ_'," +
|
||||
" 'CAD_', 'CNT_', 'CTR_', 'FAC_', 'FAQ_', 'FIN_'," +
|
||||
" 'IMP_', 'INS_', 'KPI_', 'MAR_', 'MLD_', 'MRK_'," +
|
||||
" 'MSG_', 'PRJ_', 'PRS_', 'RES_', 'WEB_')" +
|
||||
" AND SUBSTR(object_name, 1, 5) NOT IN('PCHX_', 'CARE_', 'AAXX_')" +
|
||||
" AND object_name NOT LIKE SUBSTR(USER, 1, 4) || '%'" +
|
||||
" AND object_name NOT LIKE 'T_' || SUBSTR(USER, 1, 4) || '%'" +
|
||||
" AND object_type = 'TABLE'" +
|
||||
" ORDER BY object_name"
|
||||
},
|
||||
{ msg: "Views niet gewijzigd met de laatste {0}.sql. Deze moeten waarschijnlijk gedropped worden of opgenomen in {0}.sql".format(customerId),
|
||||
sql: "SELECT object_name, created, last_ddl_time," +
|
||||
" (SELECT MAX (adm_tracking_date)" +
|
||||
" FROM adm_tracking" +
|
||||
" WHERE UPPER (adm_tracking_name) = SUBSTR(USER, 1, 4) || '.SQL') \"last {0}.sql\"".format(customerId) +
|
||||
" FROM user_objects" +
|
||||
" WHERE object_type = 'VIEW'" + // 'CREATE OR REPPLACE PROCEDURE werkt ddl_time helaas niet bij lijkt het
|
||||
" AND object_name LIKE SUBSTR(USER, 1, 4) || '%'" +
|
||||
" AND last_ddl_time < (SELECT MAX (adm_tracking_date)" +
|
||||
" FROM adm_tracking" +
|
||||
" WHERE UPPER (adm_tracking_name) = SUBSTR(USER, 1, 4) || '.SQL') -1"
|
||||
}];
|
||||
return fnNoresults(noResults);
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
__GROUP = "DATABASE CONSISTENTIE";
|
||||
// check the disc_params tables that should have an equal number of records
|
||||
checker("Controle xxx-disc_params",
|
||||
@@ -226,36 +287,65 @@ checker("Controle xxx-disc_params",
|
||||
}
|
||||
)
|
||||
|
||||
function fnNoresults(noResults)
|
||||
{
|
||||
var messages = [];
|
||||
for (noResult in noResults)
|
||||
{
|
||||
if (!Response.IsClientConnected)
|
||||
{
|
||||
__DoLog("Response.IsClientConnected false, Aborting.", "#00FF00");
|
||||
Response.End;
|
||||
}
|
||||
var oRs = Oracle.Execute("SELECT COUNT(*) FROM ("+noResults[noResult].sql+")");
|
||||
var cnt = oRs(0);
|
||||
if (cnt>0)
|
||||
{
|
||||
var txt = ["<span class='fcltmsg'>" + noResults[noResult].msg + " ("+cnt+")</span>",
|
||||
"<span class='fcltsql'>" + noResults[noResult].sql + "</span>"];
|
||||
if (cnt < 10) // Dan tonen we de data
|
||||
{
|
||||
oRs.Close();
|
||||
var oRs = Oracle.Execute(noResults[noResult].sql);
|
||||
tbl = ["<table>", "<thead>", "<tr>"];
|
||||
for (var i = 0; i < oRs.Fields.Count && i < 5; i++)
|
||||
{
|
||||
tbl.push("<th style='text-align:left'>" + safe.html(oRs.Fields(i).Name) + "</th>");
|
||||
}
|
||||
tbl.push("</tr>");
|
||||
tbl.push("</thead>");
|
||||
while (!oRs.Eof)
|
||||
{
|
||||
tbl.push("<tr>");
|
||||
for (var i = 0; i < oRs.Fields.Count && i < 5; i++)
|
||||
{
|
||||
tbl.push("<td>" + safe.html(oRs(i).Value) + "</td>");
|
||||
}
|
||||
tbl.push("</tr>");
|
||||
oRs.MoveNext();
|
||||
}
|
||||
tbl.push("</table>");
|
||||
txt.push(tbl.join(""));
|
||||
}
|
||||
messages.push(txt.join("<br>"));
|
||||
}
|
||||
oRs.Close();
|
||||
}
|
||||
if (!messages.length)
|
||||
return { result: resultcodes.ok,
|
||||
info: String(noResults.length) + " checks",
|
||||
message: "No problems detected" };
|
||||
else
|
||||
return { result: resultcodes.error,
|
||||
info: String(noResults.length) + " checks",
|
||||
message: messages.join("\n<p>") };
|
||||
}
|
||||
|
||||
// Check for other queries that should yield no records
|
||||
checker("Controle queries die geen records mogen opleveren",
|
||||
function ()
|
||||
{
|
||||
var noResults = [{ msg: "FAC_VERSION is niet goed gevuld",
|
||||
sql: "SELECT * FROM fac_version"
|
||||
+ " WHERE fac_version_cust IS NULL"
|
||||
// Deprecated + " OR fac_version_custnr IS NULL"
|
||||
// Deprecated + " OR fac_version_otap IS NULL"
|
||||
+ " OR fac_version_lang IS NULL"
|
||||
},
|
||||
{ msg: "FAC_VERSION is ongelijk aan customerId",
|
||||
sql: "SELECT * FROM fac_version"
|
||||
+ " WHERE UPPER(fac_version_cust) <> " + safe.quoted_sql(customerId)
|
||||
},
|
||||
{ msg: "'Vervangen imports' moeten weggehaald worden (of naar WEB_FACFAC)",
|
||||
sql: "SELECT *"
|
||||
+ " FROM fac_import_app fia, fac_functie ff"
|
||||
+ " WHERE fac_import_app_code LIKE '%_DEL' "
|
||||
+ " AND fia.fac_functie_key = ff.fac_functie_key"
|
||||
+ " AND fac_functie_code <> 'WEB_FACFAC'"
|
||||
},
|
||||
{ msg: "Datatype MLD_T_UITVOERTIJD.TIJDSDUUR is te klein (gebruik DB23aTO23b.sql)",
|
||||
sql: "SELECT type_name, attr_name, precision"
|
||||
+ " FROM user_type_attrs"
|
||||
+ " WHERE type_name = 'MLD_T_UITVOERTIJD' "
|
||||
+ " AND attr_name = 'TIJDSDUUR'"
|
||||
+ " AND precision < 12"
|
||||
},
|
||||
// meldingen met flexkenmerken van verschillende stdmeldingen *tegelijk*
|
||||
var noResults = [// meldingen met flexkenmerken van verschillende stdmeldingen *tegelijk*
|
||||
// Dit is in de praktijk ook problematisch (FSN#18613):
|
||||
{ msg: "meldingen met mld-flexkenmerken van verschillende stdmeldingen. Problematisch (FSN#18613)",
|
||||
sql: "SELECT mld_melding_key, COUNT ( * )"
|
||||
@@ -523,6 +613,7 @@ checker("Controle queries die geen records mogen opleveren",
|
||||
+ " AND rsk.res_srtkenmerk_kenmerktype IN ('D') "
|
||||
+ " AND res_kenmerk_default IS NOT NULL "
|
||||
+ " AND res_kenmerk_verwijder IS NULL "
|
||||
+ " AND res_kenmerk_default NOT LIKE '##SQL##%'"
|
||||
},
|
||||
{ msg: "MLD referentie kenmerken met ongeldige default",
|
||||
sql: "SELECT mk.mld_kenmerk_key, mld_srtkenmerk_omschrijving, mld_srtkenmerk_kenmerktype, mld_kenmerk_default"
|
||||
@@ -532,6 +623,7 @@ checker("Controle queries die geen records mogen opleveren",
|
||||
+ " AND mld_kenmerk_default IS NOT NULL "
|
||||
+ " AND mld_kenmerk_verwijder IS NULL "
|
||||
+ " AND fac.safe_to_number (mld_kenmerk_default) IS NULL "
|
||||
+ " AND mld_kenmerk_default NOT LIKE '##SQL##%'"
|
||||
},
|
||||
{ msg: "MLD datum kenmerken met default, zeer onwaarschijnlijk",
|
||||
sql: "SELECT mk.mld_kenmerk_key, mld_srtkenmerk_omschrijving, mld_srtkenmerk_kenmerktype, mld_kenmerk_default"
|
||||
@@ -762,57 +854,7 @@ checker("Controle queries die geen records mogen opleveren",
|
||||
+ " SELECT prs_werkplek_key FROM prs_perslidwerkplek"
|
||||
}
|
||||
)
|
||||
|
||||
var messages = [];
|
||||
for (noResult in noResults)
|
||||
{
|
||||
if (!Response.IsClientConnected)
|
||||
{
|
||||
__DoLog("Response.IsClientConnected false, Aborting.", "#00FF00");
|
||||
Response.End;
|
||||
}
|
||||
var oRs = Oracle.Execute("SELECT COUNT(*) FROM ("+noResults[noResult].sql+")");
|
||||
var cnt = oRs(0);
|
||||
if (cnt>0)
|
||||
{
|
||||
var txt = ["<span class='fcltmsg'>" + noResults[noResult].msg + " ("+cnt+")</span>",
|
||||
"<span class='fcltsql'>" + noResults[noResult].sql + "</span>"];
|
||||
if (cnt < 10) // Dan tonen we de data
|
||||
{
|
||||
oRs.Close();
|
||||
var oRs = Oracle.Execute(noResults[noResult].sql);
|
||||
tbl = ["<table>", "<thead>", "<tr>"];
|
||||
for (var i = 0; i < oRs.Fields.Count && i < 5; i++)
|
||||
{
|
||||
tbl.push("<th style='text-align:left'>" + safe.html(oRs.Fields(i).Name) + "</th>");
|
||||
}
|
||||
tbl.push("</tr>");
|
||||
tbl.push("</thead>");
|
||||
while (!oRs.Eof)
|
||||
{
|
||||
tbl.push("<tr>");
|
||||
for (var i = 0; i < oRs.Fields.Count && i < 5; i++)
|
||||
{
|
||||
tbl.push("<td>" + safe.html(oRs(i).Value) + "</td>");
|
||||
}
|
||||
tbl.push("</tr>");
|
||||
oRs.MoveNext();
|
||||
}
|
||||
tbl.push("</table>");
|
||||
txt.push(tbl.join(""));
|
||||
}
|
||||
messages.push(txt.join("<br>"));
|
||||
}
|
||||
oRs.Close();
|
||||
}
|
||||
if (!messages.length)
|
||||
return { result: resultcodes.ok,
|
||||
info: String(noResults.length) + " checks",
|
||||
message: "No problems detected" };
|
||||
else
|
||||
return { result: resultcodes.error,
|
||||
info: String(noResults.length) + " checks",
|
||||
message: messages.join("\n<p>") };
|
||||
return fnNoresults(noResults);
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user