SQL Queries
- Utility Queries
- SPF Queries
- Check the documents count
- Clean up terminated records in SPF
- Find VTL Tables related to Jobs
- Query Classification Tree
- Query EnumListTypes Tree
- Query Classifications with Enums
- Query Enums numbers
- Query Import Definition Order Values
- Query the missing files in the vault
- Password Reset
- Find documents without security code
- Find interfaces for a object by name
- Resolve @DOCCLASSIFICATIONNAMESINCREATECONFIG_OR_ALL@
Utility Queries
Setup new database and user
For Oracle
--Create tablespace
create tablespace username_data datafile '<oradatapath>\dbname\username_data.dbf' size 50M;
alter database datafile '<oradatapath>\dbname\username_data.dbf' autoextend on next 5M;
--Create tempaory tablespace
create temporary tablespace username_dataTemp tempfile '<oradatapath>\dbname\username_dataTemp.dbf' size 50M;
alter database tempfile '<oradatapath>\dbname\username_dataTemp.dbf' autoextend on next 5M;
--Drop existing user
DROP USER username_data CASCADE;
GRANT connect TO username_data identified BY oracle;
GRANT resource TO username_data;
ALTER USER username_data quota unlimited ON username_data;
ALTER USER username_data DEFAULT tablespace username_data;
ALTER USER username_data temporary tablespace username_dataTemp;
--GRANT dba TO username_data;
GRANT CONNECT, RESOURCE TO username_data;
GRANT unlimited tablespace TO username_data WITH admin OPTION;
COMMIT;
For MsSql
---Create database
CREATE DATABASE usernamedata
ALTER DATABASE usernamedata MODIFY FILE
(NAME = 'usernamedata', SIZE = 400MB, FILEGROWTH = 50MB)
GO
---Create User
USE [master]
GO
CREATE LOGIN username_data WITH PASSWORD=N'oracle', DEFAULT_DATABASE=usernamedata, CHECK_POLICY=OFF
GO
Search for tables and columns
For Oracle
--SEARCH TABLE NAMES
SELECT t.owner, t.table_name
FROM ALL_TABLES t
WHERE t.owner LIKE 'SRSADMIN%'
AND UPPER(t.table_name) LIKE 'EF%'
GROUP BY t.owner, t.table_name
--SEARCH COLUMN NAMES
SELECT t.owner, t.table_name, c.column_name
FROM ALL_TABLES t
join ALL_TAB_COLUMNS c ON t.table_name = c.table_name
AND UPPER(t.owner) LIKE 'SRSADMIN%'
AND UPPER(c.column_name) LIKE '%METHOD%'
GROUP BY t.owner, t.table_name, c.column_name
For MsSql
--SEARCH TABLES
SELECT USER_NAME(SO.UID)
,SO.NAME TABLE_NAME
,SO.XTYPE TYPE
FROM SYSOBJECTS SO
WHERE UPPER(SO.NAME) LIKE '%cmpnt_func_type_name%'
AND SO.XTYPE IN ('U','V')
GROUP BY
USER_NAME(SO.UID)
,SO.NAME
,SO.XTYPE
--SEARCH COLUMNS
SELECT USER_NAME(SO.UID)
,SO.NAME TABLE_NAME
,SC.NAME COLUMN_NAME
,SO.XTYPE TYPE
FROM SYSOBJECTS SO
JOIN SYSCOLUMNS SC
ON SO.ID = SC.ID
AND UPPER(SC.NAME) LIKE '%PD_UDF_C04%'
GROUP BY USER_NAME(SO.UID)
,SO.NAME
,SC.NAME
,SO.XTYPE
Re-index tables
For MsSql
EXEC sp_MSforeachtable @command1="print '?' DBCC DBREINDEX ('?', ' ', 80)"
GO
EXEC sp_updatestats
GO
Find row count in all tables
For MsSql
SELECT SCHEMA_NAME(schema_id) AS [SchemaName],
[Tables].name AS [TableName],
SUM([Partitions].[rows]) AS [TotalRowCount]
FROM sys.tables AS [Tables] JOIN sys.partitions AS [Partitions]
ON [Tables].[object_id] = [Partitions].[object_id]
AND [Partitions].index_id IN ( 0, 1 )
--WHERE [Tables].name = N'name of the table'
GROUP BY SCHEMA_NAME(schema_id),
[Tables].name
ORDER BY TotalRowCount;
SPF Queries
Check the documents count
SELECT config AS config,
count(1) AS docs
FROM DOCOBJ
WHERE OBJDEFUID = 'FDWDocumentMaster'
GROUP BY config;
Clean up terminated records in SPF
For MsSql
IF EXISTS(SELECT name FROM sysobjects WHERE id = OBJECT_ID('dbo.sp_delete_all_terminated_Objects'))
BEGIN
DROP PROCEDURE dbo.sp_delete_all_terminated_Objects
END
GO
CREATE PROCEDURE dbo.sp_delete_all_terminated_Objects
AS
BEGIN
DECLARE @id INT
DECLARE @count VARCHAR(256)
DECLARE @rowcount TABLE (Value int);
DECLARE @SELECTSQL VARCHAR(2000)
DECLARE @SELECTSQL2 VARCHAR(2000)
DECLARE @IFEXISTSSQL VARCHAR(3000)
DECLARE @tablename VARCHAR(256)
DECLARE @schemaname VARCHAR(256)
/*
dbo.sp_delete_all_terminated_Objects
*/
CREATE TABLE #vtlTempTables(
dropSql NCHAR(2000)
)
CREATE TABLE #tableswithterminationDate(
tablename NCHAR(256)
,numberofrows NCHAR(256)
,schemaname NCHAR(256)
,id INT identity(1,1)
,found BIT
,selectsql VARCHAR(2000)
)
PRINT 'Before running this proc, close all application which use this database'
INSERT INTO #vtlTempTables(
dropSql
)
SELECT 'DROP TABLE ' + RTRIM(user_name(so.uid)) + '.' + so.name + ';'
FROM sysobjects so
WHERE so.xtype in ('U', 'V')
AND so.name like 'VTL%'
AND SO.NAME NOT IN ('VTLOBJ', 'VTLOBJIF', 'VTLOBJPR', 'VTLOBJPRDETAIL', 'VTLREL')
GROUP BY so.xtype
, so.name
, user_name(so.uid)
select * from #vtlTempTables;
INSERT INTO #tableswithterminationDate(
tablename
,schemaname)
SELECT so.name
, user_name(so.uid) as tableschema
FROM sysobjects so join syscolumns sc on so.id = sc.id
AND sc.name = 'TERMINATIONDATE'
AND so.xtype in ('U')
AND type_name(sc.xtype) in ('nchar', 'char', 'nvarchar', 'varchar')
GROUP BY sc.name
, so.xtype
, so.name
, user_name(so.uid)
ORDER BY tableschema desc ;
SELECT @id =MAX(id) FROM #tableswithterminationDate
WHILE (@id is NOT NULL)
BEGIN
SELECT @tablename = tablename
, @schemaname = schemaname
FROM #tableswithterminationDate
WHERE id = @id
SELECT @SELECTSQL = 'SELECT count(1) FROM ' + RTRIM(@schemaname) + '.' + RTRIM(@tablename) + ' WHERE TERMINATIONDATE <> ''9999/12/31-23:59:59:999''';
SELECT @SELECTSQL2 = 'DELETE FROM ' + RTRIM(@schemaname) + '.' + RTRIM(@tablename) + ' WHERE TERMINATIONDATE <> ''''9999/12/31-23:59:59:999'''';';
print(@SELECTSQL)
INSERT INTO @rowcount EXEC(@SELECTSQL)
SELECT @count = Value FROM @rowcount;
print(@count)
SELECT @IFEXISTSSQL = 'IF ( ' + @count + ' > 0 )' +
' BEGIN' +
' UPDATE #tableswithterminationDate' +
' SET found = 1' +
' , selectsql = ''' + @SELECTSQL2 + '''' +
' , numberofrows = ' + @count +
' WHERE id = ' + CONVERT(VARCHAR(16), @id) +
' END'
EXEC(@IFEXISTSSQL)
SELECT @id=MAX(id) FROM #tableswithterminationDate WHERE id < @id
END
SELECT *
FROM #tableswithterminationDate
WHERE found = 1
DROP table #tableswithterminationDate
DROP table #vtlTempTables
END
Find VTL Tables related to Jobs
For MsSql
SELECT USER_NAME(SO.UID)
,SO.NAME TABLE_NAME
,SO.XTYPE TYPE
,SCO.OBJNAME
,SCO.OBJDEFUID
FROM SYSOBJECTS SO
--JOIN DATAOBJ SCO
JOIN SCLBOBJ SCO
on SO.name like '%' + SCO.OBID + '%'
AND SO.XTYPE IN ('U','V')
and sco.OBJDEFUID in ('SCLBSubmittal', 'SDALoader')
--and SCO.OBJNAME = 'SUB_INC-A056_0005'
GROUP BY
USER_NAME(SO.UID)
,SO.NAME
,SO.XTYPE
,SCO.OBJNAME
,SCO.OBJDEFUID
Query Classification Tree
For MsSql
WITH rightTable(lobjname, lobjdesc, breadcrum, robjname, robjdesc, lobjuid, robjuid, reldef, lvl) AS (
SELECT leftdata.objname, leftdata.DESCRIPTION, CAST(leftdata.objname as nvarchar(max)) as breadcrum, rightdata.objname, rightdata.DESCRIPTION, leftdata.objuid, rightdata.objuid, dr.defuid, 1 as lvl
FROM dataobj leftdata
JOIN datarel dr
ON leftdata.objuid = dr.uid1
and dr.defuid = 'SPFClassMember'
JOIN dataobj rightdata
ON rightdata.objuid = dr.uid2
WHERE leftdata.objdefuid in ('SDADocumentClassification')
AND leftdata.objuid = 'SDC_Document_classifications'
UNION ALL
SELECT lt.robjname, lt.lobjdesc, CONCAT(breadcrum, '-->', lt.robjname) as breadcrum, rt.objname, rt.DESCRIPTION, lt.robjuid, rt.objuid, dr.defuid, lvl + 1 AS lvl
FROM rightTable lt
JOIN datarel dr
ON lt.robjuid = dr.uid1
JOIN dataobj rt
ON rt.objuid = dr.uid2
and dr.defuid = 'SPFClassMember'
)
SELECT * FROM rightTable;
Query EnumListTypes Tree
For MsSql
WITH rightTable(lobjname, robjname, lobjuid, robjuid, lobjdefuid, robjdefuid, reldef, lvl) AS (
SELECT leftdata.objname, rightdata.objname, leftdata.objuid, rightdata.objuid, leftdata.OBJDEFUID, rightdata.OBJDEFUID, dr.defuid, 1 as lvl
FROM schemaobj leftdata
JOIN schemarel dr
ON leftdata.objuid = dr.uid1
and dr.defuid like '%Contains%'
and leftdata.TERMINATIONDATE = '9999/12/31-23:59:59:999'
and dr.TERMINATIONDATE = '9999/12/31-23:59:59:999'
JOIN schemaobj rightdata
ON rightdata.objuid = dr.uid2
AND rightdata.TERMINATIONDATE = '9999/12/31-23:59:59:999'
WHERE leftdata.objdefuid in ('EnumListType', 'EnumEnum')
AND leftdata.objuid = 'e1SDADocCategories'
UNION ALL
SELECT lt.robjname, rt.objname, lt.robjuid, rt.objuid, lt.robjdefuid, rt.OBJDEFUID, dr.defuid, lvl + 1 AS lvl
FROM rightTable lt
JOIN schemarel dr
ON lt.robjuid = dr.uid1
AND dr.TERMINATIONDATE = '9999/12/31-23:59:59:999'
JOIN schemaobj rt
ON rt.objuid = dr.uid2
AND rt.TERMINATIONDATE = '9999/12/31-23:59:59:999'
)
SELECT * FROM rightTable;
Query Classifications with Enums
For MsSql
WITH rightTable(lobjname, robjname, lobjuid, robjuid, reldef, lvl) AS (
SELECT leftdata.objname, rightdata.objname, leftdata.objuid, rightdata.objuid, dr.defuid, 1 as lvl
FROM dataobj leftdata
JOIN datarel dr
ON leftdata.objuid = dr.uid1
and dr.defuid = 'SPFClassMember'
and leftdata.TERMINATIONDATE = '9999/12/31-23:59:59:999'
and dr.TERMINATIONDATE = '9999/12/31-23:59:59:999'
JOIN dataobj rightdata
ON rightdata.objuid = dr.uid2
and rightdata.TERMINATIONDATE = '9999/12/31-23:59:59:999'
WHERE leftdata.objdefuid in ('SDADocumentClassification')
AND leftdata.objuid = 'SDC_Document_classifications'
UNION ALL
SELECT lt.robjname, rt.objname, lt.robjuid, rt.objuid, dr.defuid, lvl + 1 AS lvl
FROM rightTable lt
JOIN datarel dr
ON lt.robjuid = dr.uid1
AND dr.TERMINATIONDATE = '9999/12/31-23:59:59:999'
JOIN dataobj rt
ON rt.objuid = dr.uid2
and dr.defuid = 'SPFClassMember'
AND rt.TERMINATIONDATE = '9999/12/31-23:59:59:999'
)
SELECT lobjname, robjname, lobjuid, robjuid, reldef, lvl, dr.uid2 as EnumParent, dr2.uid2 EnumChild
FROM rightTable
Left join datarel dr
ON rightTable.lobjuid = dr.uid1
AND dr.defuid = 'SPFObjClassEnumEnum'
AND dr.TERMINATIONDATE = '9999/12/31-23:59:59:999'
Left join datarel dr2
ON rightTable.robjuid = dr2.uid1
AND dr2.defuid = 'SPFObjClassEnumEnum'
AND dr2.TERMINATIONDATE = '9999/12/31-23:59:59:999'
order by lvl, lobjname, robjname;
Query Enums numbers
For MsSql
SELECT so.OBJNAME, sp.STRVALUE, so.OBJUID
FROM schemaobj so
JOIN schemaobjpr sp
ON so.OBID = sp.OBJOBID
AND so.TERMINATIONDATE = '9999/12/31-23:59:59:999'
AND sp.TERMINATIONDATE = '9999/12/31-23:59:59:999'
WHERE sp.propertydefuid = 'EnumNumber'
--AND so.OBJUID like '%FDW%'
ORDER BY ABS(strvalue) DESC
Query Import Definition Order Values
For MsSql
select so2.OBJNAME, sp.STRVALUE, sr.TERMINATIONDATE
from schemaobj so
JOin SCHEMAREL sr
on so.OBJUID = sr.UID1
and sr.DEFUID = 'VTLImportDefHeader'
join SCHEMAOBJ so2
on sr.UID2 = so2.OBJUID
--and so2.OBJNAME in ('COMP_PlantCodeValue', 'COMP_PlantCode')
and so.OBJNAME = 'Document Create Mapping'
JOIN SCHEMAOBJPR sp
on sp.OBJOBID = sr.OBID
and sp.PROPERTYDEFUID = 'OrderValue'
order by ABS(sp.strvalue)
Query the missing files in the vault
For MsSql
-- Function to find if file exists
CREATE or ALTER FUNCTION dbo.fn_FileExists(@path varchar(512))
RETURNS BIT
AS
BEGIN
DECLARE @result INT
EXEC master.dbo.xp_fileexist @path, @result OUTPUT
RETURN cast(@result as bit)
END;
GO
-- Query all files with FilePath and FileExists flag
select * from (
select fd.OBJNAME as FileName
, concat(vp.STRVALUE, '\', fp.STRVALUE) as FilePath
, dbo.fn_FileExists(concat(vp.STRVALUE, '\', fp.STRVALUE)) as FileExists
from DATAOBJ fd
join DATAREL fr
on fd.OBJUID = fr.UID1
and fr.DEFUID = 'SPFFileVault'
--and upper(fd.OBJDEFUID) like '%FILE%'
and fd.TERMINATIONDATE = '9999/12/31-23:59:59:999'
and fr.TERMINATIONDATE = '9999/12/31-23:59:59:999'
join DATAOBJPR fp
on fp.OBJOBID = fd.OBID
and fp.PROPERTYDEFUID = 'SPFRemoteFileName'
and fp.TERMINATIONDATE = '9999/12/31-23:59:59:999'
join SCHEMAOBJ vd
on vd.OBJUID = fr.uid2
and vd.TERMINATIONDATE = '9999/12/31-23:59:59:999'
join SCHEMAOBJPR vp
on vp.OBJOBID = vd.OBID
and vp.PROPERTYDEFUID = 'SPFLocalPath'
and vp.TERMINATIONDATE = '9999/12/31-23:59:59:999') FileData
where FileExists = 0;
- The above FileExists may not evaluate properly if the user running SQL service does not have access to the file path (example: for network files etc).
-
The work around is:
- Copy the query output to a excel(.xlsm) file.
- Go to Excel VBA code editor (Alt+F12)
- Insert a module and add below vba code to the module
- Add a column in the Excel and use the formula =FileExists
Function FileExists(sPath As String) As Boolean
On Error GoTo HandleError
FileExists = Dir(sPath) <> ""
HandleError:
FileExists = False
End Function
Password Reset
select dd.OBJNAME, dd.CONFIG, dd.OBJDEFUID, dr.DEFUID from DOCOBJ dd LEFT JOIN DOCREL dr on dr.UID1 = dd.OBJUID and dr.DEFUID = ‘SDAItemSecurityCode’ and dr.TERMINATIONDATE = ‘9999/12/31-23:59:59:999’ WHERE dd.OBJDEFUID = ‘FDWDocumentMaster’ and dr.uid2 is null and dd.TERMINATIONDATE = ‘9999/12/31-23:59:59:999’
Run below commands as ‘sys’ user connected with ‘SYSDBA’ role.
- Reset the password expiration policy to unlimitted
-- Find the exist password policy
select *
from dba_profiles
where resource_name = 'PASSWORD_LIFE_TIME';
-- Reset password policy. Replace the profile name with actual profile name
ALTER PROFILE <profile name> LIMIT PASSWORD_LIFE_TIME UNLIMITED;
- Unlock the user accounts
select 'ALTER USER '|| USERNAME || ' account unlock;'
from dba_users
where ACCOUNT_STATUS like '%LOCKED%';
- Reset the user password to same old password
-- The oracle 11g onwards the password is stored in the spare4 column of sys.user$ table. Below the dba_users and user$ tables are joined using username=name
select 'ALTER USER '|| USERNAME || ' identified by values ''' || spare4 || ''';'
from dba_users,user$
where ACCOUNT_STATUS like '%EXPIRED%' and USERNAME=NAME;
Find documents without security code
For MsSql
select dd.OBJNAME, dd.CONFIG, dd.OBJDEFUID, dr.DEFUID
from DOCOBJ dd
LEFT JOIN DOCREL dr
on dr.UID1 = dd.OBJUID
and dr.DEFUID = 'SDAItemSecurityCode'
and dr.TERMINATIONDATE = '9999/12/31-23:59:59:999'
WHERE dd.OBJDEFUID = 'FDWDocumentMaster'
and dr.uid2 is null
and dd.TERMINATIONDATE = '9999/12/31-23:59:59:999'
Find interfaces for a object by name
For MsSql
select dd.OBJNAME, dd.OBJDEFUID, di.INTERFACEDEFUID
from DATAOBJ dd
JOIN DATAOBJIF di
on di.OBJOBID = dd.OBID
AND dd.OBJNAME = 'Document-Name';
Resolve @DOCCLASSIFICATIONNAMESINCREATECONFIG_OR_ALL@
For MsSql
INSERT INTO GRAPH_TMP
(OBID, ROWNUMBER, SRCEDGE)
(
SELECT
OBID,
'0' AS ROWNUMBER,
SRCEDGE
FROM
(
SELECT
*
FROM
(
SELECT
o0.OBID, o0.objname,
-- DATA AS FROMTABLESET ,
'b57ab6e4-6ac9-4410-b25b-d4c2c988ef9dDATA' AS SRCEDGE
FROM
DATAOBJ o0
WHERE (o0.OBJDEFUID = 'SDADocumentClassification' AND o0.DOMAINUID = 'SPFREFERENCE' AND EXISTS ( SELECT
r1.UID2 AS SOURCEUID,
r1.DOMAINUID2 AS SOURCEDOMAIN,
r1.DEFUID RELDEFUID,
o0_ro__1001.OBID AS TARGETOBID,
o0_ro__1001.OBJUID AS TARGETUID,
o0_ro__1001.DOMAINUID AS TARGETDOMAIN,
o0_ro__1001.CONFIG AS TARGETCONFIG
FROM
DATAREL r1 INNER JOIN DATAOBJ o0_ro__1001 ON r1.UID1 = o0_ro__1001.OBJUID AND r1.DOMAINUID1 = o0_ro__1001.DOMAINUID
WHERE r1.UID2 = o0.OBJUID AND r1.DOMAINUID2 = o0.DOMAINUID AND ( (r1.CONFIG IS NULL OR r1.CONFIG = '') OR (r1.CONFIG = 'PR_New_Process_Train' ) OR (r1.CONFIG = 'PL_RON-A' AND (r1.CLAIMEDTOCONFIGS IS NULL OR CHARINDEX(';' + N'PR_New_Process_Train'+ ';',';' + r1.CLAIMEDTOCONFIGS + ';') =0) ) ) AND r1.TERMINATIONDATE ='9999/12/31-23:59:59:999' AND r1.DEFUID = 'SCLBCollaborationScopeDocClassification' AND (o0_ro__1001.OBID = '6FNP000A' ) AND ( (o0_ro__1001.CONFIG IS NULL OR o0_ro__1001.CONFIG = '') OR (o0_ro__1001.CONFIG = 'PR_New_Process_Train' ) OR (o0_ro__1001.CONFIG = 'PL_RON-A' AND (o0_ro__1001.CLAIMEDTOCONFIGS IS NULL OR CHARINDEX(';' + N'PR_New_Process_Train'+ ';',';' + o0_ro__1001.CLAIMEDTOCONFIGS + ';') =0) ) ) AND o0_ro__1001.TERMINATIONDATE ='9999/12/31-23:59:59:999' AND (( CASE WHEN r1.CONFIG = 'PL_RON-A' THEN 0 WHEN r1.CONFIG = 'PR_New_Process_Train' THEN 1 WHEN r1.CONFIG IS NULL THEN 0 WHEN r1.CONFIG = '' THEN 0 ELSE NULL END >= CASE WHEN o0.CONFIG = 'PL_RON-A' THEN 0 WHEN o0.CONFIG = 'PR_New_Process_Train' THEN 1 WHEN o0.CONFIG IS NULL THEN 0 WHEN o0.CONFIG = '' THEN 0 ELSE NULL END AND CASE WHEN r1.CONFIG = 'PL_RON-A' THEN 0 WHEN r1.CONFIG = 'PR_New_Process_Train' THEN 1 WHEN r1.CONFIG IS NULL THEN 0 WHEN r1.CONFIG = '' THEN 0 ELSE NULL END >= CASE WHEN o0_ro__1001.CONFIG = 'PL_RON-A' THEN 0 WHEN o0_ro__1001.CONFIG = 'PR_New_Process_Train' THEN 1 WHEN o0_ro__1001.CONFIG IS NULL THEN 0 WHEN o0_ro__1001.CONFIG = '' THEN 0 ELSE NULL END ) OR (r1.CONFIG IS NULL OR r1.CONFIG = '') ) AND (o0_ro__1001.CLAIMEDTOCONFIGS IS NULL OR (CHARINDEX('PR_New_Process_Train',o0_ro__1001.CLAIMEDTOCONFIGS) = 0 )) AND (r1.CLAIMEDTOCONFIGS IS NULL OR (CHARINDEX('PR_New_Process_Train',r1.CLAIMEDTOCONFIGS) = 0 ))) ) AND ( (o0.CONFIG IS NULL OR o0.CONFIG = '') OR (o0.CONFIG = 'PR_New_Process_Train' ) ) AND o0.TERMINATIONDATE ='9999/12/31-23:59:59:999' ) result ) temptableresult)