I have used this in the past:
def main():
import arcpy
import os
# output file (change this)
report = r"D:\Xander\Domains\list_unused_domains.txt"
# database connection (change this)
conn = r"C:\Users\xbakker\AppData\Roaming\ESRI\Desktop10.2\ArcCatalog\Dev 10.2.sde"
# set encoding to utf-8 (for non ASCII chars)
import sys
reload(sys)
print sys.getdefaultencoding()
def_enc = sys.getdefaultencoding()
sys.setdefaultencoding('utf8')
with open(report, "w") as f:
f.write("Domains not in use\n")
# create list of domains
domains = arcpy.da.ListDomains(conn)
lst_names = [domain.name for domain in domains]
# list featureclasses
arcpy.env.workspace = conn
lst_fds = arcpy.ListDatasets(feature_type="feature")
lst_fds.append("")
lst_doms = []
for fds in lst_fds:
lst_fc = arcpy.ListFeatureClasses(feature_dataset=fds)
for fc in lst_fc:
try:
flds = arcpy.ListFields(os.path.join(ws, fds, fc))
for fld in flds:
if fld.domain != "":
lst_doms.append(fld.domain)
except:
pass
# process tables
lst_tbl = arcpy.ListTables()
for tbl in lst_tbl:
try:
flds = arcpy.ListFields(tbl)
for fld in flds:
if fld.domain != "":
lst_doms.append(fld.domain)
except:
pass
# create list of domains not in use
lst_notinuse = list(set(lst_names) - set(lst_doms))
# write to file
for dom in lst_notinuse:
f.write("{0}\n".format(dom))
# restore default settings
sys.setdefaultencoding(def_enc)
if __name__ == '__main__':
main()This does not get you the full list of domains that are in use. It is possible (and I have seen cases) where a column used with a default value in a subtype uses domain 'a' while the field itself uses domain 'b'. So if you have subtypes, you should check the domains in use by the subtypes too Use arcpy.da.ListSubtypes(featureclass).
Kind regards, Xander
Xander,
Thank you very much for your answer and for sharing your script code.
Unfortunately I'm using ArcGIS version 10, which does not contains the arcpy.da module, so I will try to adapt the script to make it compatible, some kind of backport, if possible.
Kind regards,
Gaston.
I'm afraid there is not much support for listing domains without the data access (da) module. You may have to use one of the other suggestions (like the one by Jake) directly on the database.