ReviewLite19.1.sql 282 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715
  1. SET ECHO OFF
  2. SET PAUSE OFF
  3. SET TERMOUT OFF
  4. REM ORACLE - Global Licensing and Advisory Services - Review Lite Script
  5. REM
  6. REM Usage:
  7. REM
  8. REM - Use SQL*Plus to connect to the database (locally or remotely) with any user with following privileges
  9. REM - CREATE SESSION
  10. REM - SELECT ANY TABLE
  11. REM - for database version 9.1 and higher: SELECT ANY DICTIONARY
  12. REM - when DATABASE VAULT is in use:
  13. REM - PARTICIPANT or OWNER authorization on 'Oracle Data Dictionary' realm
  14. REM - PARTICIPANT or OWNER authorization on 'Oracle Database Vault' realm
  15. REM - DV_SECANALYST role - for querying Oracle Database Vault-supplied views
  16. REM Hint: SYS or SYSTEM are good choices if DATABASE VAULT is not in use
  17. REM Example:
  18. REM sqlplus system/password@orcl1prod
  19. REM
  20. REM - Run the script:
  21. REM @ReviewLite19.1.sql
  22. REM
  23. REM - Where to run the script?
  24. REM - for RAC databases, connect and run the script on each instance
  25. REM - for Container Databases (CDBs), connect and run the script on CDB$ROOT container and on each open Pluggable Database (PDB)
  26. REM - run the script on OEM Grid/Cloud Control Repository databases
  27. REM - run the script on all the database targets managed by OEM Grid/Cloud Control
  28. REM - run the script on all standby databases, ignoring errors caused by these being open in MOUNTED mode
  29. REM - do not run the script on Automatic Storage Management (ASM) instances
  30. REM
  31. REM
  32. REM Change History
  33. REM ---------------------------------
  34. REM Date Release Author
  35. REM ----------- ------- ---------------
  36. REM 2005-03-04 1.0 -
  37. REM 2005-08-07 2.0 anherrer
  38. REM 2005-10-03 2.1 fllanos
  39. REM 2006-10-09 2.2 esiytiu
  40. REM 2007-07-24 2.3.1 esiytiu
  41. REM 2007-12-28 2.4.1 esiytiu
  42. REM 2008-02-23 2.5 sserban
  43. REM 2008-04-22 2.5.1 sserban
  44. REM 2008-11-11 2.5.2 sserban
  45. REM 2009-02-06 2.5.3 beparu
  46. REM 2009-03-12 2.5.4 sserban
  47. REM 2009-07-24 2.5.5 beparu
  48. REM 2010-01-15 2.5.6 beparu
  49. REM 2010-04-13 2.5.7 beparu
  50. REM 2010-09-14 2.5.8 adimitrescu
  51. REM 2011-03-14 2.5.9 sserban
  52. REM 2011-08-02 2.6 adimitrescu
  53. REM 2011-09-28 2.6.1 adimitrescu
  54. REM 2011-11-04 12.3 ajgonzal
  55. REM 2013-06-01 14.1 sserban
  56. REM 2013-08-20 14.1.1 sserban
  57. REM 2013-09-30 14.1.2 sserban
  58. REM 2013-11-20 14.2.0 sserban
  59. REM 2014-02-12 14.2.1 sserban
  60. REM 2014-08-31 15.1 sserban
  61. REM 2015-10-21 16.2 sserban
  62. REM 2016-10-17 17.1 sserban
  63. REM 2016-12-12 17.1.3 sserban
  64. REM 2017-01-30 17.1.5 sserban
  65. REM 2017-03-20 17.2 sserban
  66. REM 2018-09-06 19.1 cpanait
  67. REM
  68. REM This script checks for the Oracle database edition and version installed.
  69. REM It also checks for the options installed and verifies what options and OEM packs are being used:
  70. REM * OLAP * SPATIAL
  71. REM * PARTITIONING * RAC (Real Application Clusters)
  72. REM * LABEL SECURITY * OEM (Oracle Enterprise Manager) PACKS
  73. REM * DATA MINING * AUDIT VAULT
  74. REM * DATABASE VAULT * CONTENT DATABASE
  75. REM * RECORDS DATABASE * ADVANCED SECURITY
  76. REM * ACTIVE DATA GUARD * ADVANCED COMPRESSION
  77. REM * MULTITENANT * DATABASE IN-MEMORY
  78. define SCRIPT_RELEASE=19.1
  79. SET DEFINE ON
  80. SET MARKUP HTML OFF
  81. SET COLSEP ' '
  82. -- Settings for customized functionality - the last definition of each parameter will dictate the customization
  83. -- Set SCRIPT_OO to collect all information or options only
  84. define SCRIPT_OO=_OO_IGNORE_THIS_ERR -- collect only options information
  85. define SCRIPT_OO='' -- collect all information [default behavior]
  86. -- Set SCRIPT_TS to generate filenames with or without timestamp
  87. define SCRIPT_TS=_TS_IGNORE_THIS_ERR -- include timestamp in names of the output directory and output files: YYYY.MM.DD.HH24.MI.SS
  88. define SCRIPT_TS='' -- standard names for output directory and output files [default behavior]
  89. -- Set SCRIPT_LA set license agreement prompt behavior
  90. define SCRIPT_LA=_LA_IGNORE_THIS_ERR -- script does not prompt for license agreement
  91. define SCRIPT_LA='' -- script prompts for license agreement [default behavior]
  92. -- Set SCRIPT_SI to run in interactive or in silent mode
  93. define SCRIPT_SI=_SI_IGNORE_THIS_ERR -- script does not prompt for privilege check confirmation
  94. define SCRIPT_SI='' -- script prompts for privilege check confirmation [default behavior]
  95. -- Set SCRIPT_SD to create output subdirectory
  96. define SCRIPT_SD=DB -- create output subdirectory
  97. define SCRIPT_SD='' -- no output subdirectory
  98. -- PREPARE AND DISPLAY LICENSE AGREEMENT
  99. SPOOL&SCRIPT_LA license_agreement.txt
  100. PROMPT ===============================================================
  101. PROMPT For reading LICENSE AGREEMENT use:
  102. PROMPT <SPACE> to display next page
  103. PROMPT <RETURN> to display next line
  104. PROMPT ===============================================================
  105. PROMPT
  106. PROMPT Terms for Oracle Software Collection Tool
  107. PROMPT
  108. PROMPT
  109. PROMPT By selecting "Accept License Agreement" (or the equivalent) or by installing or using the Software (as defined below), You indicate Your acceptance of these terms and Your agreement, as an authorized representative of Your company or organization (if being acquired for use by an entity) or as an individual, to comply with the license terms that apply to the Software. If you are not willing to be bound by these terms, do not indicate Your acceptance and do not download, install, or use the Software.
  110. PROMPT
  111. PROMPT
  112. PROMPT License Agreement
  113. PROMPT
  114. PROMPT PLEASE SCROLL DOWN AND READ ALL OF THE FOLLOWING TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT (this "Agreement") CAREFULLY. THIS AGREEMENT IS A LEGALLY BINDING CONTRACT BETWEEN YOU AND ORACLE AMERICA, INC. THAT SETS FORTH THE TERMS THAT GOVERN YOUR USE OF THE SOFTWARE.
  115. PROMPT
  116. PROMPT YOU MUST ACCEPT AND ABIDE BY THESE TERMS AS PRESENTED TO YOU - ANY CHANGES, ADDITIONS OR DELETIONS BY YOU TO THESE TERMS ARE NOT ACCEPTED AND WILL NOT BE PART OF THIS AGREEMENT.
  117. PROMPT
  118. PROMPT Definitions
  119. PROMPT "Oracle" refers to Oracle America, Inc.
  120. PROMPT
  121. PROMPT "You" and "Your" refers to the individual or entity that wishes to use the Software.
  122. PROMPT
  123. PROMPT "Software" refers to the tool(s), script(s) and/or software product(s) (and any applicable documentation) provided with these terms to You by Oracle and which You wish to access and use to measure, monitor and/or manage Your usage of separately-licensed Oracle software (the "Programs") that has been licensed under a separate agreement between Oracle and You, such as an Oracle Master Agreement, an Oracle Software License and Services Agreement, an Oracle PartnerNetwork Agreement or an Oracle distribution agreement (each, an "Oracle License Agreement").
  124. PROMPT
  125. PROMPT Rights Granted
  126. PROMPT Oracle grants You a non-exclusive, non-transferable limited right to use the Software, subject to the terms of this Agreement, for the limited purpose of measuring, monitoring and/or managing Your usage of the Programs. You may allow Your agents and contractors (including, without limitation, outsourcers) to use the Software for this purpose and You are responsible for their compliance with this Agreement in such use. You (including Your agents, contractors and/or outsourcers) may not use the Software for any other purpose.
  127. PROMPT
  128. PROMPT Ownership and Restrictions
  129. PROMPT Oracle and Oracle's licensors retain all ownership and intellectual property rights to the Software. The Software may be installed on one or more servers; provided, however, that You may only make one copy of the Software for backup or archival purposes.
  130. PROMPT
  131. PROMPT Third party technology that may be appropriate or necessary for use with the Software is specified in the Software documentation, notice files or readme files. Such third party technology is licensed to You under the terms of the third party technology license agreement specified in the Software documentation, notice files or readme files and not under the terms of this Agreement.
  132. PROMPT
  133. PROMPT You may not:
  134. PROMPT - use the Software for Your own internal data processing or for any commercial or production purposes, or use the Software for any purpose except the purpose stated herein;
  135. PROMPT - remove or modify any Software markings or any notice of Oracle's or Oracle's licensors' proprietary rights;
  136. PROMPT - make the Software available in any manner to any third party for use in the third party's business operations, without Oracle's prior written consent;
  137. PROMPT - use the Software to provide third party training or rent or lease the Software or use the Software for commercial time sharing or service bureau use;
  138. PROMPT - assign this Agreement or give or transfer the Software or an interest in them to another individual or entity;
  139. PROMPT - cause or permit reverse engineering (unless required by law for interoperability), disassembly or decompilation of the Software (the foregoing prohibition includes but is not limited to review of data structures or similar materials produced by the Software);
  140. PROMPT - disclose results of any Software benchmark tests without Oracle's prior written consent;
  141. PROMPT - use any Oracle name, trademark or logo without Oracle's prior written consent.
  142. PROMPT
  143. PROMPT Disclaimer of Warranty
  144. PROMPT ORACLE DOES NOT GUARANTEE THAT THE SOFTWARE WILL PERFORM ERROR-FREE OR UNINTERRUPTED. TO THE EXTENT NOT PROHIBITED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND AND THERE ARE NO WARRANTIES, EXPRESS OR IMPLIED, OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF MERCHANTABILITY, NONINFRINGEMENT OR FITNESS FOR A PARTICULAR PURPOSE, THAT APPLY TO THE SOFTWARE.
  145. PROMPT
  146. PROMPT No Right to Technical Support
  147. PROMPT You acknowledge and agree that Oracle's technical support organization will not provide You with technical support for the Software licensed under this Agreement.
  148. PROMPT
  149. PROMPT End of Agreement
  150. PROMPT You may terminate this Agreement by destroying all copies of the Software. Oracle has the right to terminate Your right to use the Software at any time upon notice to You, in which case You shall destroy all copies of the Software.
  151. PROMPT
  152. PROMPT Entire Agreement
  153. PROMPT You agree that this Agreement is the complete agreement for the Software and supersedes all prior or contemporaneous agreements or representations, written or oral, regarding the Software. If any term of this Agreement is found to be invalid or unenforceable, the remaining provisions will remain effective and such term shall be replaced with a term consistent with the purpose and intent of this Agreement.
  154. PROMPT
  155. PROMPT Limitation of Liability
  156. PROMPT IN NO EVENT SHALL ORACLE BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, OR ANY LOSS OF PROFITS, REVENUE, DATA OR DATA USE, INCURRED BY YOU OR ANY THIRD PARTY. ORACLE'S ENTIRE LIABILITY FOR DAMAGES ARISING OUT OF OR RELATED TO THIS AGREEMENT, WHETHER IN CONTRACT OR TORT OR OTHERWISE, SHALL IN NO EVENT EXCEED THE GREATER OF ONE THOUSAND U.S. DOLLARS (U.S. $1,000) OR THE LICENSE FEES THAT YOU HAVE PAID TO ORACLE FOR PROGRAMS PURSUANT TO AN ORACLE LICENSE AGREEMENT.
  157. PROMPT
  158. PROMPT Export
  159. PROMPT Export laws and regulations of the United States and any other relevant local export laws and regulations apply to the Software. You agree that such export control laws govern Your use of the Software (including technical data) provided under this Agreement, and You agree to comply with all such export laws and regulations (including "deemed export" and "deemed re-export" regulations). You agree that no data, information, and/or Software (or direct product thereof) will be exported, directly or indirectly, in violation of any export laws, nor will they be used for any purpose prohibited by these laws including, without limitation, nuclear, chemical, or biological weapons proliferation, or development of missile technology.
  160. PROMPT
  161. PROMPT Other
  162. PROMPT 1. This Agreement is governed by the substantive and procedural laws of the State of California, USA. You and Oracle agree to submit to the exclusive jurisdiction of, and venue in, the courts of San Francisco or Santa Clara counties in California in any dispute arising out of or relating to this Agreement.
  163. PROMPT
  164. PROMPT 2. You may not assign this Agreement or give or transfer the Software or an interest in them to another individual or entity. If You grant a security interest in the Software, the secured party has no right to use or transfer the Software.
  165. PROMPT
  166. PROMPT 3. Except for actions for breach of Oracle's proprietary rights, no action, regardless of form, arising out of or relating to this Agreement may be brought by either party more than two years after the cause of action has accrued.
  167. PROMPT
  168. PROMPT 4. The relationship between You and Oracle is that of licensee/licensor. Nothing in this Agreement shall be construed to create a partnership, joint venture, agency, or employment relationship between the parties. The parties agree that they are acting solely as independent contractors hereunder and agree that the parties have no fiduciary duty to one another or any other special or implied duties that are not expressly stated herein. Neither party has any authority to act as agent for, or to incur any obligations on behalf of or in the name of the other.
  169. PROMPT
  170. PROMPT 5. This Agreement may not be modified and the rights and restrictions may not be altered or waived except in a writing signed by authorized representatives of You and Oracle.
  171. PROMPT
  172. PROMPT 6. Any notice required under this Agreement shall be provided to the other party in writing.
  173. PROMPT
  174. PROMPT 7. In order to assist You with the measurement, monitoring or management of Your usage of the Programs, Oracle may have access to and collect Your information, which may include personal information, and data residing on Oracle, customer or third-party systems on which the Software is used and/or to which Oracle is provided access to perform any associated services. Oracle treats such information and data in accordance with the terms of the Oracle Services Privacy Policy and the Oracle Corporate Security Practices, which are available at http://www.oracle.com/contracts, and treats such data as confidential in accordance with the terms of the Oracle License Agreement applicable to the Programs. The Oracle Services Privacy Policy and the Oracle Corporate Security Practices are subject to change at Oracle's discretion; however, Oracle will not materially reduce the level of protection specified in the Oracle Services Privacy Policy or the Oracle Corporate Security Practices in effect at the time the information was collected during the period that Oracle retains such information.
  175. PROMPT
  176. PROMPT Contact Information
  177. PROMPT Should You have any questions concerning Your use of the Software or this Agreement, please contact Oracle at: http://www.oracle.com/corporate/contact/
  178. PROMPT
  179. PROMPT Oracle America, Inc.
  180. PROMPT 500 Oracle Parkway,
  181. PROMPT Redwood City, CA 94065
  182. PROMPT
  183. PROMPT Last updated 1 November 2018
  184. PROMPT
  185. PROMPT ===============================================================
  186. SPOOL OFF
  187. HOST&SCRIPT_LA more license_agreement.txt 2> fii_err.txt
  188. -- PROMT FOR LICENSE AGREEMENT ACCEPTANCE
  189. DEFINE LANSWER=N
  190. SET TERMOUT ON
  191. ACCEPT&SCRIPT_LA LANSWER FORMAT A1 PROMPT 'Accept License Agreement? (y\n): '
  192. HOST&SCRIPT_LA rm license_agreement.txt 2> fii_err.txt
  193. HOST&SCRIPT_LA del license_agreement.txt 2> fii_err.txt
  194. SET TERMOUT OFF
  195. WHENEVER SQLERROR EXIT
  196. SET TERMOUT ON
  197. prompt Checking agreement acceptance ...
  198. SET TERMOUT OFF
  199. -- FORCE "divisor is equal to zero" AND SQLERROR EXIT IF NOT ACCEPTED
  200. -- WILL ALSO CONTINUE IF SCRIPT_LA SUBSTITUTION VARIABLE IS NOT NULL
  201. select 1/decode('&LANSWER', 'Y', null, 'y', null, decode('&SCRIPT_LA', null, 0, null)) as " " from DUAL;
  202. WHENEVER SQLERROR CONTINUE
  203. SET TERMOUT ON
  204. alter session set NLS_LANGUAGE='AMERICAN';
  205. alter session set NLS_TERRITORY='AMERICA';
  206. alter session set NLS_DATE_FORMAT='YYYY-MM-DD_HH24:MI:SS';
  207. alter session set NLS_TIMESTAMP_FORMAT='YYYY-MM-DD_HH24:MI:SS';
  208. alter session set NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD_HH24:MI:SS_TZH:TZM';
  209. SET TERMOUT OFF
  210. SET TAB OFF
  211. SET TRIMOUT ON
  212. SET TRIMSPOOL ON
  213. SET PAGESIZE 5000
  214. SET LINESIZE 300
  215. SET SERVEROUTPUT ON
  216. col DESCRIPTION format A65 wrap
  217. -- Get host_name and instance_name
  218. prompt Getting HOST_NAME and INSTANCE_NAME ...
  219. define INSTANCE_NAME=UNKNOWN
  220. define HOST_NAME=UNKNOWN
  221. col C1 new_val INSTANCE_NAME
  222. col C2 new_val HOST_NAME
  223. -- Oracle7
  224. SELECT min(machine) C2 FROM v$session WHERE type = 'BACKGROUND';
  225. SELECT name C1 FROM v$database;
  226. -- Oracle8 and higher
  227. SELECT instance_name C1, host_name C2 FROM v$instance;
  228. -- Oracle12 and higher
  229. define INSTANCE_NAME_0=&INSTANCE_NAME
  230. select '&&INSTANCE_NAME' || decode(VALUE, 'TRUE', '~' || replace(sys_context('USERENV', 'CON_NAME'), '$', '_'), '') C1
  231. from V$PARAMETER where name = 'enable_pluggable_database';
  232. define LOGS=''
  233. col C3 new_val LOGS
  234. select replace(sys_context('USERENV', 'CON_NAME'), '$', '_') || '_' as C3 from V$PARAMETER where NAME = 'enable_pluggable_database' and VALUE = 'TRUE';
  235. -- Check Privileges BEGIN
  236. SET FEEDBACK OFF
  237. SET VERIFY OFF
  238. PROMPT Checking for required select privileges.
  239. select PRIVILEGE FROM USER_SYS_PRIVS where PRIVILEGE in ('SELECT ANY TABLE', 'SELECT ANY DICTIONARY')
  240. union
  241. select PRIVILEGE FROM ROLE_SYS_PRIVS where PRIVILEGE in ('SELECT ANY TABLE', 'SELECT ANY DICTIONARY');
  242. -- Check if database is open
  243. define SEL_PRIV=N
  244. col SEL_PRIV_ new_val SEL_PRIV noprint
  245. col C noprint
  246. select 'Y' as SEL_PRIV_, count(*) as C from ROLE_SYS_PRIVS;
  247. col SEL_PRIV_ clear
  248. col C clear
  249. -- Get database version
  250. define SEL_VER=UNKNOWN
  251. col SEL_VER_ new_val SEL_VER noprint
  252. select trim(substr(VERSION, 1, instr(VERSION, '.')-1)) as SEL_VER_ from V$INSTANCE;
  253. col SEL_VER_ clear
  254. -- Get O7_DICTIONARY_ACCESSIBILITY parameter
  255. define SEL_O7=UNKNOWN
  256. col SEL_O7_ new_val SEL_O7 noprint
  257. select VALUE as SEL_O7_ from V$PARAMETER where upper(NAME) = 'O7_DICTIONARY_ACCESSIBILITY';
  258. col SEL_O7_ clear
  259. variable MIS_PRIV VARCHAR2(100)
  260. BEGIN
  261. :MIS_PRIV := 'N';
  262. END;
  263. /
  264. SET TERMOUT ON
  265. --prompt [&SEL_PRIV][&SEL_VER][&SEL_O7]
  266. DECLARE
  267. SEL_DICT_REQUIRED VARCHAR2(3) := 'N';
  268. MISSING_PRIVS VARCHAR2(200) := '';
  269. SEL_AT VARCHAR2(3) := 'N';
  270. SEL_AD VARCHAR2(3) := 'N';
  271. ERR_C number;
  272. AUTH_REALMS VARCHAR2(500) := 'N';
  273. MIS_AUTH_TEXT VARCHAR2(4000) := '';
  274. MIS_AUTH VARCHAR2(3) := 'N';
  275. BEGIN
  276. if '&SEL_VER' = 'UNKNOWN' then
  277. dbms_output.put_line('DB: CT-02014: ERROR: [&&INSTANCE_NAME]: Current database user ' || USER || ' does not have the privilege to query V$INSTANCE. Cannot continue.');
  278. dbms_output.put_line('Exiting...');
  279. :MIS_PRIV := 'X';
  280. return;
  281. elsif '&SEL_PRIV' = 'N' then
  282. dbms_output.put_line('DB: CT-02802: WARNING: [&&INSTANCE_NAME]: Cannot check privileges. Continuing anyway. Errors expected.');
  283. dbms_output.put_line('.');
  284. :MIS_PRIV := 'N';
  285. return;
  286. elsif '&SEL_VER' = '8' and '&SEL_O7' = 'UNKNOWN' then
  287. dbms_output.put_line('DB: CT-02803: WARNING: [&&INSTANCE_NAME]: Current database user ' || USER || ' does NOT have the privilege to query V$PARAMETER. Continuing anyway. Errors expected.');
  288. SEL_DICT_REQUIRED := 'N';
  289. elsif '&SEL_VER' = '8' and '&SEL_O7' = 'FALSE' then
  290. dbms_output.put_line('DB: CT-02804: WARNING: [&&INSTANCE_NAME]: O7_DICTIONARY_ACCESSIBILITY=FALSE. Access to the data dictionary views requires explicit object privilege. Errors expected.');
  291. SEL_DICT_REQUIRED := 'N';
  292. elsif '&SEL_VER' in ('7', '8') then
  293. SEL_DICT_REQUIRED := 'N';
  294. elsif to_number('&SEL_VER') >= '9' and '&SEL_O7' = 'TRUE' then
  295. -- SELECT ANY TABLE is enough
  296. SEL_DICT_REQUIRED := 'N';
  297. elsif to_number('&SEL_VER') >= '9' and '&SEL_O7' = 'FALSE' then
  298. -- SELECT ANY DICTIONARY privilege (introduced in 9.0.1) is required
  299. SEL_DICT_REQUIRED := 'Y';
  300. else
  301. SEL_DICT_REQUIRED := 'Y';
  302. end if;
  303. for C in
  304. (
  305. select PRIVILEGE FROM USER_SYS_PRIVS where PRIVILEGE in ('SELECT ANY TABLE', 'SELECT ANY DICTIONARY')
  306. union
  307. select PRIVILEGE FROM ROLE_SYS_PRIVS where PRIVILEGE in ('SELECT ANY TABLE', 'SELECT ANY DICTIONARY')
  308. )
  309. loop
  310. if c.PRIVILEGE = 'SELECT ANY TABLE' then
  311. SEL_AT := 'Y';
  312. elsif c.PRIVILEGE = 'SELECT ANY DICTIONARY' then
  313. SEL_AD := 'Y';
  314. end if;
  315. end loop;
  316. if SEL_AT = 'N' then
  317. MISSING_PRIVS := 'SELECT ANY TABLE';
  318. end if;
  319. if SEL_AD = 'N' and SEL_DICT_REQUIRED = 'Y' and MISSING_PRIVS is null then
  320. MISSING_PRIVS := 'SELECT ANY DICTIONARY privilege';
  321. :MIS_PRIV := 'Y';
  322. elsif SEL_AD = 'N' and SEL_DICT_REQUIRED = 'Y' then
  323. MISSING_PRIVS := MISSING_PRIVS || ' and ' || 'SELECT ANY DICTIONARY privileges';
  324. :MIS_PRIV := 'Y';
  325. elsif SEL_AD = 'Y' and MISSING_PRIVS is not null then
  326. MISSING_PRIVS := MISSING_PRIVS || ' privilege';
  327. :MIS_PRIV := 'Y';
  328. end if;
  329. for C in
  330. (select distinct 1 as DV from V$OPTION where PARAMETER = 'Oracle Database Vault' and VALUE = 'TRUE')
  331. loop
  332. -- Database Vault is enabled. Need to check realm authorizations
  333. begin
  334. -- Check user authorizations on 'Oracle Database Vault' realm, DVSYS schema containing Oracle Database Vault-supplied views
  335. execute immediate 'select count(*) from DVSYS.DBA_DV_REALM' into AUTH_REALMS;
  336. execute immediate
  337. 'select min(REALM_NAME) || max(REALM_NAME) || count(*) from DVSYS.DBA_DV_REALM_AUTH where GRANTEE=USER and REALM_NAME in (''Oracle Data Dictionary'', ''Oracle Database Vault'')'
  338. into AUTH_REALMS;
  339. -- build list of realms missing authorization
  340. if AUTH_REALMS not like '%Oracle Database Vault%' and AUTH_REALMS not like '%Oracle Data Dictionary%' then
  341. MIS_AUTH_TEXT := 'Oracle Database Vault and Oracle Data Dictionary realms';
  342. elsif AUTH_REALMS not like '%Oracle Database Vault%' then
  343. MIS_AUTH_TEXT := 'Oracle Database Vault realm';
  344. elsif AUTH_REALMS not like '%Oracle Data Dictionary%' then
  345. MIS_AUTH_TEXT := 'Oracle Data Dictionary realm';
  346. end if;
  347. -- build message about missing realm authorizations
  348. if MIS_AUTH_TEXT is not null then
  349. MIS_AUTH_TEXT := 'DB: CT-02016: ERROR: [&&INSTANCE_NAME]: Current database user ' || USER || ' does NOT have authorization on ' || MIS_AUTH_TEXT;
  350. MIS_AUTH := 'Y';
  351. :MIS_PRIV := 'Y';
  352. elsif MIS_AUTH_TEXT is null then
  353. -- Doublecheck user authorizations on 'Oracle Database Vault' realm, LBACSYS schema containing Lable Security objects
  354. execute immediate 'select count(*) from LBACSYS.LBAC$POLT' into AUTH_REALMS;
  355. end if;
  356. exception
  357. when others then
  358. ERR_C := SQLCODE;
  359. if ERR_C = -01031 then
  360. MIS_AUTH_TEXT := 'DB: CT-02017: ERROR: [&&INSTANCE_NAME]: Current database user ' || USER || ' does NOT have authorization on Oracle Database Vault realm';
  361. MIS_AUTH := 'Y';
  362. :MIS_PRIV := 'Y';
  363. else
  364. dbms_output.put_line('SQLCODE:' || to_char(ERR_C));
  365. end if;
  366. end;
  367. end loop;
  368. if :MIS_PRIV = 'Y' and MISSING_PRIVS is not null then
  369. dbms_output.put_line('DB: CT-02015: ERROR: [&&INSTANCE_NAME]: Current database user ' || USER || ' does NOT have ' || MISSING_PRIVS);
  370. end if;
  371. if MIS_AUTH = 'Y' then
  372. dbms_output.put_line(MIS_AUTH_TEXT);
  373. end if;
  374. if :MIS_PRIV = 'Y' or MIS_AUTH = 'Y' then
  375. dbms_output.put_line('!');
  376. dbms_output.put_line('! If you are sure that the current database user ' || USER || ' is granted with the required privileges,');
  377. dbms_output.put_line('! continue with yes(y), otherwise select No(n) and please log on with a database user with sufficient privileges.');
  378. dbms_output.put_line('! ---');
  379. dbms_output.put_line('! Running Review Lite with insufficient privileges may have a significant impact on the quality of the data');
  380. dbms_output.put_line('! and information collected from this environment. Due to this, Oracle may have to get back to you');
  381. dbms_output.put_line('! and ask for additional items, or to execute again.');
  382. dbms_output.put_line('!');
  383. end if;
  384. if '&SCRIPT_SI' is not null and :MIS_PRIV = 'Y' then
  385. dbms_output.put_line('DB: CT-02807: WARNING: [&&INSTANCE_NAME]: Running in silent mode. Continuing with missing privileges. Errors expected.');
  386. end if;
  387. END;
  388. /
  389. PROMPT
  390. PROMPT
  391. SET TERMOUT OFF
  392. WHENEVER SQLERROR EXIT
  393. -- FORCE "divisor is equal to zero" AND SQLERROR EXIT IF DB VERSION CANNOT BE READ
  394. select 1/decode(:MIS_PRIV, 'X', 0, null) as " " from DUAL;
  395. WHENEVER SQLERROR CONTINUE
  396. DEFINE PROMPT_PRIV=NO
  397. col PROMPT_PRIV_ new_val PROMPT_PRIV noprint
  398. select '' PROMPT_PRIV_ from DUAL where :MIS_PRIV='Y';
  399. col PROMPT_PRIV_ clear
  400. DEFINE LANSWER=N
  401. SET TERMOUT ON
  402. ACCEPT&SCRIPT_SI&PROMPT_PRIV LANSWER FORMAT A1 PROMPT 'Do you wish to continue anyway? (y\n): '
  403. SET TERMOUT OFF
  404. WHENEVER SQLERROR EXIT
  405. -- FORCE "divisor is equal to zero" AND SQLERROR EXIT IF NOT ACCEPTED
  406. -- WILL ALSO CONTINUE IF PROMPT_PRIV SUBSTITUTION VARIABLE IS NOT NULL
  407. select 1/0 as " " from DUAL where not (nvl('&LANSWER', 'N') in ('Y', 'y') or '&PROMPT_PRIV' is not null or '&SCRIPT_SI' is not null);
  408. WHENEVER SQLERROR CONTINUE
  409. -- Check Privileges END
  410. SET TERMOUT ON
  411. SET FEEDBACK ON
  412. SET VERIFY ON
  413. -- Get SYSDATE
  414. define SYSDATE_START=UNKNOWN
  415. col C0 new_val SYSDATE_START
  416. select SYSDATE C0 from dual;
  417. -- Set output location
  418. define OUTPUT_PATH=***
  419. col C3 new_val OUTPUT_PATH
  420. select '&&HOST_NAME._&&INSTANCE_NAME.' ||
  421. decode('&SCRIPT_TS', null, null, '_'||to_char(to_date('&SYSDATE_START', 'YYYY-MM-DD_HH24:MI:SS'), 'YYYY.MM.DD.HH24.MI.SS')) C3 from DUAL;
  422. define GREP_PREFIX=***
  423. col C4 new_val GREP_PREFIX noprint
  424. SELECT 'GREP'||'ME>>,&&HOST_NAME.,&&INSTANCE_NAME.,' || '&SYSDATE_START' || ',&&HOST_NAME.,' || name as C4 FROM v$database;
  425. --{
  426. --Detect SQL*Plus client path separator
  427. --Using some Unix/Linux specific syntax
  428. host echo select \'$PWD\' as PWD_, \'rm\' as RMDEL_, \'/\' as PSEP_ from dual where \'$PWD\' like \'%/%\'\; > psep.sql 2> fii_err.txt
  429. define PWD=*
  430. define RMDEL=del
  431. define PSEP=\
  432. col PWD_ new_val PWD noprint
  433. col RMDEL_ new_val RMDEL noprint
  434. col PSEP_ new_val PSEP noprint
  435. -- The query syntax is correct only on Unix/Linux
  436. SET TERMOUT OFF
  437. @psep.sql
  438. SET TERMOUT ON
  439. -- Cleanup
  440. host &RMDEL psep.sql 2> fii_err.txt
  441. --}
  442. HOST mkdir &SCRIPT_SD 2> fii_err.txt
  443. define OUTPUT_PATH_SD=***
  444. col C3 new_val OUTPUT_PATH_SD
  445. select decode('&&SCRIPT_SD', null, '&&OUTPUT_PATH', '&&SCRIPT_SD&&PSEP&&OUTPUT_PATH') C3 from DUAL;
  446. HOST mkdir &&OUTPUT_PATH_SD
  447. col C3 new_val OUTPUT_PATH
  448. select decode(instr('&&OUTPUT_PATH_SD', '&&PSEP', -1),
  449. length('&&OUTPUT_PATH_SD'), '&&OUTPUT_PATH_SD', -- if terminated by path separator, do not prefix the files
  450. '&&OUTPUT_PATH_SD&&PSEP&&OUTPUT_PATH._') as C3
  451. from dual;
  452. col C3 clear
  453. SET VERIFY OFF
  454. PROMPT ***** Collecting information ... *****
  455. spool&SCRIPT_OO &&OUTPUT_PATH.summary.csv
  456. SET HEADING OFF
  457. SET FEEDBACK OFF
  458. SET LINESIZE 1000
  459. COL VALUE FORMAT A30 WRAP
  460. PROMPT HOST_NAME: &&HOST_NAME.
  461. PROMPT INSTANCE_NAME(~PDB_NAME): &&INSTANCE_NAME.
  462. SHOW USER
  463. PROMPT
  464. PROMPT OUTPUT PATH AND FILENAME PATTERN IS is &&OUTPUT_PATH*.csv
  465. REM Setting Format output...
  466. PROMPT
  467. PROMPT ReviewLite &SCRIPT_RELEASE. output file created at &SYSDATE_START
  468. PROMPT
  469. PROMPT
  470. PROMPT DB CPU COUNT
  471. PROMPT ==========================================================
  472. select 'DATABASE CPU COUNT: ' || VALUE ||
  473. decode(ISDEFAULT, 'TRUE', ' (ISDEFAULT)', ' (IS NOT DEFAULT !!!: '|| ISDEFAULT ||')')
  474. from V$PARAMETER where upper(NAME) like '%CPU_COUNT%';
  475. PROMPT
  476. PROMPT CPU Count as set on the database, could have been modified manually.
  477. PROMPT Please verify using CPU Query and also check for Hyper Threading and
  478. PROMPT Multi-core technology in the server.
  479. SET HEADING ON
  480. PROMPT
  481. PROMPT
  482. PROMPT STAND BY SERVER CONFIGURATION
  483. PROMPT ==========================================================
  484. col FAL_COMPONENT format A96 wrap
  485. col VALUE format A36 wrap
  486. select distinct
  487. decode( upper(NAME), 'FAL_SERVER', 'FAL_SERVER = FAL (fetch archive log) server for a standby database - an Oracle Net service name',
  488. 'FAL_CLIENT = FAL (fetch archive log) client (standby database) - an Oracle Net service name'
  489. ) as FAL_COMPONENT,
  490. VALUE
  491. from GV$PARAMETER
  492. where upper(NAME) in ('FAL_CLIENT', 'FAL_SERVER');
  493. col VALUE format A30 wrap
  494. PROMPT
  495. PROMPT If not null information is shown then the database is part of a Data Guard (Standby) configuration
  496. PROMPT
  497. select DATABASE_ROLE, OPEN_MODE, DBID
  498. from V$DATABASE;
  499. -- More details from 11.1 and higher
  500. select DATABASE_ROLE, OPEN_MODE, DBID, DB_UNIQUE_NAME, PRIMARY_DB_UNIQUE_NAME, DATAGUARD_BROKER
  501. from V$DATABASE;
  502. SET FEEDBACK ON
  503. COL USERNAME FORMAT A30 WRAP
  504. PROMPT
  505. PROMPT
  506. PROMPT
  507. PROMPT USERS CREATED AND CREATION DATE
  508. PROMPT ==========================================================
  509. SELECT&SCRIPT_OO USERNAME, CREATED FROM DBA_USERS ORDER BY CREATED, USERNAME;
  510. PROMPT
  511. PROMPT BASIC INFORMATION
  512. PROMPT ==========================================================
  513. PROMPT
  514. PROMPT V$VERSION
  515. PROMPT ==========================================================
  516. select * from V$VERSION;
  517. PROMPT
  518. PROMPT V$DATABASE;
  519. PROMPT ==========================================================
  520. COL FS_FAILOVER_OBSERVER_HOST FORMAT A30 WRAP
  521. select * from V$DATABASE;
  522. PROMPT
  523. PROMPT GV$INSTANCE
  524. PROMPT ==========================================================
  525. select * from GV$INSTANCE order by INSTANCE_NAME;
  526. PROMPT
  527. PROMPT GV$PARAMETER
  528. PROMPT ==========================================================
  529. col NAME_ format a40 wrap
  530. col VALUE_ format a60 wrap
  531. select INST_ID, NAME as NAME_, VALUE as VALUE_, ISDEFAULT, DESCRIPTION
  532. from GV$PARAMETER
  533. where upper(NAME) like '%CPU_COUNT%'
  534. or upper(NAME) like '%FAL_CLIENT%'
  535. or upper(NAME) like '%FAL_SERVER%'
  536. or upper(NAME) like '%CLUSTER%'
  537. or upper(NAME) like '%CONTROL_MANAGEMENT_PACK_ACCESS%'
  538. or upper(NAME) like '%ENABLE_DDL_LOGGING%'
  539. or upper(NAME) like '%COMPATIBLE%'
  540. or upper(NAME) like '%LOG_ARCHIVE_DEST%'
  541. or upper(NAME) like '%O7_DICTIONARY_ACCESSIBILITY%'
  542. or upper(NAME) like '%ENABLE_PLUGGABLE_DATABASE%'
  543. or upper(NAME) like '%INMEMORY%'
  544. or upper(NAME) like '%DB_UNIQUE_NAME%'
  545. or upper(NAME) like '%LOG_ARCHIVE_CONFIG%'
  546. or upper(NAME) like '%HEAT_MAP%'
  547. or upper(NAME) like '%SPATIAL_VECTOR_ACCELERATION%'
  548. or upper(NAME) like '%ENCRYPT_NEW_TABLESPACES%'
  549. order by NAME, INST_ID;
  550. col NAME_ clear
  551. col VALUE_ clear
  552. PROMPT
  553. PROMPT V$CONTAINERS
  554. PROMPT ==========================================================
  555. select * from V$CONTAINERS;
  556. PROMPT
  557. PROMPT DBA_PDBS
  558. PROMPT ==========================================================
  559. select * from DBA_PDBS;
  560. PROMPT
  561. PROMPT SYS_CONTEXT INFO ABOUT CDB AND PDB
  562. PROMPT ==========================================================
  563. col CDB_NAME format A30 WRAP
  564. col CON_ID format A10 WRAP
  565. col CON_NAME format A30 WRAP
  566. select
  567. SYS_CONTEXT('USERENV', 'CDB_NAME') as CDB_NAME,
  568. SYS_CONTEXT('USERENV', 'CON_ID' ) as CON_ID,
  569. SYS_CONTEXT('USERENV', 'CON_NAME') as CON_NAME
  570. from dual;
  571. PROMPT
  572. PROMPT CHECKING CONNECTION
  573. PROMPT ==========================================================
  574. PROMPT
  575. prompt Checking if database is open ...
  576. select USER from USER_OBJECTS where rownum=1;
  577. prompt Checking basic SELECT privileges ...
  578. select USER from DBA_OBJECTS, V$SESSION, V$DATABASE where rownum=1;
  579. prompt Listing required SELECT privileges ...
  580. select PRIVILEGE FROM USER_SYS_PRIVS where PRIVILEGE in ('SELECT ANY TABLE', 'SELECT ANY DICTIONARY');
  581. select PRIVILEGE FROM ROLE_SYS_PRIVS where PRIVILEGE in ('SELECT ANY TABLE', 'SELECT ANY DICTIONARY');
  582. PROMPT
  583. PROMPT PLUGGABLE DATABASES INFORMATION
  584. PROMPT ==========================================================
  585. PROMPT SHOW CON_ID
  586. SHOW CON_ID
  587. PROMPT SHOW CON_NAME
  588. SHOW CON_NAME
  589. PROMPT SHOW PDBS
  590. SHOW PDBS
  591. PROMPT
  592. PROMPT SQL*Plus SETTINGS
  593. PROMPT ==========================================================
  594. SHOW ALL
  595. PROMPT ==========================================================
  596. SPOOL OFF
  597. SPOOL &&OUTPUT_PATH.version.csv
  598. SET HEADING OFF
  599. SET FEEDBACK OFF
  600. SET LINESIZE 300
  601. PROMPT DATABASE VERSION
  602. PROMPT -------------------------------------------
  603. PROMPT AUDIT_ID,BANNER,HOST_NAME,INSTANCE_NAME,SYSDATE
  604. SELECT
  605. 0 ||','||
  606. '"'||BANNER||'"' ||','||
  607. '&&HOST_NAME' ||','||
  608. '&&INSTANCE_NAME' ||','||
  609. '&SYSDATE_START' ||','
  610. FROM V$VERSION;
  611. prompt DATABASE PATCHES
  612. prompt -------------------------------------------;
  613. prompt AUDIT_ID,ACTION_TIME#ACTION#NAMESPACE#VERSION#ID#COMMENTS,HOST_NAME,INSTANCE_NAME,SYSDATE
  614. select
  615. '0,"' ||
  616. ACTION_TIME ||'#'||
  617. ACTION ||'#'||
  618. NAMESPACE ||'#'||
  619. VERSION ||'#'||
  620. ID ||'#'||
  621. COMMENTS ||
  622. '"' ||','||
  623. '&&HOST_NAME' ||','||
  624. '&&INSTANCE_NAME' ||','||
  625. '&SYSDATE_START' ||','
  626. from SYS.REGISTRY$HISTORY
  627. order by ACTION_TIME;
  628. SPOOL OFF
  629. -- Prepare dynamic select for DBA_USERS columns
  630. define EXPIRY_DATE_DYN=''''''
  631. col C4 new_val EXPIRY_DATE_DYN
  632. SELECT min(EXPIRY_DATE /*introduced in 8.0*/) C, 'EXPIRY_DATE' C4 FROM DBA_USERS;
  633. define ACCOUNT_STATUS_DYN=''''''
  634. col C4 new_val ACCOUNT_STATUS_DYN
  635. SELECT min(ACCOUNT_STATUS /*introduced in 8.0*/) C, 'ACCOUNT_STATUS' C4 FROM DBA_USERS;
  636. define COMMON_DYN=''''''
  637. col C4 new_val COMMON_DYN
  638. SELECT min(COMMON /*introduced in 12.1*/) C, 'COMMON' C4 FROM DBA_USERS;
  639. define LAST_LOGIN_DYN=''''''
  640. col C4 new_val LAST_LOGIN_DYN
  641. SELECT min(LAST_LOGIN /*introduced in 12.1*/) C, 'LAST_LOGIN' C4 FROM DBA_USERS;
  642. col C4 clear
  643. SPOOL&SCRIPT_OO &&OUTPUT_PATH.users.csv
  644. SET HEADING OFF
  645. SET FEEDBACK ON
  646. SET LINESIZE 300
  647. PROMPT
  648. PROMPT USERS CREATED
  649. PROMPT -------------------------------------------
  650. col USERNAME format a18
  651. col USERID format a7
  652. col DEFAULT_TABLESPACE format a13
  653. col TEMPORARY_TABLESPACE format a13
  654. col profile format a10
  655. PROMPT AUDIT_ID,USERNAME,USER_ID,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE,CREATED,PROFILE,EXPIRY_DATE,ACCOUNT_STATUS,COMMON,LAST_LOGIN,HOST_NAME,INSTANCE_NAME,SYSDATE
  656. SELECT&SCRIPT_OO DISTINCT
  657. 0 ||','||
  658. USERNAME ||','||
  659. USER_ID ||','||
  660. DEFAULT_TABLESPACE ||','||
  661. TEMPORARY_TABLESPACE ||','||
  662. CREATED ||','||
  663. PROFILE ||','||
  664. &EXPIRY_DATE_DYN. ||','||
  665. &ACCOUNT_STATUS_DYN. ||','||
  666. &COMMON_DYN. ||','||
  667. &LAST_LOGIN_DYN. ||','|| -- TIMESTAMP(9) WITH TIME ZONE
  668. '&&HOST_NAME' ||','||
  669. '&&INSTANCE_NAME' ||','||
  670. '&SYSDATE_START' ||','
  671. FROM DBA_USERS;
  672. SPOOL OFF
  673. SPOOL&SCRIPT_OO &&OUTPUT_PATH.parameter.csv
  674. SET HEADING OFF
  675. SET FEEDBACK ON
  676. SET LINESIZE 300
  677. col VALUE format a10
  678. col ISDEFAULT format a7
  679. PROMPT
  680. PROMPT DATABASE PARAMETER
  681. PROMPT -------------------------------------------
  682. PROMPT AUDIT_ID,NAME,VALUE,ISDEFAULT,DESCRIPTION,HOST_NAME,INSTANCE_NAME,SYSDATE
  683. SELECT&SCRIPT_OO
  684. 0 ||','||
  685. NAME ||','||
  686. VALUE ||','||
  687. ISDEFAULT ||','||
  688. DESCRIPTION ||','||
  689. '&&HOST_NAME' ||','||
  690. '&&INSTANCE_NAME' ||','||
  691. '&SYSDATE_START' ||','
  692. FROM V$PARAMETER
  693. WHERE UPPER(NAME) = 'CPU_COUNT';
  694. SPOOL OFF
  695. SPOOL &&OUTPUT_PATH.segments.csv
  696. SET HEADING OFF
  697. SET FEEDBACK OFF
  698. SET LINESIZE 300
  699. col SEGMENT_TYPE format a10
  700. col SEGMENT_NAME format a30
  701. col OWNER format a10 wrap
  702. col PARTITION_NAME format a15
  703. PROMPT
  704. PROMPT PARTITIONED DBA SEGMENTS (not applicable for release 7)
  705. PROMPT -------------------------------------------------------
  706. PROMPT AUDIT_ID,OWNER,SEGMENT_TYPE,SEGMENT_NAME,PARTITION_COUNT,PARTITION_MIN,PARTITION_MAX,HOST_NAME,INSTANCE_NAME,SYSDATE
  707. SELECT
  708. 0 ||','||
  709. OWNER ||','||
  710. OBJECT_TYPE ||','||
  711. OBJECT_NAME ||','||
  712. COUNT(*) ||','||
  713. MIN(SUBOBJECT_NAME) ||','||
  714. MAX(SUBOBJECT_NAME) ||','||
  715. '&&HOST_NAME' ||','||
  716. '&&INSTANCE_NAME' ||','||
  717. '&SYSDATE_START' ||','
  718. FROM DBA_OBJECTS
  719. WHERE OBJECT_TYPE LIKE '%PARTITION%'
  720. GROUP BY OWNER, OBJECT_TYPE, OBJECT_NAME
  721. ORDER BY 1;
  722. SPOOL OFF
  723. SPOOL&SCRIPT_OO &&OUTPUT_PATH.license.csv
  724. SET HEADING OFF
  725. SET FEEDBACK ON
  726. SET LINESIZE 300
  727. PROMPT
  728. PROMPT
  729. PROMPT LICENSE INFORMATION
  730. PROMPT -------------------------------------------
  731. PROMPT
  732. PROMPT AUDIT_ID,SESSIONS_MAX,SESSIONS_WARNING,SESSIONS_CURRENT,SESSIONS_HIGHWATER,USERS_MAX,HOST_NAME,INSTANCE_NAME,SYSDATE
  733. select&SCRIPT_OO
  734. 0 ||','||
  735. SESSIONS_MAX ||','||
  736. SESSIONS_WARNING ||','||
  737. SESSIONS_CURRENT ||','||
  738. SESSIONS_HIGHWATER ||','||
  739. USERS_MAX ||','||
  740. '&&HOST_NAME' ||','||
  741. '&&INSTANCE_NAME' ||','||
  742. '&SYSDATE_START' ||','
  743. FROM V$LICENSE;
  744. SPOOL OFF
  745. SPOOL&SCRIPT_OO &&OUTPUT_PATH.session.csv
  746. SET HEADING OFF
  747. SET FEEDBACK ON
  748. SET LINESIZE 800
  749. define LOGON_TIME_=NULL
  750. col LOGON_TIME_ new_val LOGON_TIME_
  751. select LOGON_TIME, 'LOGON_TIME' as LOGON_TIME_ from V$SESSION where rownum=1;
  752. PROMPT
  753. PROMPT
  754. PROMPT SESSIONS INFORMATION
  755. PROMPT -------------------------------------------
  756. PROMPT
  757. PROMPT AUDIT_ID,SID,USER#,USERNAME,COMMAND,S.STATUS,SERVER,SCHEMANAME,OSUSER,PROCESS,MACHINE,TERMINAL,PROGRAM,TYPE,MODULE,ACTION,CLIENT_INFO,LAST_CALL_ET,LOGON_TIME,HOST_NAME,INSTANCE_NAME,SYSDATE
  758. select&SCRIPT_OO
  759. 0 || ',' ||
  760. SID || ',' ||
  761. SERIAL# || ',"'||
  762. USERNAME ||'","'||
  763. COMMAND ||'","'||
  764. STATUS ||'","'||
  765. SERVER ||'","'||
  766. SCHEMANAME ||'","'||
  767. OSUSER ||'","'||
  768. PROCESS ||'","'||
  769. MACHINE ||'","'||
  770. TERMINAL ||'","'||
  771. PROGRAM ||'","'||
  772. TYPE ||'","'||
  773. MODULE ||'","'||
  774. ACTION ||'","'||
  775. CLIENT_INFO ||'","'||
  776. LAST_CALL_ET ||'","'||
  777. &LOGON_TIME_ ||'",' ||
  778. '&&HOST_NAME' || ',' ||
  779. '&&INSTANCE_NAME' || ',' ||
  780. '&SYSDATE_START' || ','
  781. FROM V$SESSION;
  782. SPOOL OFF
  783. SPOOL &&OUTPUT_PATH.v_option.csv
  784. SET HEADING OFF
  785. SET FEEDBACK OFF
  786. SET LINESIZE 300
  787. PROMPT
  788. PROMPT DATABASE OPTIONS
  789. PROMPT -------------------------------------------
  790. PROMPT AUDIT_ID,PARAMETER,VALUE,HOST_NAME,INSTANCE_NAME,SYSDATE
  791. select distinct
  792. 0 ||','||
  793. PARAMETER ||','||
  794. VALUE ||','||
  795. '&&HOST_NAME' ||','||
  796. '&&INSTANCE_NAME' ||','||
  797. '&SYSDATE_START' ||','
  798. from V$OPTION;
  799. SPOOL OFF
  800. SPOOL &&OUTPUT_PATH.dba_feature.csv
  801. SET HEADING OFF
  802. SET FEEDBACK OFF
  803. SET LINESIZE 500
  804. Column name format a45
  805. Column detected_usages format 9999
  806. PROMPT
  807. PROMPT
  808. PROMPT 10g DBA_FEATURE_USAGE_STATISTICS
  809. PROMPT -------------------------------------------
  810. PROMPT
  811. PROMPT AUDIT_ID,DBID,NAME,VERSION,DETECTED_USAGES,TOTAL_SAMPLES,CURRENTLY_USED,FIRST_USAGE_DATE,LAST_USAGE_DATE,AUX_COUNT,FEATURE_INFO,LAST_SAMPLE_DATE,LAST_SAMPLE_PERIOD,SAMPLE_INTERVAL,DESCRIPTION,HOST_NAME,INSTANCE_NAME,SYSDATE
  812. SELECT
  813. 0 ||',"' ||
  814. DBID ||'","'||
  815. NAME ||'","'||
  816. VERSION ||'","'||
  817. DETECTED_USAGES ||'","'||
  818. TOTAL_SAMPLES ||'","'||
  819. CURRENTLY_USED ||'","'||
  820. FIRST_USAGE_DATE ||'","'||
  821. LAST_USAGE_DATE ||'","'||
  822. AUX_COUNT ||'","'||
  823. '' ||'","'|| -- skip FEATURE_INFO clob
  824. LAST_SAMPLE_DATE ||'","'||
  825. LAST_SAMPLE_PERIOD ||'","'||
  826. SAMPLE_INTERVAL ||'","'||
  827. DESCRIPTION ||'","'||
  828. '&&HOST_NAME' ||'","'||
  829. '&&INSTANCE_NAME' ||'","'||
  830. '&SYSDATE_START' ||'",'
  831. from DBA_FEATURE_USAGE_STATISTICS
  832. where detected_usages > 0 and (
  833. name like '%ADDM%'
  834. or name like '%Automatic Database Diagnostic Monitor%'
  835. or name like '%Automatic Workload Repository%'
  836. or name like '%AWR%'
  837. or name like '%Baseline%'
  838. or name like '%Compression%' -- 16.2
  839. or name like '%Data Guard%'
  840. or name like '%Data Mining%'
  841. or name like '%Database Replay%'
  842. or name like '%EM%'
  843. or name like '%Encrypt%'
  844. or name like '%Exadata%'
  845. or name like '%Flashback Data Archive%'
  846. or name like '%Label Security%'
  847. or name like '%OLAP%'
  848. or name like '%Pack%'
  849. or name like '%Partitioning%'
  850. or name like '%Real Application Cluster%' -- 16.2
  851. or name like '%SecureFile%'
  852. or name like '%Spatial%'
  853. or name like '%SQL Monitoring%'
  854. or name like '%SQL Performance%'
  855. or name like '%SQL Profile%'
  856. or (name like '%SQL Tuning%' and name not like 'Automatic SQL Tuning Advisor') -- Automatic SQL Tuning Advisor is configured by default
  857. or name like '%SQL Access Advisor%'
  858. or name like '%Vault%'
  859. or (name like '%Datapump%' and (regexp_like(lower(to_char(feature_info)), '*compression used: [1-9]* times*') or regexp_like(lower(to_char(feature_info)), 'compression used: *true')))
  860. or (name like '%Datapump%' and (regexp_like(lower(to_char(feature_info)), '*encryption used: [1-9]* times*' ) or regexp_like(lower(to_char(feature_info)), 'encryption used: *true' )))
  861. or name like '%Flashback Data Archive%'
  862. or name like '%Data Redaction%'
  863. or name like '%Global Data Services%'
  864. or name like '%Heat Map%'
  865. or name like '%In-Memory%'
  866. or name like '%Information Lifecycle Management%'
  867. or name like '%Oracle Multitenant%'
  868. or name like '%Oracle Pluggable Databases%'
  869. or name like '%Privilege Capture%'
  870. or name like '%Quality of Service Management%'
  871. or name like '%Zone maps%'
  872. )
  873. order by name, version;
  874. SPOOL OFF
  875. SPOOL &&OUTPUT_PATH.options.csv
  876. SET HEADING OFF
  877. SET FEEDBACK OFF
  878. SET LINESIZE 200
  879. SET HEADING OFF
  880. PROMPT
  881. PROMPT *** PARTITIONING
  882. PROMPT ======================================================================
  883. select 'ORACLE PARTITIONING INSTALLED: ' || VALUE from V$OPTION where PARAMETER='Partitioning';
  884. SET FEEDBACK ON
  885. SET HEADING ON
  886. COL OWNER FORMAT A20 WRAP
  887. COL SEGMENT_TYPE FORMAT A18 WRAP
  888. COL SEGMENT_NAME FORMAT A30 WRAP
  889. SELECT distinct OWNER, OBJECT_TYPE as SEGMENT_TYPE, OBJECT_NAME as SEGMENT_NAME, min(created) min_created, min(last_ddl_time) min_last_dll_time
  890. FROM DBA_OBJECTS
  891. WHERE OBJECT_TYPE LIKE '%PARTITION%'
  892. group by OWNER, OBJECT_TYPE, OBJECT_NAME
  893. ORDER BY 1, 2, 3;
  894. PROMPT IF NO ROWS ARE RETURNED, THEN PARTITIONING IS NOT BEING USED.
  895. PROMPT
  896. PROMPT IF ROWS ARE RETURNED, CHECK THAT BOTH OWNER AND SEGMENT ARE
  897. PROMPT ORACLE CREATED. IF NOT, THEN PARTITIONING IS BEING USED.
  898. PROMPT
  899. PROMPT * Partitioned objects on RECYCLEBIN
  900. select OWNER, ORIGINAL_NAME, OBJECT_NAME, TYPE, CREATETIME, DROPTIME, PARTITION_NAME, SPACE, CAN_UNDROP
  901. from DBA_RECYCLEBIN
  902. where TYPE not like '%Partition%'
  903. and (OWNER, OBJECT_NAME) in (select OWNER, OBJECT_NAME from DBA_RECYCLEBIN where TYPE like '%Partition%')
  904. union all
  905. select OWNER, ORIGINAL_NAME, OBJECT_NAME, TYPE, CREATETIME, DROPTIME, PARTITION_NAME, SPACE, CAN_UNDROP
  906. from DBA_RECYCLEBIN
  907. where TYPE like '%Partition%';
  908. SET HEADING OFF
  909. SET FEEDBACK OFF
  910. PROMPT
  911. PROMPT
  912. PROMPT *** RAC (REAL APPLICATION CLUSTERS)
  913. PROMPT ======================================================================
  914. select 'ORACLE RAC INSTALLED: ' || VALUE from V$OPTION where PARAMETER in ('Real Application Clusters', 'Parallel Server');
  915. SET HEADING ON
  916. PROMPT
  917. PROMPT CHECKING TO SEE IF RAC IS INSTALLED AND BEING USED...
  918. PROMPT RAC (Real Application Clusters) = Former OPS (Oracle Parallel Server)
  919. PROMPT
  920. PROMPT * Check cluster_database initialization parameter (for DB version 9.0.1 and higher)
  921. select INST_ID, NAME, VALUE
  922. from GV$PARAMETER
  923. where NAME = 'cluster_database'
  924. order by INST_ID;
  925. PROMPT
  926. PROMPT If the value returned is TRUE, then RAC/OPS is being used.
  927. PROMPT even if the following query only returns one row.
  928. PROMPT
  929. PROMPT * Check database instances
  930. select INSTANCE_NAME, HOST_NAME, INST_ID, STATUS
  931. from GV$INSTANCE
  932. order by INST_ID;
  933. PROMPT
  934. PROMPT If only one row is returned and DB version is 11.2 or higher, then it might be an Oracle RAC One Node configuration.
  935. PROMPT In some cases, for limited time periods, Oracle RAC One Node can be running Online Database Relocation
  936. PROMPT and 2 instances are legally running for the Oracle RAC One Node database.
  937. PROMPT
  938. PROMPT In all the other cases, if more than one row is returned, then RAC/OPS IS being used for this database.
  939. SET HEADING ON
  940. SET FEEDBACK ON
  941. PROMPT
  942. PROMPT
  943. PROMPT
  944. PROMPT *** MULTITENANT (introduced in 12c_r1)
  945. PROMPT ======================================================================
  946. PROMPT * Looking for pluggable databases (PDB)
  947. col OPEN_TIME format a20 wrap
  948. select
  949. b.CDB,
  950. a.CON_ID,
  951. a.NAME,
  952. a.OPEN_MODE,
  953. a.OPEN_TIME,
  954. decode(a.CON_ID, 0, 'entire CDB or non-CDB', 1, 'ROOT', 2, 'SEED', 'PDB') as CONTAINER
  955. from V$CONTAINERS a, V$DATABASE b
  956. order by a.CON_ID;
  957. PROMPT If more than one PDB container is returned, then Multitenant Option is in use
  958. col OPEN_TIME clear
  959. PROMPT
  960. PROMPT
  961. PROMPT
  962. PROMPT *** ACTIVE DATA GUARD (introduced in 11.1)
  963. PROMPT ======================================================================
  964. PROMPT * Checking for "Physical Standby with Real-time Query" feature usage
  965. select a.dest_id, a.dest_name, a.status, a.type, a.database_mode, a.recovery_mode, a.destination, a.db_unique_name, b.value as compatible
  966. from v$archive_dest_status a, v$parameter b
  967. where b.name = 'compatible' and b.value like '1%' and b.value not like '10%'
  968. and a.recovery_mode like 'MANAGED%' and a.status = 'VALID' and a.database_mode = 'OPEN_READ-ONLY'
  969. order by a.dest_id;
  970. SET LINESIZE 300
  971. PROMPT If any rows are returned, then Active Data Guard is in use
  972. PROMPT
  973. PROMPT Gathering information about the LOCAL database open_mode
  974. PROMPT
  975. col PLATFORM_NAME format a40 wrap
  976. select dbid, name, db_unique_name, open_mode, database_role, remote_archive, dataguard_broker, guard_status, platform_name
  977. from v$database;
  978. SET LINESIZE 200
  979. PROMPT
  980. PROMPT * Checking for "Fast Incremental Backup on Physical Standby" feature usage
  981. col FILENAME format a40 wrap
  982. select
  983. b.DATABASE_ROLE,
  984. a.STATUS,
  985. a.FILENAME,
  986. a.BYTES
  987. from V$BLOCK_CHANGE_TRACKING a, V$DATABASE b
  988. where b.DATABASE_ROLE like 'PHYSICAL STANDBY'
  989. and a.STATUS = 'ENABLED'
  990. ;
  991. PROMPT If any rows are returned, then Active Data Guard is in use
  992. col PLATFORM_NAME clear
  993. col FILENAME clear
  994. SET HEADING OFF
  995. SET FEEDBACK OFF
  996. PROMPT
  997. PROMPT *** OLAP
  998. PROMPT ======================================================================
  999. select 'ORACLE OLAP INSTALLED: ' || VALUE from V$OPTION where PARAMETER='OLAP';
  1000. PROMPT
  1001. PROMPT If the value is TRUE then the OLAP option IS INSTALLED
  1002. PROMPT If the value is FALSE then the OLAP option IS NOT INSTALLED
  1003. PROMPT If NO rows are selected then the option is NOT being used.
  1004. PROMPT
  1005. PROMPT
  1006. PROMPT CHECKING TO SEE IF THE OLAP OPTION IS BEING USED...
  1007. PROMPT
  1008. PROMPT CHECKING FOR OLAP CUBES...
  1009. PROMPT
  1010. SET HEADING ON
  1011. SET FEEDBACK OFF
  1012. select
  1013. count(*) "DBA$ OLAP CUBES"
  1014. from OLAPSYS.DBA$OLAP_CUBES
  1015. where OWNER <> 'SH';
  1016. select
  1017. count(*) "DBA_ OLAP CUBES"
  1018. from DBA_CUBES
  1019. where OWNER <> 'SH';
  1020. PROMPT
  1021. PROMPT IF THE COUNT IS > 0 THEN CHECK THE WORKSPACES BEING USED
  1022. PROMPT IF THE COUNT IS = 0 THEN THE OLAP OPTION IS NOT BEING USED
  1023. PROMPT IF THE TABLE DOES NOT EXIST (ORA-00942) ...THEN THE OLAP CUBES ARE NOT BEING USED
  1024. PROMPT
  1025. PROMPT CHECKING FOR ANALYTICAL WORK SPACES...
  1026. PROMPT
  1027. select count(*) "Analytical Workspaces"
  1028. from DBA_AWS;
  1029. PROMPT
  1030. PROMPT IF THE COUNT IS >1 THEN CHECK WORKSPACES AND ITS OWNER
  1031. PROMPT IF THE COUNT IS 0 OR 1 THEN ANALYTICAL WORKSPACES ARE NOT BEING USED
  1032. PROMPT IF THE TABLE DOES NOT EXIST (ORA-00942) ...THEN ANALYTICAL WORKSPACES ARE NOT BEING USED
  1033. PROMPT
  1034. PROMPT CHECKING FOR ANALYTICAL WORKSPACE OWNERS...
  1035. PROMPT
  1036. SET HEADING ON
  1037. SET FEEDBACK ON
  1038. select OWNER, AW_NUMBER, AW_NAME, PAGESPACES, GENERATIONS
  1039. from DBA_AWS;
  1040. PROMPT
  1041. PROMPT NOTE: A positive result FROM either QUERY indicates the use of the OLAP option.
  1042. PROMPT Check the Workspace owners to detemine if Workspaces are Oracle created.
  1043. PROMPT
  1044. SET HEADING OFF
  1045. SET FEEDBACK OFF
  1046. PROMPT
  1047. PROMPT
  1048. PROMPT *** DATA MINING (ADVANCED ANALYTICS FEATURE)
  1049. PROMPT ======================================================================
  1050. PROMPT
  1051. PROMPT NOTE: Data Mining is currently component of
  1052. PROMPT . Advanced Analytics Enterprise Edition Option
  1053. select 'ORACLE DATA MINING INSTALLED: ' || VALUE from V$OPTION where PARAMETER like '%Data Mining';
  1054. SET HEADING ON
  1055. SET FEEDBACK ON
  1056. PROMPT
  1057. PROMPT CHECKING TO SEE IF DATA MINING IS BEING USED:
  1058. PROMPT
  1059. PROMPT * FOR 9i DATABASE:
  1060. PROMPT
  1061. select count(*) "Data_Mining_Model" from odm.odm_mining_model;
  1062. PROMPT
  1063. PROMPT * FOR 10g r1 DATABASE:
  1064. PROMPT
  1065. select count(*) "Data_Mining_Objects" from dmsys.dm$object;
  1066. select count(*) "Data_Mining_Models" from dmsys.dm$model;
  1067. PROMPT
  1068. PROMPT * FOR 10g r2 DATABASE:
  1069. PROMPT
  1070. select count(*) "Data_Mining_Objects" from dmsys.dm$p_model;
  1071. PROMPT
  1072. PROMPT * FOR 11g DATABASE:
  1073. PROMPT
  1074. select count(*) from SYS.MODEL$;
  1075. PROMPT If no rows are returned, then Data Mining is NOT being used.
  1076. PROMPT If rows are returned then Data Mining IS being used.
  1077. PROMPT
  1078. PROMPT
  1079. PROMPT * Gathering Data Mining Models details (11.1 and higher)
  1080. select OWNER, MODEL_NAME, MINING_FUNCTION, ALGORITHM, CREATION_DATE, BUILD_DURATION, MODEL_SIZE
  1081. from SYS.DBA_MINING_MODELS
  1082. order by OWNER, MODEL_NAME;
  1083. SET HEADING OFF
  1084. SET FEEDBACK OFF
  1085. PROMPT
  1086. PROMPT
  1087. PROMPT *** SPATIAL
  1088. PROMPT ======================================================================
  1089. select 'ORACLE SPATIAL INSTALLED: ' || VALUE from V$OPTION where PARAMETER='Spatial';
  1090. SET HEADING ON
  1091. SET FEEDBACK ON
  1092. PROMPT
  1093. PROMPT CHECKING TO SEE IF SPATIAL FUNCTIONS ARE BEING USED...
  1094. PROMPT
  1095. select count(*) as SDO_GEOM_METADATA_TABLE
  1096. from MDSYS.SDO_GEOM_METADATA_TABLE;
  1097. PROMPT If value returned is 0, then SPATIAL is NOT being used.
  1098. PROMPT If value returned is > 0, then SPATIAL OR LOCATOR IS being used.
  1099. PROMPT
  1100. PROMPT Confirm with the customer whether SPATIAL OR LOCATOR is being used.
  1101. SET HEADING OFF
  1102. SET FEEDBACK OFF
  1103. PROMPT
  1104. PROMPT
  1105. PROMPT *** LABEL SECURITY
  1106. PROMPT ======================================================================
  1107. select 'ORACLE LABEL SECURITY INSTALLED: ' || VALUE from V$OPTION where PARAMETER like '%Label Security%';
  1108. SET HEADING ON
  1109. PROMPT
  1110. PROMPT CHECKING TO SEE IF THE LABEL SECURITY OPTION IS BEING USED....
  1111. select count(*) as COUNT from LBACSYS.LBAC$POLT where OWNER <> 'SA_DEMO';
  1112. PROMPT If the COUNT > 0 then the LABEL SECURITY OPTION IS being used
  1113. PROMPT If the COUNT IS = 0 then the LABEL SECURITY OPTION IS NOT being used
  1114. PROMPT If TABLE DOES NOT EXIST (ORA-00942) ...Then LABEL SECURITY OPTION IS NOT being used
  1115. PROMPT
  1116. PROMPT
  1117. PROMPT *** ADVANCED SECURITY
  1118. PROMPT ======================================================================
  1119. PROMPT
  1120. PROMPT CHECKING FOR ADVANCED SECURITY FEATURES USAGE
  1121. SET HEADING ON
  1122. SET FEEDBACK ON
  1123. PROMPT
  1124. PROMPT * Looking for tablespaces using Transparent Data Encryption (TDE) - 11.1 and higher
  1125. PROMPT
  1126. select TABLESPACE_NAME, ENCRYPTED from DBA_TABLESPACES where ENCRYPTED='YES';
  1127. PROMPT If rows are returned, then ADVANCED SECURITY is IN USE
  1128. PROMPT
  1129. PROMPT
  1130. PROMPT * Checking for "SecureFiles Transparent Data Encryption (TDE)" feature usage
  1131. col COLUMN_NAME format a30
  1132. select
  1133. 'DBA_LOBS' as DATA_DICTIONARY_VIEW,
  1134. OWNER as TABLE_OWNER,
  1135. TABLE_NAME ,
  1136. COLUMN_NAME,
  1137. ENCRYPT,
  1138. SECUREFILE
  1139. from DBA_LOBS
  1140. where ENCRYPT not in ('NO', 'NONE')
  1141. union all
  1142. select
  1143. 'DBA_LOB_PARTITIONS' as DATA_DICTIONARY_VIEW,
  1144. TABLE_OWNER,
  1145. TABLE_NAME ,
  1146. COLUMN_NAME,
  1147. ENCRYPT,
  1148. SECUREFILE
  1149. from DBA_LOB_PARTITIONS
  1150. where ENCRYPT not in ('NO', 'NONE')
  1151. union all
  1152. select
  1153. 'DBA_LOB_SUBPARTITIONS' as DATA_DICTIONARY_VIEW,
  1154. TABLE_OWNER,
  1155. TABLE_NAME ,
  1156. COLUMN_NAME,
  1157. ENCRYPT,
  1158. SECUREFILE
  1159. from DBA_LOB_SUBPARTITIONS
  1160. where ENCRYPT not in ('NO', 'NONE')
  1161. order by 1, 2, 3, 4;
  1162. PROMPT If non-system rows are returned, then ADVANCED SECURITY is IN USE
  1163. col COLUMN_NAME clear
  1164. PROMPT
  1165. PROMPT
  1166. PROMPT *** ADVANCED COMPRESSION (introduced in 11.1)
  1167. PROMPT ======================================================================
  1168. PROMPT
  1169. PROMPT CHECKING FOR ADVANCED COMPRESSION FEATURES USAGE
  1170. SET HEADING ON
  1171. SET FEEDBACK ON
  1172. prompt
  1173. prompt * Checking for "OLTP Table Compression" feature usage
  1174. COL OWNER FORMAT A20 WRAP
  1175. COL TABLE_NAME FORMAT A30 WRAP
  1176. COL PARTITION_NAME FORMAT A20 WRAP
  1177. select 'DBA_TABLES' as source_, a.owner, a.table_name, '' as partition_name, a.compression, a.compress_for
  1178. from dba_tables a
  1179. where a.compress_for in ('FOR ALL OPERATIONS', 'OLTP', 'ADVANCED')
  1180. union all
  1181. select 'DBA_TAB_PARTITIONS' as source_, a.table_owner, a.table_name, partition_name, a.compression, a.compress_for
  1182. from dba_tab_partitions a
  1183. where a.compress_for in ('FOR ALL OPERATIONS', 'OLTP', 'ADVANCED')
  1184. union all
  1185. select 'DBA_TAB_SUBPARTITIONS' as source_, a.table_owner, a.table_name, partition_name, a.compression, a.compress_for
  1186. from dba_tab_subpartitions a
  1187. where a.compress_for in ('FOR ALL OPERATIONS', 'OLTP', 'ADVANCED')
  1188. order by 1, 2, 3, 4;
  1189. prompt If non-system rows are returned, then ADVANCED COMPRESSION OPTION is in use
  1190. prompt
  1191. prompt
  1192. prompt * Checking for "SecureFiles Compression and Deduplication" feature usage
  1193. col COLUMN_NAME format a30
  1194. select 'DBA_LOBS' as SOURCE_, a.owner, a.table_name, a.column_name, a.compression, a.deduplication
  1195. from dba_lobs a
  1196. where a.compression not in ('NO', 'NONE')
  1197. or a.deduplication not in ('NO', 'NONE')
  1198. union all
  1199. select 'DBA_LOB_PARTITIONS' as SOURCE_, a.table_owner, a.table_name, a.column_name, a.compression, a.deduplication
  1200. from dba_lob_partitions a
  1201. where a.compression not in ('NO', 'NONE')
  1202. or a.deduplication not in ('NO', 'NONE')
  1203. union all
  1204. select 'DBA_LOB_SUBPARTITIONS' as SOURCE_, a.table_owner, a.table_name, a.column_name, a.compression, a.deduplication
  1205. from dba_lob_subpartitions a
  1206. where a.compression not in ('NO', 'NONE')
  1207. or a.deduplication not in ('NO', 'NONE')
  1208. order by 1, 2, 3, 4;
  1209. prompt If non-system rows are returned, then ADVANCED COMPRESSION OPTION is in use
  1210. col COLUMN_NAME clear
  1211. prompt
  1212. prompt
  1213. prompt * Checking for "Data Guard Network Compression" feature usage
  1214. SET LINESIZE 500
  1215. col FEATURE_INFO_ format a350 wrap
  1216. select
  1217. VERSION,
  1218. NAME,
  1219. CURRENTLY_USED,
  1220. LAST_USAGE_DATE,
  1221. LAST_SAMPLE_DATE,
  1222. to_char(FEATURE_INFO) feature_info_
  1223. from dba_feature_usage_statistics
  1224. where name = 'Data Guard'
  1225. order by 1, 2;
  1226. SET LINESIZE 200
  1227. prompt If FEATURE_INFO column contains "Compression used: TRUE" then ADVANCED COMPRESSION OPTION is in use
  1228. prompt
  1229. col FEATURE_INFO_ clear
  1230. col VALUE_ format a100 wrap
  1231. col NAME_ format a30 wrap
  1232. select name NAME_, value as value_, isdefault
  1233. from V$PARAMETER
  1234. where UPPER(name) like '%LOG_ARCHIVE_DEST%'
  1235. and UPPER(value) like '%COMPRESSION=ENABLE%'
  1236. order by 1;
  1237. prompt If any rows are returned, then ADVANCED COMPRESSION OPTION is in use
  1238. prompt
  1239. col VALUE_ clear
  1240. col NAME_ clear
  1241. prompt
  1242. prompt
  1243. prompt * Checking for "Data Pump Compression" feature usage
  1244. SET LINESIZE 500
  1245. col FEATURE_INFO_ format a350 wrap
  1246. select
  1247. VERSION,
  1248. NAME,
  1249. CURRENTLY_USED,
  1250. LAST_USAGE_DATE,
  1251. LAST_SAMPLE_DATE,
  1252. to_char(FEATURE_INFO) feature_info_
  1253. from dba_feature_usage_statistics
  1254. where name = 'Oracle Utility Datapump (Export)'
  1255. order by 1, 2;
  1256. SET LINESIZE 200
  1257. prompt If FEATURE_INFO column contains "Compression used: N times" and N is not 0 (zero) then ADVANCED COMPRESSION OPTION is in use
  1258. prompt
  1259. col FEATURE_INFO_ clear
  1260. prompt
  1261. prompt
  1262. prompt * Checking for "Flashback Data Archive (Total Recall)" feature usage
  1263. col FLASHBACK_ARCHIVE_NAME format a30 wrap
  1264. col TABLESPACE_NAME format a30 wrap
  1265. col QUOTA_IN_MB format a12 wrap
  1266. col CREATE_TIME format a21 wrap
  1267. col LAST_PURGE_TIME format a21 wrap
  1268. col STATUS format a8 wrap
  1269. col OWNER_NAME format a30 wrap
  1270. col TABLE_NAME format a30 wrap
  1271. col ARCHIVE_TABLE_NAME format a30 wrap
  1272. select
  1273. a.FLASHBACK_ARCHIVE_NAME,
  1274. b.TABLESPACE_NAME,
  1275. b.QUOTA_IN_MB,
  1276. a.RETENTION_IN_DAYS,
  1277. a.CREATE_TIME,
  1278. a.LAST_PURGE_TIME,
  1279. a.STATUS -- DEFAULT or not (NULL)
  1280. from DBA_FLASHBACK_ARCHIVE a
  1281. left join DBA_FLASHBACK_ARCHIVE_TS b on a.FLASHBACK_ARCHIVE# = b.FLASHBACK_ARCHIVE#
  1282. order by 1, 2;
  1283. select
  1284. FLASHBACK_ARCHIVE_NAME,
  1285. OWNER_NAME,
  1286. TABLE_NAME,
  1287. ARCHIVE_TABLE_NAME
  1288. from DBA_FLASHBACK_ARCHIVE_TABLES
  1289. order by 1, 2, 3;
  1290. prompt If any rows are returned, then ADVANCED COMPRESSION OPTION is in use
  1291. prompt
  1292. col FLASHBACK_ARCHIVE_NAME clear
  1293. col TABLESPACE_NAME clear
  1294. col QUOTA_IN_MB clear
  1295. col CREATE_TIME clear
  1296. col LAST_PURGE_TIME clear
  1297. col STATUS clear
  1298. col OWNER_NAME clear
  1299. col TABLE_NAME clear
  1300. col ARCHIVE_TABLE_NAME clear
  1301. PROMPT
  1302. PROMPT
  1303. PROMPT *** DATABASE VAULT
  1304. PROMPT ======================================================================
  1305. PROMPT
  1306. PROMPT CHECKING TO SEE IF DATABASE VAULT SCHEMAS ARE CREATED...
  1307. SET HEADING OFF
  1308. SET FEEDBACK OFF
  1309. select decode(upper(max(username)), 'DVSYS', 'Database Vault Schema DVSYS exists', 'Database Vault schema DVSYS does not exist')
  1310. from dba_users where UPPER(username)='DVSYS';
  1311. select decode(upper(max(username)), 'DVF', 'Database Vault Schema DVF exists', 'Database Vault schema DVF does not exist')
  1312. from dba_users where UPPER(username)='DVF';
  1313. SET FEEDBACK ON
  1314. PROMPT
  1315. PROMPT Checking if there are Database Vault Realms created...
  1316. PROMPT
  1317. SELECT NAME, ENABLED
  1318. FROM DVSYS.DBA_DV_REALM;
  1319. PROMPT If non default Database Vault Realms are created
  1320. PROMPT then DATABASE VAULT is in use
  1321. PROMPT
  1322. PROMPT NOTE:
  1323. PROMPT If Database Vault is enabled, user running Review Lite
  1324. PROMPT must have authorization on "Oracle Database Vault Realm"
  1325. PROMPT Otherwise the following error is produced: ORA-01031: insufficient privileges
  1326. PROMPT
  1327. PROMPT
  1328. PROMPT *** DATABASE IN-MEMORY
  1329. PROMPT ======================================================================
  1330. PROMPT
  1331. PROMPT CHECKING FOR DATABASE IN-MEMORY FEATURES USAGE
  1332. SET HEADING ON
  1333. SET FEEDBACK ON
  1334. prompt
  1335. prompt * Checking for "In-Memory Column Store" feature usage
  1336. prompt
  1337. prompt Checking for tables configured to use In-Memory Column Store (INMEMORY='ENABLED')
  1338. COL OWNER FORMAT A20 WRAP
  1339. COL TABLE_NAME FORMAT A30 WRAP
  1340. COL PARTITION_NAME FORMAT A20 WRAP
  1341. select 'DBA_TABLES' as source_, a.owner, a.table_name, '' as partition_name, a.inmemory, a.inmemory_priority
  1342. from dba_tables a
  1343. where inmemory in ('ENABLED')
  1344. union all
  1345. select 'DBA_TAB_PARTITIONS' as source_, a.table_owner, a.table_name, partition_name, a.inmemory, a.inmemory_priority
  1346. from dba_tab_partitions a
  1347. where inmemory in ('ENABLED')
  1348. union all
  1349. select 'DBA_TAB_SUBPARTITIONS' as source_, a.table_owner, a.table_name, partition_name, a.inmemory, a.inmemory_priority
  1350. from dba_tab_subpartitions a
  1351. where inmemory in ('ENABLED')
  1352. union all
  1353. select 'DBA_OBJECT_TABLES,' as source_, a.owner, a.table_name, '' as partition_name, a.inmemory, a.inmemory_priority
  1354. from dba_object_tables a
  1355. where inmemory in ('ENABLED')
  1356. order by 1, 2, 3, 4;
  1357. prompt Checking for initialization parameter inmemory_size
  1358. COL DISPLAY_VALUE FORMAT A30 WRAP
  1359. select name, value, display_value, description
  1360. from v$parameter
  1361. where name = 'inmemory_size';
  1362. prompt If tables or partitions with INMEMORY enabled are returned and
  1363. prompt inmemory_size parameter is set to a value different from zero
  1364. prompt then DATABASE IN-MEMORY is in use
  1365. prompt
  1366. prompt * Checking for "In-Memory Aggregation" feature usage
  1367. select
  1368. DBID,
  1369. VERSION,
  1370. NAME,
  1371. CURRENTLY_USED,
  1372. FIRST_USAGE_DATE,
  1373. LAST_USAGE_DATE,
  1374. LAST_SAMPLE_DATE
  1375. from DBA_FEATURE_USAGE_STATISTICS
  1376. where name = 'In-Memory Aggregation'
  1377. order by LAST_SAMPLE_DATE;
  1378. prompt If DBA_FEATURE_USAGE_STATISTICS indicates feature usage, then DATABASE IN-MEMORY is in use
  1379. prompt
  1380. PROMPT
  1381. PROMPT
  1382. PROMPT *** OEM (ORACLE ENTERPRISE MANAGER)
  1383. PROMPT =====================================================================*
  1384. PROMPT
  1385. PROMPT CHECKING FOR OEM VERSIONS PRIOR TO 10.1
  1386. PROMPT -------------------------------------------
  1387. SET HEADING ON
  1388. SET FEEDBACK OFF
  1389. PROMPT
  1390. PROMPT CHECKING TO SEE IF OEM PROGRAMS ARE RUNNING
  1391. PROMPT DURING THE MEASUREMENT PERIOD...
  1392. PROMPT
  1393. SET FEEDBACK ON
  1394. SELECT DISTINCT
  1395. program
  1396. FROM
  1397. v$session
  1398. WHERE
  1399. upper(program) LIKE '%XPNI.EXE%'
  1400. OR upper(program) LIKE '%VMS.EXE%'
  1401. OR upper(program) LIKE '%EPC.EXE%'
  1402. OR upper(program) LIKE '%TDVAPP.EXE%'
  1403. OR upper(program) LIKE 'VDOSSHELL%'
  1404. OR upper(program) LIKE '%VMQ%'
  1405. OR upper(program) LIKE '%VTUSHELL%'
  1406. OR upper(program) LIKE '%JAVAVMQ%'
  1407. OR upper(program) LIKE '%XPAUTUNE%'
  1408. OR upper(program) LIKE '%XPCOIN%'
  1409. OR upper(program) LIKE '%XPKSH%'
  1410. OR upper(program) LIKE '%XPUI%';
  1411. PROMPT
  1412. PROMPT CHECKING FOR OEM REPOSITORIES...
  1413. PROMPT
  1414. DECLARE
  1415. cursor1 integer;
  1416. v_count number(1);
  1417. v_schema dba_tables.owner%TYPE;
  1418. v_version varchar2(10);
  1419. v_component varchar2(20);
  1420. v_i_name varchar2(10);
  1421. v_h_name varchar2(30);
  1422. stmt varchar2(200);
  1423. rows_processed integer;
  1424. CURSOR schema_array IS
  1425. SELECT owner
  1426. FROM dba_tables WHERE table_name = 'SMP_REP_VERSION';
  1427. CURSOR schema_array_v2 IS
  1428. SELECT owner
  1429. FROM dba_tables WHERE table_name = 'SMP_VDS_REPOS_VERSION';
  1430. BEGIN
  1431. DBMS_OUTPUT.PUT_LINE ('.');
  1432. DBMS_OUTPUT.PUT_LINE ('OEM REPOSITORY LOCATIONS');
  1433. select instance_name,host_name into v_i_name, v_h_name from
  1434. v$instance;
  1435. DBMS_OUTPUT.PUT_LINE ('Instance: '||v_i_name||' on host: '||v_h_name);
  1436. OPEN schema_array;
  1437. OPEN schema_array_v2;
  1438. cursor1:=dbms_sql.open_cursor;
  1439. v_count := 0;
  1440. LOOP -- this loop steps through each valid schema.
  1441. FETCH schema_array INTO v_schema;
  1442. EXIT WHEN schema_array%notfound;
  1443. v_count := v_count + 1;
  1444. dbms_sql.parse(cursor1,'select c_current_version, c_component from '||v_schema||'.smp_rep_version', dbms_sql.native);
  1445. dbms_sql.define_column(cursor1, 1, v_version, 10);
  1446. dbms_sql.define_column(cursor1, 2, v_component, 20);
  1447. rows_processed:=dbms_sql.execute ( cursor1 );
  1448. loop -- to step through cursor1 to find console version.
  1449. if dbms_sql.fetch_rows(cursor1) >0 then
  1450. dbms_sql.column_value (cursor1, 1, v_version);
  1451. dbms_sql.column_value (cursor1, 2, v_component);
  1452. if v_component = 'CONSOLE' then
  1453. dbms_output.put_line ('Schema '||rpad(v_schema,15)||' has a repository
  1454. version '||v_version);
  1455. exit;
  1456. end if;
  1457. else
  1458. exit;
  1459. end if;
  1460. end loop;
  1461. END LOOP;
  1462. LOOP -- this loop steps through each valid V2 schema.
  1463. FETCH schema_array_v2 INTO v_schema;
  1464. EXIT WHEN schema_array_v2%notfound;
  1465. v_count := v_count + 1;
  1466. dbms_output.put_line ( 'Schema '||rpad(v_schema,15)||' has a repository
  1467. version 2.x' );
  1468. end loop;
  1469. dbms_sql.close_cursor (cursor1);
  1470. close schema_array;
  1471. close schema_array_v2;
  1472. if v_count = 0 then
  1473. dbms_output.put_line ( 'There are NO OEM repositories with version prior to 10g on this instance.');
  1474. end if;
  1475. END;
  1476. /
  1477. prompt
  1478. prompt If NO ROWS are returned then OEM is not being used.
  1479. prompt If ROWS are returned, then OEM is being utilized.
  1480. prompt
  1481. PROMPT
  1482. PROMPT CHECKING FOR OEM VERSIONS 10.1 OR HIGHER
  1483. PROMPT -------------------------------------------
  1484. col OEM_PACK format A40 wrap
  1485. col PACK_ACCESS_GRANTED format A19
  1486. col PACK_ACCESS_AGREED format A19
  1487. col TABLE_NAME_ format A40 wrap
  1488. col C_ format A24 wrap
  1489. col OEMOWNER format a30 wrap
  1490. col OEM_PACK format a75 wrap
  1491. select 'OEM REPOSITORY SCHEMA:' C_, owner as OEMOWNER from dba_tables where table_name = 'MGMT_ADMIN_LICENSES';
  1492. prompt
  1493. prompt GATHERING MANAGEMENT PACK ACCESS SETTINGS
  1494. prompt === OEM Database Control 10g
  1495. prompt
  1496. select distinct
  1497. a.pack_display_label as OEM_PACK,
  1498. decode(b.pack_name, null, 'NO', 'YES') as PACK_ACCESS_GRANTED,
  1499. PACK_ACCESS_AGREED
  1500. from SYSMAN.MGMT_LICENSE_DEFINITIONS a,
  1501. SYSMAN.MGMT_ADMIN_LICENSES b,
  1502. (select decode(count(*), 0, 'NO', 'YES') as PACK_ACCESS_AGREED
  1503. from SYSMAN.MGMT_LICENSES where upper(I_AGREE)='YES') c
  1504. where a.pack_label = b.pack_name (+)
  1505. order by 1, 2;
  1506. col I_AGREE format a10 wrap
  1507. prompt OEM PACK ACCESS AGREEMENTS
  1508. select USERNAME, TIMESTAMP, I_AGREE
  1509. from SYSMAN.MGMT_LICENSES
  1510. order by TIMESTAMP;
  1511. col TARGET_NAME format a30 wrap
  1512. prompt OEM MANAGED DATABASES
  1513. select TARGET_NAME, HOST_NAME, LOAD_TIMESTAMP
  1514. from SYSMAN.MGMT_TARGETS
  1515. where TARGET_TYPE like '%database%'
  1516. order by TARGET_NAME;
  1517. prompt
  1518. prompt GATHERING MANAGEMENT PACK ACCESS SETTINGS
  1519. prompt === OEM Grid Control 10g; OEM Grid Control 11g; OEM Database Control 11g; OEM Cloud Control 12c
  1520. prompt
  1521. SET LINESIZE 314
  1522. col HOST_NAME format A30 wrap
  1523. col TARGET_NAME format A50 wrap
  1524. col TARGET_TYPE format A30 wrap
  1525. col TARGET_TYPE_D format A30 wrap
  1526. col PARENT_TARGET_NAME format A50 wrap
  1527. col PARENT_TARGET_TYPE format A30 wrap
  1528. col PACK_LABEL format A20 wrap
  1529. col OEM_PACK format A60 wrap
  1530. col PACK_ACCESS_GRANTED format A19 wrap
  1531. col PACK_ACCESS_AGREED format A19 wrap
  1532. col PACK_ACCESS_AGREED_DATE format A23 wrap
  1533. col PACK_ACCESS_AGREED_BY format A21 wrap
  1534. select
  1535. tg.host_name,
  1536. tg.target_type,
  1537. tt.type_display_name as target_type_d,
  1538. tg.target_name,
  1539. ld.pack_label,
  1540. ld.pack_display_label as oem_pack,
  1541. decode(lt.pack_name , null, 'NO', 'YES') as pack_access_granted,
  1542. decode(lc.target_guid, null, 'NO', 'YES') as pack_access_agreed,
  1543. lc.confirmed_time as pack_access_agreed_date,
  1544. lc.confirmed_by as pack_access_agreed_by
  1545. from SYSMAN.MGMT_TARGETS tg
  1546. left outer join SYSMAN.MGMT_TARGET_TYPES tt on tg.target_type = tt.target_type
  1547. inner join SYSMAN.MGMT_LICENSE_DEFINITIONS ld on tg.target_type = ld.target_type
  1548. left outer join SYSMAN.MGMT_LICENSED_TARGETS lt on tg.target_guid = lt.target_guid and ld.pack_label = lt.pack_name
  1549. left outer join SYSMAN.MGMT_LICENSE_CONFIRMATION lc on tg.target_guid = lc.target_guid
  1550. order by tg.host_name, tt.type_display_name, tg.target_name, ld.pack_display_label;
  1551. SET LINESIZE 200
  1552. prompt
  1553. prompt GATHERING MANAGEMENT PACK USAGE STATISTICS
  1554. prompt === OEM 12c Cloud Control
  1555. prompt (* For readability, output is limited to 20 rows)
  1556. col PACK_NAME format A60 wrap
  1557. col FEATURE_NAME format A60 wrap
  1558. SELECT * FROM (
  1559. SELECT
  1560. reg.feature_name as PACK_NAME,
  1561. tgts.display_name as TARGET_NAME,
  1562. tgts.type_display_name as TARGET_TYPE,
  1563. tgts.host_name as HOST_NAME,
  1564. DECODE(stat.isused, 1, 'TRUE', 'FALSE') as CURRENTLY_USED,
  1565. stat.detected_samples as DETECTED_USAGES
  1566. FROM SYSMAN.mgmt_fu_registrations reg,
  1567. SYSMAN.mgmt_fu_statistics stat,
  1568. SYSMAN.mgmt_targets tgts
  1569. WHERE (stat.isused = 1 or stat.detected_samples > 0) -- current or past usage
  1570. AND stat.target_guid = tgts.target_guid
  1571. AND reg.feature_id = stat.feature_id
  1572. AND reg.collection_mode = 2
  1573. --AND tgts.display_name = 'TARGET_NAME'
  1574. ORDER BY decode(tgts.target_type, 'oracle_database', 1, 'rac_database', 1, 2), -- db packs first
  1575. reg.feature_name,
  1576. tgts.type_display_name,
  1577. tgts.display_name,
  1578. tgts.host_name
  1579. ) WHERE rownum <= 20;
  1580. COL VALUE_ format a18
  1581. prompt
  1582. prompt CHECKING CONTROL_MANAGEMENT_PACK_ACCESS and ENABLE_DDL_LOGGING INSTANCE PARAMETERS (11.1 or higher)
  1583. prompt
  1584. select name, value as value_, isdefault
  1585. from V$PARAMETER
  1586. where UPPER(name) like '%CONTROL_MANAGEMENT_PACK_ACCESS%'
  1587. or UPPER(name) like '%ENABLE_DDL_LOGGING%' -- (#43257)
  1588. order by 1;
  1589. PROMPT
  1590. PROMPT *** OEM TUNING PACK
  1591. PROMPT =====================================================================*
  1592. PROMPT
  1593. prompt CHECKING FOR TUNING PACK USAGE ...
  1594. PROMPT ----------------------------------
  1595. SET FEEDBACK OFF
  1596. SET FEEDBACK 5
  1597. prompt
  1598. prompt * Checking for use of SQL Profiles
  1599. select count(*)
  1600. from DBA_SQL_PROFILES
  1601. where lower(STATUS) = 'enabled';
  1602. prompt If the number returned is > 0, then TUNING PACK is in use
  1603. prompt
  1604. prompt * Gathering details about SQL Profiles
  1605. col CREATED format A19 wrap
  1606. col LAST_MODIFIED format A19 wrap
  1607. select NAME, CREATED, LAST_MODIFIED, DESCRIPTION, TYPE, STATUS
  1608. from DBA_SQL_PROFILES
  1609. where lower(STATUS) = 'enabled';
  1610. prompt
  1611. prompt
  1612. prompt * Checking for SQL Access Advisor and SQL Tuning Advisor tasks
  1613. SET LINESIZE 340
  1614. select
  1615. TASK_ID ,
  1616. OWNER ,
  1617. TASK_NAME ,
  1618. DESCRIPTION ,
  1619. ADVISOR_NAME ,
  1620. CREATED ,
  1621. LAST_MODIFIED ,
  1622. PARENT_TASK_ID ,
  1623. EXECUTION_START ,
  1624. EXECUTION_END ,
  1625. STATUS ,
  1626. SOURCE ,
  1627. HOW_CREATED
  1628. from DBA_ADVISOR_TASKS
  1629. where ADVISOR_NAME in ('SQL Tuning Advisor', 'SQL Access Advisor')
  1630. and not (OWNER='SYS' and TASK_NAME='SYS_AUTO_SQL_TUNING_TASK' and DESCRIPTION='Automatic SQL Tuning Task') /* created by default */
  1631. order by CREATED;
  1632. prompt If rows are returned, then TUNING PACK is in use
  1633. SET LINESIZE 200
  1634. prompt
  1635. prompt
  1636. prompt * Checking for SQL Tuning Sets
  1637. select
  1638. ID as SQLSET_ID ,
  1639. NAME as SQLSET_NAME ,
  1640. OWNER as SQLSET_OWNER,
  1641. CREATED ,
  1642. LAST_MODIFIED ,
  1643. STATEMENT_COUNT,
  1644. DESCRIPTION
  1645. from DBA_SQLSET
  1646. order by ID;
  1647. prompt If rows are returned, then TUNING PACK or REAL APPLICATION TESTING license is needed
  1648. prompt
  1649. prompt * Gathering details about SQL Tuning Sets references
  1650. select
  1651. SQLSET_ID ,
  1652. SQLSET_NAME ,
  1653. SQLSET_OWNER,
  1654. ID ,
  1655. OWNER ,
  1656. CREATED ,
  1657. DESCRIPTION
  1658. from DBA_SQLSET_REFERENCES
  1659. order by SQLSET_ID, OWNER, DESCRIPTION, ID;
  1660. PROMPT If rows are returned, then TUNING PACK or REAL APPLICATION TESTING license is needed
  1661. PROMPT
  1662. PROMPT
  1663. PROMPT *** AUDIT VAULT
  1664. PROMPT =====================================================================*
  1665. PROMPT
  1666. PROMPT NOTE: "Audit Vault Server" and "Audit Vault Collection Agent"
  1667. PROMPT . are standalone products
  1668. PROMPT . and not Enterprise Edition Options
  1669. SET HEADING OFF
  1670. SET FEEDBACK OFF
  1671. PROMPT
  1672. PROMPT CHECKING TO SEE IF AUDIT VAULT SCHEMAS ARE INSTALLED...
  1673. select decode(upper(max(username)), 'AVSYS', 'Audit Vault Schema AVSYS exists', 'Audit Vault schema AVSYS does not exist')
  1674. from dba_users where UPPER(username)='AVSYS';
  1675. PROMPT
  1676. PROMPT If AVSYS schema exist,
  1677. PROMPT Then AUDIT VAULT is installed and being used.
  1678. PROMPT
  1679. PROMPT
  1680. PROMPT *** CONTENT DATABASE and RECORDS DATABASE
  1681. PROMPT ======================================================================
  1682. PROMPT
  1683. PROMPT NOTE: Content Database and Records Database
  1684. PROMPT . are currently components of WebCenter Content
  1685. PROMPT . and not Enterprise Edition Options
  1686. PROMPT
  1687. PROMPT CHECKING TO SEE IF SCHEMA FOR BOTH CONTENT and RECORDS DATABASE IS INSTALLED...
  1688. SET HEADING OFF
  1689. SET FEEDBACK OFF
  1690. select decode(upper(max(username)), 'CONTENT', 'CONTENT schema exist', 'CONTENT schema does not exist')
  1691. from dba_users where UPPER(username)='CONTENT';
  1692. SET HEADING ON
  1693. SET FEEDBACK ON
  1694. PROMPT
  1695. PROMPT CHECKING TO SEE IF CONTENT DATABASE IS BEING USED...
  1696. PROMPT
  1697. SELECT (Count(*) - 9004) "ODM_Document Customer Objects"
  1698. FROM odm_document;
  1699. PROMPT If ODM_DOCUMENT table exist and number of objects are more than
  1700. PROMPT or equal to 1 then CONTENT DATABASE is installed and being used.
  1701. PROMPT
  1702. PROMPT
  1703. PROMPT CHECKING TO SEE IF RECORDS DATABASE IS BEING USED...
  1704. PROMPT
  1705. SELECT Count(*) "ODM_RECORD Customer Objects"
  1706. FROM odm_record;
  1707. PROMPT If ODM_RECORD table exist and number of objects are more than
  1708. PROMPT or equal to 1 then RECORDS DATABASE is installed and being used.
  1709. PROMPT
  1710. PROMPT
  1711. PROMPT *** OWB (ORACLE WAREHOUSE BUILDER)
  1712. PROMPT =====================================================================*
  1713. PROMPT CHECKING IF THERE ARE OWB REPOSITORIES ON THE DATABASE INSTANCE
  1714. PROMPT
  1715. DECLARE
  1716. CURSOR schema_array IS
  1717. SELECT owner
  1718. FROM dba_tables WHERE table_name = 'CMPSYSCLASSES';
  1719. c_installed_ver integer;
  1720. rows_processed integer;
  1721. v_schema dba_tables.owner%TYPE;
  1722. v_schema_cnt integer;
  1723. v_version varchar2(15);
  1724. BEGIN
  1725. OPEN schema_array;
  1726. c_installed_ver := dbms_sql.open_cursor;
  1727. <<owb_schema_loop>>
  1728. LOOP -- For each valid schema...
  1729. FETCH schema_array INTO v_schema;
  1730. EXIT WHEN schema_array%notfound;
  1731. --Determine if current schema is valid (contains CMPInstallation_V view)
  1732. dbms_sql.parse(c_installed_ver,'select installedversion from '|| v_schema || '.CMPInstallation_v where name = ''Oracle Warehouse Builder''',dbms_sql.native);
  1733. dbms_sql.define_column(c_installed_ver, 1, v_version, 15);
  1734. rows_processed:=dbms_sql.execute ( c_installed_ver );
  1735. loop -- Find OWB version.
  1736. if dbms_sql.fetch_rows(c_installed_ver) > 0 then
  1737. dbms_sql.column_value (c_installed_ver, 1, v_version);
  1738. v_schema_cnt := v_schema_cnt + 1;
  1739. dbms_output.put_line ('.');
  1740. dbms_output.put_line ('Schema '||v_schema||' contains a version '||v_version||' repository');
  1741. else
  1742. exit;
  1743. end if;
  1744. end loop;
  1745. end loop;
  1746. END;
  1747. /
  1748. PROMPT
  1749. PROMPT If no repository is found, OWB is not in use.
  1750. PROMPT
  1751. PROMPT
  1752. PROMPT END OF READABLE SECTION
  1753. PROMPT
  1754. PROMPT
  1755. PROMPT *****************************************************
  1756. PROMPT *****************************************************
  1757. PROMPT *****************************************************
  1758. PROMPT ***** *****
  1759. PROMPT ***** The section below is used *****
  1760. PROMPT ***** for automatic processing. *****
  1761. PROMPT ***** *****
  1762. PROMPT *****************************************************
  1763. PROMPT *****************************************************
  1764. PROMPT *****************************************************
  1765. PROMPT
  1766. PROMPT
  1767. PROMPT
  1768. PROMPT
  1769. -------------------------------------------
  1770. -------------------------------------------
  1771. -- Second stage, output for GREP command --
  1772. -------------------------------------------
  1773. -------------------------------------------
  1774. SET HEADING OFF
  1775. SET FEEDBACK OFF
  1776. SET LINESIZE 500
  1777. prompt &&GREP_PREFIX.,REVIEW_LITE,VERSION,,,&SCRIPT_RELEASE.,
  1778. -- V$VERSION - DB Version
  1779. -------------------------
  1780. define OPTION_NAME=V$VERSION
  1781. define OPTION_QUERY=NULL
  1782. define OCOUNT=-942
  1783. col OCOUNT new_val OCOUNT noprint
  1784. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  1785. FROM V$VERSION;
  1786. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  1787. BANNER ||'",'
  1788. FROM V$VERSION;
  1789. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  1790. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  1791. from dual where &&OCOUNT. in (-942, 0);
  1792. -- V$OPTION - DB Options Installed
  1793. ----------------------------------
  1794. define OPTION_NAME=V$OPTION
  1795. define OPTION_QUERY=NULL
  1796. define OCOUNT=-942
  1797. col OCOUNT new_val OCOUNT noprint
  1798. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  1799. FROM V$OPTION;
  1800. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  1801. PARAMETER ||'","'||
  1802. VALUE ||'",'
  1803. FROM V$OPTION;
  1804. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  1805. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  1806. from dual where &&OCOUNT. in (-942, 0);
  1807. -- 10g DBA_FEATURE_USAGE_STATISTICS (10g and higher)
  1808. ----------------------------------------------------
  1809. define OPTION_NAME=DBA_FEATURE_USAGE_STATISTICS
  1810. define OPTION_QUERY=10g
  1811. define OPTION_QUERY_COLS=NAME,VERSION,DETECTED_USAGES,TOTAL_SAMPLES,CURRENTLY_USED,FIRST_USAGE_DATE,LAST_USAGE_DATE,LAST_SAMPLE_DATE,SAMPLE_INTERVAL,DBID,AUX_COUNT
  1812. define OCOUNT=-942
  1813. col OCOUNT new_val OCOUNT noprint
  1814. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  1815. FROM DBA_FEATURE_USAGE_STATISTICS;
  1816. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  1817. from dual where &&OCOUNT. > 0;
  1818. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  1819. NAME || '","'||
  1820. VERSION || '","'||
  1821. DETECTED_USAGES || '","'||
  1822. TOTAL_SAMPLES || '","'||
  1823. CURRENTLY_USED || '","'||
  1824. FIRST_USAGE_DATE || '","'||
  1825. LAST_USAGE_DATE || '","'||
  1826. LAST_SAMPLE_DATE || '","'||
  1827. SAMPLE_INTERVAL || '",' ||
  1828. DBID || ',' ||
  1829. AUX_COUNT || ','
  1830. FROM DBA_FEATURE_USAGE_STATISTICS;
  1831. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  1832. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  1833. from dual where &&OCOUNT. in (-942, 0);
  1834. -- Collect DBA_FEATURE_USAGE_STATISTICS.FEATURE_INFO CLOB column
  1835. ----------------------------------------------------------------
  1836. define OPTION_NAME=DBA_FEATURE_USAGE_STATISTICS
  1837. define OPTION_QUERY=FEATURE_INFO
  1838. define OPTION_QUERY_COLS=FEATURE_INFO,NAME,VERSION
  1839. define OCOUNT=-942
  1840. col OCOUNT new_val OCOUNT noprint
  1841. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  1842. from DBA_FEATURE_USAGE_STATISTICS
  1843. where FEATURE_INFO is not null
  1844. ;
  1845. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  1846. from dual where &&OCOUNT. > 0;
  1847. SET LINESIZE 1500
  1848. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  1849. replace(replace(replace(to_char(substr(FEATURE_INFO, 1, 1000)), chr(10), '[LF]'), chr(13), '[CR]'),'"','''') || '","' ||
  1850. NAME || '","' ||
  1851. VERSION || '",' ||
  1852. DBID || ','
  1853. from DBA_FEATURE_USAGE_STATISTICS
  1854. where FEATURE_INFO is not null
  1855. order by 1;
  1856. SET LINESIZE 500
  1857. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  1858. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  1859. from dual where &&OCOUNT. in (-942, 0);
  1860. -- DBA_REGISTRY (9i_r2 and higher)
  1861. ----------------------------------
  1862. define OPTION_NAME=DBA_REGISTRY
  1863. define OPTION_QUERY=>=9i_r2
  1864. define OPTION_QUERY_COLS=COMP_NAME,VERSION,STATUS,MODIFIED,SCHEMA
  1865. define OCOUNT=-942
  1866. col OCOUNT new_val OCOUNT noprint
  1867. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  1868. from DBA_REGISTRY;
  1869. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  1870. from dual where &&OCOUNT. > 0;
  1871. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  1872. '"' || COMP_NAME || '",' || VERSION || ',' || STATUS || ',' || MODIFIED || ',' || SCHEMA || ','
  1873. from DBA_REGISTRY;
  1874. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  1875. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  1876. from dual where &&OCOUNT. in (-942, 0);
  1877. -- GV$PARAMETER
  1878. --------------------------------------------
  1879. define OPTION_NAME=GV$PARAMETER
  1880. define OPTION_QUERY=NULL
  1881. define OCOUNT=-942
  1882. col OCOUNT new_val OCOUNT noprint
  1883. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  1884. from GV$PARAMETER
  1885. where upper(NAME) like '%CPU_COUNT%'
  1886. or upper(NAME) like '%FAL_CLIENT%'
  1887. or upper(NAME) like '%FAL_SERVER%'
  1888. or upper(NAME) like '%CLUSTER%'
  1889. or upper(NAME) like '%CONTROL_MANAGEMENT_PACK_ACCESS%'
  1890. or upper(NAME) like '%ENABLE_DDL_LOGGING%'
  1891. or upper(NAME) like '%COMPATIBLE%'
  1892. or upper(NAME) like '%LOG_ARCHIVE_DEST%'
  1893. or upper(NAME) like '%O7_DICTIONARY_ACCESSIBILITY%' -- for troubleshooting access privileges issues
  1894. or upper(NAME) like '%ENABLE_PLUGGABLE_DATABASE%'
  1895. or upper(NAME) like '%INMEMORY%'
  1896. or upper(NAME) like '%DB_UNIQUE_NAME%'
  1897. or upper(NAME) like '%LOG_ARCHIVE_CONFIG%'
  1898. or upper(NAME) like '%HEAT_MAP%'
  1899. or upper(NAME) like '%SPATIAL_VECTOR_ACCELERATION%'
  1900. or upper(NAME) like '%ENCRYPT_NEW_TABLESPACES%'
  1901. ;
  1902. SET LINESIZE 5000
  1903. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  1904. INST_ID ||'","'||
  1905. NAME ||'","'||
  1906. replace(VALUE,'"','''') ||'","'||
  1907. ISDEFAULT ||'","'||
  1908. DESCRIPTION ||'",'
  1909. from GV$PARAMETER
  1910. where upper(NAME) like '%CPU_COUNT%'
  1911. or upper(NAME) like '%FAL_CLIENT%'
  1912. or upper(NAME) like '%FAL_SERVER%'
  1913. or upper(NAME) like '%CLUSTER%'
  1914. or upper(NAME) like '%CONTROL_MANAGEMENT_PACK_ACCESS%'
  1915. or upper(NAME) like '%ENABLE_DDL_LOGGING%'
  1916. or upper(NAME) like '%COMPATIBLE%'
  1917. or upper(NAME) like '%LOG_ARCHIVE_DEST%'
  1918. or upper(NAME) like '%O7_DICTIONARY_ACCESSIBILITY%' -- for troubleshooting access privileges issues
  1919. or upper(NAME) like '%ENABLE_PLUGGABLE_DATABASE%'
  1920. or upper(NAME) like '%INMEMORY%'
  1921. or upper(NAME) like '%DB_UNIQUE_NAME%'
  1922. or upper(NAME) like '%LOG_ARCHIVE_CONFIG%'
  1923. or upper(NAME) like '%HEAT_MAP%'
  1924. or upper(NAME) like '%SPATIAL_VECTOR_ACCELERATION%'
  1925. or upper(NAME) like '%ENCRYPT_NEW_TABLESPACES%'
  1926. order by NAME, INST_ID;
  1927. SET LINESIZE 500
  1928. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  1929. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  1930. from dual where &&OCOUNT. in (-942, 0);
  1931. -- Standby Configuration
  1932. ----------------------------------
  1933. define OPTION_NAME=STANDBY_CONFIG
  1934. define OPTION_QUERY=V$DATAGUARD_CONFIG
  1935. define OPTION_QUERY_COLS=DB_UNIQUE_NAME
  1936. define OCOUNT=-942
  1937. col OCOUNT new_val OCOUNT noprint
  1938. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  1939. from V$DATAGUARD_CONFIG;
  1940. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  1941. from dual where &&OCOUNT. > 0;
  1942. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  1943. '"' || DB_UNIQUE_NAME || '",'
  1944. from V$DATAGUARD_CONFIG;
  1945. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  1946. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  1947. from dual where &&OCOUNT. in (-942, 0);
  1948. define OPTION_NAME=STANDBY_CONFIG
  1949. define OPTION_QUERY=V$ARCHIVE_DEST_STATUS
  1950. define OPTION_QUERY_COLS=DEST_ID,DEST_NAME,STATUS,TYPE,DATABASE_MODE,RECOVERY_MODE,PROTECTION_MODE,DESTINATION,DB_UNIQUE_NAME
  1951. define OCOUNT=-942
  1952. col OCOUNT new_val OCOUNT noprint
  1953. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  1954. from V$ARCHIVE_DEST_STATUS
  1955. where TYPE!='LOCAL'
  1956. ;
  1957. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  1958. from dual where &&OCOUNT. > 0;
  1959. SET LINESIZE 5000
  1960. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  1961. DEST_ID ||','||
  1962. DEST_NAME ||','||
  1963. STATUS ||','||
  1964. TYPE ||','||
  1965. DATABASE_MODE ||','||
  1966. RECOVERY_MODE ||','||
  1967. PROTECTION_MODE||',"'||
  1968. DESTINATION ||'",'||
  1969. DB_UNIQUE_NAME ||','
  1970. from V$ARCHIVE_DEST_STATUS
  1971. where TYPE!='LOCAL'
  1972. order by DEST_ID;
  1973. SET LINESIZE 500
  1974. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  1975. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  1976. from dual where &&OCOUNT. in (-942, 0);
  1977. -- *** PARTITIONING
  1978. -- ====================================================================
  1979. define OPTION_NAME=PARTITIONING
  1980. define OPTION_QUERY=PARTITIONED_SEGMENTS
  1981. define OPTION_QUERY_COLS=OWNER,SEGMENT_TYPE,SEGMENT_NAME,MIN_CREATED,MIN_LAST_DLL_TIME
  1982. define OCOUNT=-942
  1983. col OCOUNT new_val OCOUNT noprint
  1984. select ltrim(rtrim(to_char(count(distinct OWNER||','||OBJECT_TYPE||','||OBJECT_NAME)))) as OCOUNT
  1985. FROM DBA_OBJECTS
  1986. WHERE OBJECT_TYPE LIKE '%PARTITION%';
  1987. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  1988. from (
  1989. select distinct
  1990. OWNER||','||OBJECT_TYPE||','||OBJECT_NAME||','||min(CREATED)||','||min(LAST_DDL_TIME)||','
  1991. from DBA_OBJECTS
  1992. where OBJECT_TYPE LIKE '%PARTITION%'
  1993. group by OWNER, OBJECT_TYPE, OBJECT_NAME
  1994. );
  1995. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  1996. from dual where &&OCOUNT. > 0;
  1997. select distinct
  1998. '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  1999. OWNER||','||OBJECT_TYPE||','||OBJECT_NAME||','||min(CREATED)||','||min(LAST_DDL_TIME)||','
  2000. from DBA_OBJECTS
  2001. where OBJECT_TYPE LIKE '%PARTITION%'
  2002. group by OWNER, OBJECT_TYPE, OBJECT_NAME
  2003. ;
  2004. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2005. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2006. from dual where &&OCOUNT. in (-942, 0);
  2007. -- List of partitioned segments to be ignored because they are automatically created with Analytical Workspaces
  2008. define OPTION_NAME=PARTITIONING
  2009. define OPTION_QUERY=OLAP_AWS_SEGMENTS
  2010. define OPTION_QUERY_COLS=AW_OWNER,AW_NAME,AW_VERSION,SEGMENT_TYPE,OWNER,SEGMENT_NAME,TABLE_NAME
  2011. define OCOUNT=-942
  2012. col OCOUNT new_val OCOUNT noprint
  2013. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2014. from (
  2015. select distinct
  2016. c.owner as aw_owner,
  2017. c.aw_name,
  2018. 'not_collected' as aw_version,
  2019. d.object_type,
  2020. d.owner,
  2021. d.object_name,
  2022. d.object_name as table_name
  2023. from dba_aws c
  2024. join dba_objects d on c.owner = d.owner and 'AW$'||c.aw_name = d.object_name
  2025. where d.object_type like '%PARTITION%'
  2026. union all
  2027. select distinct
  2028. e.owner as aw_owner,
  2029. e.aw_name,
  2030. 'not_collected' as aw_version,
  2031. g.object_type,
  2032. g.owner,
  2033. g.object_name,
  2034. f.table_name
  2035. from dba_aws e
  2036. join dba_lobs f on e.owner = f.owner and 'AW$'||e.aw_name = f.table_name
  2037. join dba_objects g on f.owner = g.owner and f.segment_name = g.object_name
  2038. where g.object_type like '%PARTITION%'
  2039. union all
  2040. select distinct
  2041. e.owner as aw_owner,
  2042. e.aw_name,
  2043. 'not_collected' as aw_version,
  2044. g.object_type,
  2045. g.owner,
  2046. g.object_name,
  2047. f.table_name
  2048. from dba_aws e
  2049. join dba_indexes f on e.owner = f.table_owner and 'AW$'||e.aw_name = f.table_name
  2050. join dba_objects g on f.owner = g.owner and f.index_name = g.object_name
  2051. where g.object_type like '%PARTITION%'
  2052. order by owner, aw_name, object_type, object_name
  2053. );
  2054. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2055. from dual where &&OCOUNT. > 0;
  2056. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2057. aw_owner ||','||
  2058. aw_name ||','||
  2059. aw_version ||','|| -- available only starting with version 11.1
  2060. object_type ||','||
  2061. owner ||','||
  2062. object_name ||','||
  2063. table_name ||','
  2064. from (
  2065. select distinct
  2066. c.owner as aw_owner,
  2067. c.aw_name,
  2068. 'not_collected' as aw_version,
  2069. d.object_type,
  2070. d.owner,
  2071. d.object_name,
  2072. d.object_name as table_name
  2073. from dba_aws c
  2074. join dba_objects d on c.owner = d.owner and 'AW$'||c.aw_name = d.object_name
  2075. where d.object_type like '%PARTITION%'
  2076. union all
  2077. select distinct
  2078. e.owner as aw_owner,
  2079. e.aw_name,
  2080. 'not_collected' as aw_version,
  2081. g.object_type,
  2082. g.owner,
  2083. g.object_name,
  2084. f.table_name
  2085. from dba_aws e
  2086. join dba_lobs f on e.owner = f.owner and 'AW$'||e.aw_name = f.table_name
  2087. join dba_objects g on f.owner = g.owner and f.segment_name = g.object_name
  2088. where g.object_type like '%PARTITION%'
  2089. union all
  2090. select distinct
  2091. e.owner as aw_owner,
  2092. e.aw_name,
  2093. 'not_collected' as aw_version,
  2094. g.object_type,
  2095. g.owner,
  2096. g.object_name,
  2097. f.table_name
  2098. from dba_aws e
  2099. join dba_indexes f on e.owner = f.table_owner and 'AW$'||e.aw_name = f.table_name
  2100. join dba_objects g on f.owner = g.owner and f.index_name = g.object_name
  2101. where g.object_type like '%PARTITION%'
  2102. order by owner, aw_name, object_type, object_name
  2103. );
  2104. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2105. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2106. from dual where &&OCOUNT. in (-942, 0);
  2107. --Partitioned objects on RECYCLEBIN
  2108. define OPTION_NAME=PARTITIONING
  2109. define OPTION_QUERY=PARTITION_OBJ_RECYCLEBIN
  2110. define OPTION_QUERY_COLS=OWNER,ORIGINAL_NAME,OBJECT_NAME,TYPE,CREATETIME,DROPTIME,PARTITION_NAME,SPACE,CAN_UNDROP
  2111. define OCOUNT=-942
  2112. col OCOUNT new_val OCOUNT noprint
  2113. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2114. from (
  2115. select OWNER, ORIGINAL_NAME, OBJECT_NAME, TYPE, CREATETIME, DROPTIME, PARTITION_NAME, SPACE, CAN_UNDROP
  2116. from DBA_RECYCLEBIN
  2117. where TYPE not like '%Partition%'
  2118. and (OWNER, OBJECT_NAME) in (select OWNER, OBJECT_NAME from DBA_RECYCLEBIN where TYPE like '%Partition%')
  2119. union all
  2120. select OWNER, ORIGINAL_NAME, OBJECT_NAME, TYPE, CREATETIME, DROPTIME, PARTITION_NAME, SPACE, CAN_UNDROP
  2121. from DBA_RECYCLEBIN
  2122. where TYPE like '%Partition%'
  2123. );
  2124. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2125. from dual where &&OCOUNT. > 0;
  2126. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2127. OWNER ||','||
  2128. ORIGINAL_NAME ||','||
  2129. OBJECT_NAME ||','||
  2130. TYPE ||','||
  2131. CREATETIME ||','||
  2132. DROPTIME ||','||
  2133. PARTITION_NAME ||','||
  2134. SPACE ||','||
  2135. CAN_UNDROP ||','
  2136. from (
  2137. select OWNER, ORIGINAL_NAME, OBJECT_NAME, TYPE, CREATETIME, DROPTIME, PARTITION_NAME, SPACE, CAN_UNDROP
  2138. from DBA_RECYCLEBIN
  2139. where TYPE not like '%Partition%'
  2140. and (OWNER, OBJECT_NAME) in (select OWNER, OBJECT_NAME from DBA_RECYCLEBIN where TYPE like '%Partition%')
  2141. union all
  2142. select OWNER, ORIGINAL_NAME, OBJECT_NAME, TYPE, CREATETIME, DROPTIME, PARTITION_NAME, SPACE, CAN_UNDROP
  2143. from DBA_RECYCLEBIN
  2144. where TYPE like '%Partition%'
  2145. );
  2146. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2147. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2148. from dual where &&OCOUNT. in (-942, 0);
  2149. --Partitioned objects generated by flashback archives
  2150. define OPTION_NAME=PARTITIONING
  2151. define OPTION_QUERY=DBA_FLASHBACK_ARCHIVE_TABLES+INDEXES+LOBS
  2152. define OPTION_QUERY_COLS=ARCHIVE_TABLE_OWNER,TABLE_NAME,ARCHIVE_TABLE_NAME,OBJECT_TYPE,OWNER,OBJECT_NAME
  2153. define OCOUNT=-942
  2154. col OCOUNT new_val OCOUNT noprint
  2155. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2156. from (
  2157. select distinct
  2158. c.owner_name as archive_table_owner,
  2159. c.table_name,
  2160. c.archive_table_name,
  2161. d.object_type,
  2162. d.owner,
  2163. d.object_name
  2164. from dba_flashback_archive_tables c
  2165. join dba_objects d on c.owner_name = d.owner and c.archive_table_name = d.object_name
  2166. union all
  2167. select distinct
  2168. e.owner_name as archive_table_owner,
  2169. e.table_name,
  2170. e.archive_table_name,
  2171. g.object_type,
  2172. g.owner,
  2173. g.object_name
  2174. from dba_flashback_archive_tables e
  2175. join dba_lobs f on e.owner_name = f.owner and e.archive_table_name = f.table_name
  2176. join dba_objects g on f.owner = g.owner and f.segment_name = g.object_name
  2177. union all
  2178. select distinct
  2179. e.owner_name as archive_table_owner,
  2180. e.table_name,
  2181. e.archive_table_name,
  2182. g.object_type,
  2183. g.owner,
  2184. g.object_name
  2185. from dba_flashback_archive_tables e
  2186. join dba_indexes f on e.owner_name = f.table_owner and e.archive_table_name = f.table_name
  2187. join dba_objects g on f.owner = g.owner and f.index_name = g.object_name
  2188. );
  2189. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2190. from dual where &&OCOUNT. > 0;
  2191. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2192. archive_table_owner ||','||
  2193. table_name ||','||
  2194. archive_table_name ||','||
  2195. object_type ||','||
  2196. owner ||','||
  2197. object_name ||','
  2198. from (
  2199. select distinct
  2200. c.owner_name as archive_table_owner,
  2201. c.table_name,
  2202. c.archive_table_name,
  2203. d.object_type,
  2204. d.owner,
  2205. d.object_name
  2206. from dba_flashback_archive_tables c
  2207. join dba_objects d on c.owner_name = d.owner and c.archive_table_name = d.object_name
  2208. union all
  2209. select distinct
  2210. e.owner_name as archive_table_owner,
  2211. e.table_name,
  2212. e.archive_table_name,
  2213. g.object_type,
  2214. g.owner,
  2215. g.object_name
  2216. from dba_flashback_archive_tables e
  2217. join dba_lobs f on e.owner_name = f.owner and e.archive_table_name = f.table_name
  2218. join dba_objects g on f.owner = g.owner and f.segment_name = g.object_name
  2219. union all
  2220. select distinct
  2221. e.owner_name as archive_table_owner,
  2222. e.table_name,
  2223. e.archive_table_name,
  2224. g.object_type,
  2225. g.owner,
  2226. g.object_name
  2227. from dba_flashback_archive_tables e
  2228. join dba_indexes f on e.owner_name = f.table_owner and e.archive_table_name = f.table_name
  2229. join dba_objects g on f.owner = g.owner and f.index_name = g.object_name
  2230. ) order by 1;
  2231. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2232. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2233. from dual where &&OCOUNT. in (-942, 0);
  2234. --Partitioned objects generated by change data capture
  2235. define OPTION_NAME=PARTITIONING
  2236. define OPTION_QUERY=ALL_CHANGE_TABLES
  2237. define OPTION_QUERY_COLS=CHANGE_SET_NAME,SOURCE_SCHEMA_NAME,SOURCE_TABLE_NAME,CHANGE_TABLE_SCHEMA,CHANGE_TABLE_NAME,CREATED
  2238. define OCOUNT=-942
  2239. col OCOUNT new_val OCOUNT noprint
  2240. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2241. from (
  2242. select
  2243. CHANGE_SET_NAME ||'","'||
  2244. SOURCE_SCHEMA_NAME ||'","'||
  2245. SOURCE_TABLE_NAME ||'","'||
  2246. CHANGE_TABLE_SCHEMA ||'","'||
  2247. CHANGE_TABLE_NAME ||'",'||
  2248. CREATED ||','
  2249. from SYS.CDC_CHANGE_TABLES$
  2250. );
  2251. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2252. from dual where &&OCOUNT. > 0;
  2253. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  2254. CHANGE_SET_NAME ||'","'||
  2255. SOURCE_SCHEMA_NAME ||'","'||
  2256. SOURCE_TABLE_NAME ||'","'||
  2257. CHANGE_TABLE_SCHEMA ||'","'||
  2258. CHANGE_TABLE_NAME ||'",'||
  2259. CREATED ||','
  2260. from SYS.CDC_CHANGE_TABLES$
  2261. order by 1;
  2262. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2263. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2264. from dual where &&OCOUNT. in (-942, 0);
  2265. define OPTION_NAME=PARTITIONING
  2266. define OPTION_QUERY=ALL_CHANGE_TABLES+INDEXES+LOBS
  2267. define OPTION_QUERY_COLS=CHANGE_TABLE_SCHEMA,CHANGE_TABLE_NAME,OBJECT_TYPE,OWNER,OBJECT_NAME
  2268. define OCOUNT=-942
  2269. col OCOUNT new_val OCOUNT noprint
  2270. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2271. from (
  2272. select distinct
  2273. c.CHANGE_TABLE_SCHEMA,
  2274. c.CHANGE_TABLE_NAME,
  2275. d.OBJECT_TYPE,
  2276. d.OWNER,
  2277. d.OBJECT_NAME
  2278. from SYS.CDC_CHANGE_TABLES$ c
  2279. join DBA_OBJECTS d on c.CHANGE_TABLE_SCHEMA = d.OWNER and c.CHANGE_TABLE_NAME = d.OBJECT_NAME
  2280. union all
  2281. select distinct
  2282. e.CHANGE_TABLE_SCHEMA,
  2283. e.CHANGE_TABLE_NAME,
  2284. g.OBJECT_TYPE,
  2285. g.OWNER,
  2286. g.OBJECT_NAME
  2287. from SYS.CDC_CHANGE_TABLES$ e
  2288. join DBA_LOBS f on e.CHANGE_TABLE_SCHEMA = f.OWNER and e.CHANGE_TABLE_NAME = f.TABLE_NAME
  2289. join DBA_OBJECTS g on f.OWNER = g.OWNER and f.segment_name = g.OBJECT_NAME
  2290. union all
  2291. select distinct
  2292. e.CHANGE_TABLE_SCHEMA,
  2293. e.CHANGE_TABLE_NAME,
  2294. g.OBJECT_TYPE,
  2295. g.OWNER,
  2296. g.OBJECT_NAME
  2297. from SYS.CDC_CHANGE_TABLES$ e
  2298. join DBA_INDEXES f on e.CHANGE_TABLE_SCHEMA = f.TABLE_OWNER and e.CHANGE_TABLE_NAME = f.TABLE_NAME
  2299. join DBA_OBJECTS g on f.OWNER = g.OWNER and f.INDEX_NAME = g.OBJECT_NAME
  2300. );
  2301. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2302. from dual where &&OCOUNT. > 0;
  2303. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  2304. CHANGE_TABLE_SCHEMA ||'","'||
  2305. CHANGE_TABLE_NAME ||'","'||
  2306. OBJECT_TYPE ||'","'||
  2307. OWNER ||'","'||
  2308. OBJECT_NAME ||'",'
  2309. from (
  2310. select distinct
  2311. c.CHANGE_TABLE_SCHEMA,
  2312. c.CHANGE_TABLE_NAME,
  2313. d.OBJECT_TYPE,
  2314. d.OWNER,
  2315. d.OBJECT_NAME
  2316. from SYS.CDC_CHANGE_TABLES$ c
  2317. join DBA_OBJECTS d on c.CHANGE_TABLE_SCHEMA = d.OWNER and c.CHANGE_TABLE_NAME = d.OBJECT_NAME
  2318. union all
  2319. select distinct
  2320. e.CHANGE_TABLE_SCHEMA,
  2321. e.CHANGE_TABLE_NAME,
  2322. g.OBJECT_TYPE,
  2323. g.OWNER,
  2324. g.OBJECT_NAME
  2325. from SYS.CDC_CHANGE_TABLES$ e
  2326. join DBA_LOBS f on e.CHANGE_TABLE_SCHEMA = f.OWNER and e.CHANGE_TABLE_NAME = f.TABLE_NAME
  2327. join DBA_OBJECTS g on f.OWNER = g.OWNER and f.segment_name = g.OBJECT_NAME
  2328. union all
  2329. select distinct
  2330. e.CHANGE_TABLE_SCHEMA,
  2331. e.CHANGE_TABLE_NAME,
  2332. g.OBJECT_TYPE,
  2333. g.OWNER,
  2334. g.OBJECT_NAME
  2335. from SYS.CDC_CHANGE_TABLES$ e
  2336. join DBA_INDEXES f on e.CHANGE_TABLE_SCHEMA = f.TABLE_OWNER and e.CHANGE_TABLE_NAME = f.TABLE_NAME
  2337. join DBA_OBJECTS g on f.OWNER = g.OWNER and f.INDEX_NAME = g.OBJECT_NAME
  2338. ) order by 1;
  2339. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2340. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2341. from dual where &&OCOUNT. in (-942, 0);
  2342. define OPTION_NAME=PARTITIONING
  2343. define OPTION_QUERY=ALL_CHANGE_SETS_QUEUE_TABLES+INDEXES+LOBS
  2344. define OPTION_QUERY_COLS=CHANGE_SET_NAME,PUBLISHER,QUEUE_TABLE_NAME,OBJECT_TYPE,OWNER,OBJECT_NAME
  2345. define OCOUNT=-942
  2346. col OCOUNT new_val OCOUNT noprint
  2347. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2348. from (
  2349. select distinct
  2350. c.SET_NAME as CHANGE_SET_NAME,
  2351. c.PUBLISHER,
  2352. c.QUEUE_TABLE_NAME,
  2353. d.OBJECT_TYPE,
  2354. d.OWNER,
  2355. d.OBJECT_NAME
  2356. from SYS.CDC_CHANGE_SETS$ c
  2357. join DBA_OBJECTS d on c.PUBLISHER = d.OWNER and c.QUEUE_TABLE_NAME = d.OBJECT_NAME
  2358. union all
  2359. select distinct
  2360. e.SET_NAME as CHANGE_SET_NAME,
  2361. e.PUBLISHER,
  2362. e.QUEUE_TABLE_NAME,
  2363. g.OBJECT_TYPE,
  2364. g.OWNER,
  2365. g.OBJECT_NAME
  2366. from SYS.CDC_CHANGE_SETS$ e
  2367. join DBA_LOBS f on e.PUBLISHER = f.OWNER and e.QUEUE_TABLE_NAME = f.TABLE_NAME
  2368. join DBA_OBJECTS g on f.OWNER = g.OWNER and f.segment_name = g.OBJECT_NAME
  2369. union all
  2370. select distinct
  2371. e.SET_NAME as CHANGE_SET_NAME,
  2372. e.PUBLISHER,
  2373. e.QUEUE_TABLE_NAME,
  2374. g.OBJECT_TYPE,
  2375. g.OWNER,
  2376. g.OBJECT_NAME
  2377. from SYS.CDC_CHANGE_SETS$ e
  2378. join DBA_INDEXES f on e.PUBLISHER = f.TABLE_OWNER and e.QUEUE_TABLE_NAME = f.TABLE_NAME
  2379. join DBA_OBJECTS g on f.OWNER = g.OWNER and f.INDEX_NAME = g.OBJECT_NAME
  2380. );
  2381. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2382. from dual where &&OCOUNT. > 0;
  2383. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  2384. CHANGE_SET_NAME ||'","'||
  2385. PUBLISHER ||'","'||
  2386. QUEUE_TABLE_NAME ||'","'||
  2387. OBJECT_TYPE ||'","'||
  2388. OWNER ||'","'||
  2389. OBJECT_NAME ||'",'
  2390. from (
  2391. select distinct
  2392. c.SET_NAME as CHANGE_SET_NAME,
  2393. c.PUBLISHER,
  2394. c.QUEUE_TABLE_NAME,
  2395. d.OBJECT_TYPE,
  2396. d.OWNER,
  2397. d.OBJECT_NAME
  2398. from SYS.CDC_CHANGE_SETS$ c
  2399. join DBA_OBJECTS d on c.PUBLISHER = d.OWNER and c.QUEUE_TABLE_NAME = d.OBJECT_NAME
  2400. union all
  2401. select distinct
  2402. e.SET_NAME as CHANGE_SET_NAME,
  2403. e.PUBLISHER,
  2404. e.QUEUE_TABLE_NAME,
  2405. g.OBJECT_TYPE,
  2406. g.OWNER,
  2407. g.OBJECT_NAME
  2408. from SYS.CDC_CHANGE_SETS$ e
  2409. join DBA_LOBS f on e.PUBLISHER = f.OWNER and e.QUEUE_TABLE_NAME = f.TABLE_NAME
  2410. join DBA_OBJECTS g on f.OWNER = g.OWNER and f.segment_name = g.OBJECT_NAME
  2411. union all
  2412. select distinct
  2413. e.SET_NAME as CHANGE_SET_NAME,
  2414. e.PUBLISHER,
  2415. e.QUEUE_TABLE_NAME,
  2416. g.OBJECT_TYPE,
  2417. g.OWNER,
  2418. g.OBJECT_NAME
  2419. from SYS.CDC_CHANGE_SETS$ e
  2420. join DBA_INDEXES f on e.PUBLISHER = f.TABLE_OWNER and e.QUEUE_TABLE_NAME = f.TABLE_NAME
  2421. join DBA_OBJECTS g on f.OWNER = g.OWNER and f.INDEX_NAME = g.OBJECT_NAME
  2422. ) order by 1;
  2423. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2424. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2425. from dual where &&OCOUNT. in (-942, 0);
  2426. define OPTION_NAME=PARTITIONING
  2427. define OPTION_QUERY=SCHEMA_VERSION_REGISTRY
  2428. define OPTION_QUERY_COLS=COMP_ID,COMP_NAME,MRC_NAME,MR_NAME,MR_TYPE,OWNER,VERSION,STATUS,UPGRADED,START_TIME,MODIFIED
  2429. define OCOUNT=-942
  2430. col OCOUNT new_val OCOUNT noprint
  2431. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2432. from SCHEMA_VERSION_REGISTRY;
  2433. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2434. from dual where &&OCOUNT. > 0;
  2435. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  2436. COMP_ID ||'","'||
  2437. COMP_NAME ||'","'||
  2438. MRC_NAME ||'","'||
  2439. MR_NAME ||'","'||
  2440. MR_TYPE ||'","'||
  2441. OWNER ||'","'||
  2442. VERSION ||'","'||
  2443. STATUS ||'","'||
  2444. UPGRADED ||'",'||
  2445. START_TIME || ','||
  2446. MODIFIED || ','
  2447. from SCHEMA_VERSION_REGISTRY;
  2448. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2449. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2450. from dual where &&OCOUNT. in (-942, 0);
  2451. -- Collect new 12.1 DBA_USERS column
  2452. define OPTION_NAME=PARTITIONING
  2453. define OPTION_QUERY=DBA_USERS.ORACLE_MAINTAINED
  2454. define OPTION_QUERY_COLS=USERNAME,ORACLE_MAINTAINED
  2455. define OCOUNT=-942
  2456. col OCOUNT new_val OCOUNT noprint
  2457. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2458. from DBA_USERS
  2459. where UPPER(ORACLE_MAINTAINED) like 'Y%';
  2460. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2461. from dual where &&OCOUNT. > 0;
  2462. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  2463. USERNAME ||'","'||
  2464. ORACLE_MAINTAINED ||'",'
  2465. from DBA_USERS
  2466. where UPPER(ORACLE_MAINTAINED) like 'Y%';
  2467. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2468. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2469. from dual where &&OCOUNT. in (-942, 0);
  2470. -- Collect new 12.2 DBA_USERS column
  2471. define OPTION_NAME=PARTITIONING
  2472. define OPTION_QUERY=DBA_USERS.IMPLICIT
  2473. define OPTION_QUERY_COLS=USERNAME,IMPLICIT
  2474. define OCOUNT=-942
  2475. col OCOUNT new_val OCOUNT noprint
  2476. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2477. from DBA_USERS
  2478. where UPPER(IMPLICIT) like 'Y%';
  2479. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2480. from dual where &&OCOUNT. > 0;
  2481. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  2482. USERNAME ||'","'||
  2483. IMPLICIT ||'",'
  2484. from DBA_USERS
  2485. where UPPER(IMPLICIT) like 'Y%';
  2486. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2487. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2488. from dual where &&OCOUNT. in (-942, 0);
  2489. -- *** RAC (REAL APPLICATION CLUSTERS)
  2490. -- ====================================================================
  2491. define OPTION_NAME=RAC
  2492. define OPTION_QUERY=GV$INSTANCE
  2493. define OPTION_QUERY_COLS=INSTANCE_NAME,HOST_NAME,INST_ID,STATUS
  2494. define OCOUNT=-942
  2495. col OCOUNT new_val OCOUNT noprint
  2496. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2497. FROM GV$INSTANCE;
  2498. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2499. from dual where &&OCOUNT. > 0;
  2500. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2501. INSTANCE_NAME ||','||
  2502. HOST_NAME ||','||
  2503. INST_ID ||','||
  2504. STATUS ||','
  2505. FROM GV$INSTANCE;
  2506. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2507. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2508. from dual where &&OCOUNT. in (-942, 0);
  2509. -- *** MULTITENANT (introduced in 12c_r1)
  2510. -- ====================================================================
  2511. define OPTION_NAME=MULTITENANT
  2512. define OPTION_QUERY=V$CONTAINERS
  2513. define OPTION_QUERY_COLS=CDB,CON_ID,NAME,OPEN_MODE,OPEN_TIME,CONTAINER
  2514. define OCOUNT=-942
  2515. col OCOUNT new_val OCOUNT noprint
  2516. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2517. from V$CONTAINERS a, V$DATABASE b
  2518. order by a.CON_ID;
  2519. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2520. from dual where &&OCOUNT. > 0;
  2521. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2522. b.CDB ||','||
  2523. a.CON_ID ||',"'||
  2524. a.NAME ||'",'||
  2525. a.OPEN_MODE ||','||
  2526. a.OPEN_TIME ||','||
  2527. decode(a.CON_ID, 0, 'entire CDB or non-CDB', 1, 'ROOT', 2, 'SEED', 'PDB') ||','
  2528. from V$CONTAINERS a, V$DATABASE b
  2529. order by a.CON_ID;
  2530. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2531. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2532. from dual where &&OCOUNT. in (-942, 0);
  2533. -- *** ACTIVE DATA GUARD (introduced in 11.1)
  2534. -- ====================================================================
  2535. -- Checking for "Physical Standby with Real-time Query" feature usage
  2536. define OPTION_NAME=ACTIVE_DATA_GUARD
  2537. define OPTION_QUERY=11gr1
  2538. define OPTION_QUERY_COLS=COUNT,DBID,NAME,DB_UNIQUE_NAME,OPEN_MODE,DATABASE_ROLE,REMOTE_ARCHIVE,DATAGUARD_BROKER,GUARD_STATUS,PLATFORM_NAME
  2539. define OCOUNT=-942
  2540. col OCOUNT new_val OCOUNT noprint
  2541. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2542. from (
  2543. select
  2544. a.DEST_ID ||','||
  2545. a.DEST_NAME ||','||
  2546. a.STATUS ||','||
  2547. a.TYPE ||','||
  2548. a.DATABASE_MODE ||','||
  2549. a.RECOVERY_MODE ||',"'||
  2550. a.DESTINATION ||'",'||
  2551. a.DB_UNIQUE_NAME ||','||
  2552. b.VALUE ||','
  2553. from V$ARCHIVE_DEST_STATUS a, V$PARAMETER b
  2554. where b.NAME = 'compatible' and b.value like '1%' and b.value not like '10%'
  2555. and a.RECOVERY_MODE like 'MANAGED%' and a.STATUS = 'VALID' and a.DATABASE_MODE = 'OPEN_READ-ONLY'
  2556. );
  2557. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2558. from dual where &&OCOUNT. > 0;
  2559. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,&&OCOUNT.,'||
  2560. a.DEST_ID ||','||
  2561. a.DEST_NAME ||','||
  2562. a.STATUS ||','||
  2563. a.TYPE ||','||
  2564. a.DATABASE_MODE ||','||
  2565. a.RECOVERY_MODE ||',"'||
  2566. a.DESTINATION ||'",'||
  2567. a.DB_UNIQUE_NAME ||','||
  2568. b.VALUE ||','
  2569. from V$ARCHIVE_DEST_STATUS a, V$PARAMETER b
  2570. where b.NAME = 'compatible' and b.value like '1%' and b.value not like '10%'
  2571. and a.RECOVERY_MODE like 'MANAGED%' and a.STATUS = 'VALID' and a.DATABASE_MODE = 'OPEN_READ-ONLY'
  2572. order by a.DEST_ID;
  2573. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2574. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2575. from dual where &&OCOUNT. in (-942, 0);
  2576. define OPTION_NAME=ACTIVE_DATA_GUARD
  2577. define OPTION_QUERY=V$DATABASE
  2578. define OPTION_QUERY_COLS=DBID,NAME,DB_UNIQUE_NAME,OPEN_MODE,DATABASE_ROLE,REMOTE_ARCHIVE,DATAGUARD_BROKER,GUARD_STATUS,PLATFORM_NAME
  2579. define OCOUNT=-942
  2580. col OCOUNT new_val OCOUNT noprint
  2581. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2582. from V$DATABASE;
  2583. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2584. from dual where &&OCOUNT. > 0;
  2585. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2586. DBID || ',' ||
  2587. NAME || ',' ||
  2588. DB_UNIQUE_NAME || ',' ||
  2589. OPEN_MODE || ',"'||
  2590. DATABASE_ROLE ||'","'||
  2591. REMOTE_ARCHIVE ||'","'||
  2592. DATAGUARD_BROKER ||'","'||
  2593. GUARD_STATUS ||'","'||
  2594. PLATFORM_NAME ||'",' ||
  2595. CREATED || ',' ||
  2596. CONTROLFILE_CREATED || ','
  2597. from V$DATABASE;
  2598. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2599. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2600. from dual where &&OCOUNT. in (-942, 0);
  2601. -- * Checking for "Fast Incremental Backup on Physical Standby" feature usage
  2602. define OPTION_NAME=ACTIVE_DATA_GUARD
  2603. define OPTION_QUERY=V$BLOCK_CHANGE_TRACKING
  2604. define OPTION_QUERY_COLS=DATABASE_ROLE,STATUS,FILENAME,BYTES
  2605. define OCOUNT=-942
  2606. col OCOUNT new_val OCOUNT noprint
  2607. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2608. from V$BLOCK_CHANGE_TRACKING a, V$DATABASE b
  2609. where b.DATABASE_ROLE like 'PHYSICAL STANDBY'
  2610. and a.STATUS = 'ENABLED'
  2611. ;
  2612. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2613. from dual where &&OCOUNT. > 0;
  2614. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2615. b.DATABASE_ROLE ||','||
  2616. a.STATUS ||',"'||
  2617. a.FILENAME ||'",'||
  2618. a.BYTES ||','
  2619. from V$BLOCK_CHANGE_TRACKING a, V$DATABASE b
  2620. where b.DATABASE_ROLE like 'PHYSICAL STANDBY'
  2621. and a.STATUS = 'ENABLED'
  2622. ;
  2623. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2624. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2625. from dual where &&OCOUNT. in (-942, 0);
  2626. -- *** OLAP
  2627. -- ====================================================================
  2628. -- CUBES IN OLAPSYS.DBA$OLAP_CUBES
  2629. define OPTION_NAME=OLAP
  2630. define OPTION_QUERY=OLAPSYS.DBA$OLAP_CUBES
  2631. define OPTION_QUERY_COLS=OWNER,CUBE_NAME,DISPLAY_NAME
  2632. define OCOUNT=-942
  2633. col OCOUNT new_val OCOUNT noprint
  2634. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2635. FROM OLAPSYS.DBA$OLAP_CUBES;
  2636. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2637. from dual where &&OCOUNT. > 0;
  2638. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  2639. OWNER || '","' ||
  2640. CUBE_NAME || '","' ||
  2641. DISPLAY_NAME || '",'
  2642. FROM OLAPSYS.DBA$OLAP_CUBES;
  2643. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2644. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2645. from dual where &&OCOUNT. in (-942, 0);
  2646. -- CUBES IN DBA_CUBES (introduced in 11.1)
  2647. define OPTION_NAME=OLAP
  2648. define OPTION_QUERY=DBA_CUBES
  2649. define OPTION_QUERY_COLS=OWNER,CUBE_NAME,AW_NAME
  2650. define OCOUNT=-942
  2651. col OCOUNT new_val OCOUNT noprint
  2652. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2653. FROM DBA_CUBES;
  2654. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2655. from dual where &&OCOUNT. > 0;
  2656. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  2657. OWNER || '","' ||
  2658. CUBE_NAME || '","' ||
  2659. AW_NAME || '",'
  2660. FROM DBA_CUBES;
  2661. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2662. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2663. from dual where &&OCOUNT. in (-942, 0);
  2664. -- ANALYTIC WORKSPACES
  2665. define OPTION_NAME=OLAP
  2666. define OPTION_QUERY=ANALYTIC_WORKSPACES
  2667. define OPTION_QUERY_COLS=OWNER,AW_NUMBER,AW_NAME,PAGESPACES,GENERATIONS
  2668. define OCOUNT=-942
  2669. col OCOUNT new_val OCOUNT noprint
  2670. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2671. FROM DBA_AWS;
  2672. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2673. from dual where &&OCOUNT. > 0;
  2674. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2675. OWNER ||','||
  2676. AW_NUMBER ||','||
  2677. AW_NAME ||','||
  2678. PAGESPACES ||','||
  2679. GENERATIONS ||','
  2680. FROM DBA_AWS;
  2681. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2682. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2683. from dual where &&OCOUNT. in (-942, 0);
  2684. -- *** DATA MINING (ADVANCED ANALYTICS FEATURE)
  2685. -- ====================================================================
  2686. -- 9i
  2687. define OPTION_NAME=DATA_MINING
  2688. define OPTION_QUERY=09i.ODM_MINING_MODEL
  2689. define OCOUNT=-942
  2690. col OCOUNT new_val OCOUNT noprint
  2691. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2692. from ODM.ODM_MINING_MODEL;
  2693. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2694. count(*) || ','
  2695. from ODM.ODM_MINING_MODEL;
  2696. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2697. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2698. from dual where &&OCOUNT. in (-942);
  2699. -- 10gv1
  2700. define OPTION_NAME=DATA_MINING
  2701. define OPTION_QUERY=10gv1.DM$OBJECT
  2702. define OCOUNT=-942
  2703. col OCOUNT new_val OCOUNT noprint
  2704. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2705. from DMSYS.DM$OBJECT;
  2706. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2707. count(*) || ','
  2708. from DMSYS.DM$OBJECT;
  2709. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2710. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2711. from dual where &&OCOUNT. in (-942);
  2712. define OPTION_NAME=DATA_MINING
  2713. define OPTION_QUERY=10gv1.DM$MODEL
  2714. define OCOUNT=-942
  2715. col OCOUNT new_val OCOUNT noprint
  2716. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2717. from DMSYS.DM$MODEL;
  2718. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2719. count(*) || ','
  2720. from DMSYS.DM$MODEL;
  2721. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2722. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2723. from dual where &&OCOUNT. in (-942);
  2724. -- 10gv2
  2725. define OPTION_NAME=DATA_MINING
  2726. define OPTION_QUERY=10gv2.DM$P_MODEL
  2727. define OCOUNT=-942
  2728. col OCOUNT new_val OCOUNT noprint
  2729. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2730. from DMSYS.DM$P_MODEL;
  2731. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2732. count(*) || ','
  2733. from DMSYS.DM$P_MODEL;
  2734. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2735. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2736. from dual where &&OCOUNT. in (-942);
  2737. -- 11g
  2738. define OPTION_NAME=DATA_MINING
  2739. define OPTION_QUERY=11g.DM$P_MODEL
  2740. define OCOUNT=-942
  2741. col OCOUNT new_val OCOUNT noprint
  2742. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2743. from SYS.MODEL$;
  2744. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2745. count(*) || ','
  2746. from SYS.MODEL$;
  2747. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2748. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2749. from dual where &&OCOUNT. in (-942);
  2750. -- 11g and higher
  2751. define OPTION_NAME=DATA_MINING
  2752. define OPTION_QUERY=11g+.DBA_MINING_MODELS
  2753. define OPTION_QUERY_COLS=OWNER,MODEL_NAME,MINING_FUNCTION,ALGORITHM,CREATION_DATE,BUILD_DURATION,MODEL_SIZE
  2754. define OCOUNT=-942
  2755. col OCOUNT new_val OCOUNT noprint
  2756. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2757. from SYS.DBA_MINING_MODELS;
  2758. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2759. from dual where &&OCOUNT. > 0;
  2760. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2761. OWNER ||','||
  2762. MODEL_NAME ||','||
  2763. MINING_FUNCTION ||',"'||
  2764. ALGORITHM ||'",'||
  2765. CREATION_DATE ||','||
  2766. BUILD_DURATION ||','||
  2767. MODEL_SIZE ||','
  2768. from SYS.DBA_MINING_MODELS
  2769. order by OWNER, MODEL_NAME
  2770. ;
  2771. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2772. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2773. from dual where &&OCOUNT. in (-942, 0);
  2774. -- *** SPATIAL
  2775. -- ====================================================================
  2776. define OPTION_NAME=SPATIAL
  2777. define OPTION_QUERY=ALL_SDO_GEOM_METADATA
  2778. define OPTION_QUERY_COLS=SDO_OWNER,SDO_TABLE_NAME,SDO_COLUMN_NAME
  2779. define OCOUNT=-942
  2780. col OCOUNT new_val OCOUNT noprint
  2781. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2782. from MDSYS.SDO_GEOM_METADATA_TABLE;
  2783. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2784. from dual where &&OCOUNT. > 0;
  2785. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2786. SDO_OWNER || ',' || SDO_TABLE_NAME || ',' || substr(SDO_COLUMN_NAME, 1, 250) || ','
  2787. from MDSYS.SDO_GEOM_METADATA_TABLE;
  2788. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2789. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2790. from dual where &&OCOUNT. in (-942, 0);
  2791. define OPTION_NAME=SPATIAL
  2792. define OPTION_QUERY=SDO_FEATURE_USAGE
  2793. define OPTION_QUERY_COLS=FEATURE_NAME,USED
  2794. define OCOUNT=-942
  2795. col OCOUNT new_val OCOUNT noprint
  2796. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2797. from MDSYS.SDO_FEATURE_USAGE;
  2798. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2799. from dual where &&OCOUNT. > 0;
  2800. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  2801. FEATURE_NAME || '","' ||
  2802. USED || '",'
  2803. from MDSYS.SDO_FEATURE_USAGE
  2804. order by FEATURE_NAME;
  2805. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2806. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2807. from dual where &&OCOUNT. in (-942, 0);
  2808. -- *** LABEL SECURITY
  2809. -- ====================================================================
  2810. define OPTION_NAME=LABEL_SECURITY
  2811. define OPTION_QUERY=LBAC$POLT_COUNT
  2812. define OCOUNT=-942
  2813. col OCOUNT new_val OCOUNT noprint
  2814. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2815. FROM LBACSYS.LBAC$POLT
  2816. WHERE OWNER <> 'SA_DEMO';
  2817. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2818. count(*) ||','
  2819. FROM LBACSYS.LBAC$POLT
  2820. WHERE OWNER <> 'SA_DEMO';
  2821. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2822. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2823. from dual where &&OCOUNT. in (-942);
  2824. -- *** ADVANCED SECURITY
  2825. -- ====================================================================
  2826. -- Check for Column Encryption
  2827. define OPTION_NAME=ADVANCED_SECURITY
  2828. DEFINE OPTION_QUERY=COLUMN_ENCRYPTION
  2829. COL OCOUNT new_val OCOUNT noprint
  2830. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2831. from DBA_ENCRYPTED_COLUMNS
  2832. where OWNER || '#' || TABLE_NAME|| '#' || COLUMN_NAME not in
  2833. (select OWNER || '#' || TABLE_NAME|| '#' || COLUMN_NAME from DBA_LOBS) -- eliminate SecureFiles
  2834. ;
  2835. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2836. OWNER || ',' || TABLE_NAME || ',' ||COLUMN_NAME || ','
  2837. from DBA_ENCRYPTED_COLUMNS
  2838. where OWNER || '#' || TABLE_NAME|| '#' || COLUMN_NAME not in
  2839. (select OWNER || '#' || TABLE_NAME|| '#' || COLUMN_NAME from DBA_LOBS) -- eliminate SecureFiles
  2840. order by 1;
  2841. SELECT '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2842. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2843. from dual where &&OCOUNT. in (-942, 0);
  2844. -- Check for Tablespace Encryption
  2845. define OPTION_NAME=ADVANCED_SECURITY
  2846. DEFINE OPTION_QUERY=TABLESPACE_ENCRYPTION
  2847. COL OCOUNT new_val OCOUNT noprint
  2848. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2849. FROM DBA_TABLESPACES
  2850. WHERE ENCRYPTED ='YES';
  2851. SELECT '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2852. TABLESPACE_NAME || ',' || ENCRYPTED ||','
  2853. FROM DBA_TABLESPACES
  2854. WHERE ENCRYPTED ='YES';
  2855. SELECT '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2856. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2857. from dual where &&OCOUNT. in (-942, 0);
  2858. -- Check for SecureFiles Encryption
  2859. define OPTION_NAME=ADVANCED_SECURITY
  2860. define OPTION_QUERY=SECUREFILES_ENCRYPTION
  2861. define OPTION_QUERY_COLS=DATA_DICTIONARY_VIEW,TABLE_OWNER,TABLE_NAME,COLUMN_NAME,ENCRYPT,SECUREFILE
  2862. define OCOUNT=-942
  2863. col OCOUNT new_val OCOUNT noprint
  2864. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2865. from (
  2866. select 'DBA_LOBS,' || owner ||','|| table_name ||','|| column_name ||',"'|| encrypt ||'","'|| securefile ||'",' as csv_cols
  2867. from dba_lobs
  2868. where encrypt not in ('NO', 'NONE')
  2869. union all
  2870. select 'DBA_LOB_PARTITIONS,' || table_owner ||','|| table_name ||','|| column_name ||',"'|| encrypt ||'","'|| securefile ||'",' as csv_cols
  2871. from dba_lob_partitions
  2872. where encrypt not in ('NO', 'NONE')
  2873. union all
  2874. select 'DBA_LOB_SUBPARTITIONS,' || table_owner ||','|| table_name ||','|| column_name ||',"'|| encrypt ||'","'|| securefile ||'",' as csv_cols
  2875. from dba_lob_subpartitions
  2876. where encrypt not in ('NO', 'NONE')
  2877. );
  2878. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2879. from dual where &&OCOUNT. > 0;
  2880. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2881. csv_cols
  2882. from (
  2883. select 'DBA_LOBS,' || owner ||','|| table_name ||','|| column_name ||',"'|| encrypt ||'","'|| securefile ||'",' as csv_cols
  2884. from dba_lobs
  2885. where encrypt not in ('NO', 'NONE')
  2886. union all
  2887. select 'DBA_LOB_PARTITIONS,' || table_owner ||','|| table_name ||','|| column_name ||',"'|| encrypt ||'","'|| securefile ||'",' as csv_cols
  2888. from dba_lob_partitions
  2889. where encrypt not in ('NO', 'NONE')
  2890. union all
  2891. select 'DBA_LOB_SUBPARTITIONS,' || table_owner ||','|| table_name ||','|| column_name ||',"'|| encrypt ||'","'|| securefile ||'",' as csv_cols
  2892. from dba_lob_subpartitions
  2893. where encrypt not in ('NO', 'NONE')
  2894. ) order by 1;
  2895. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2896. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2897. from dual where &&OCOUNT. in (-942, 0);
  2898. -- Check for Data Redaction
  2899. define OPTION_NAME=ADVANCED_SECURITY
  2900. define OPTION_QUERY=REDACTION_POLICIES
  2901. define OPTION_QUERY_COLS=OBJECT_OWNER,OBJECT_NAME,POLICY_NAME,ENABLE,POLICY_DESCRIPTION
  2902. define OCOUNT=-942
  2903. col OCOUNT new_val OCOUNT noprint
  2904. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2905. from REDACTION_POLICIES;
  2906. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2907. from dual where &&OCOUNT. > 0;
  2908. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  2909. OBJECT_OWNER ||'","'||
  2910. OBJECT_NAME ||'","'||
  2911. POLICY_NAME ||'","'||
  2912. ENABLE ||'","'||
  2913. POLICY_DESCRIPTION ||'",'
  2914. from REDACTION_POLICIES
  2915. order by OBJECT_OWNER, OBJECT_NAME, POLICY_NAME;
  2916. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2917. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2918. from dual where &&OCOUNT. in (-942, 0);
  2919. -- *** ADVANCED COMPRESSION (introduced in 11.1)
  2920. -- ====================================================================
  2921. define OPTION_NAME=ADVANCED_COMPRESSION
  2922. define OPTION_QUERY=TABLE_COMPRESSION
  2923. define OPTION_QUERY_COLS=DATA_DICTIONARY_VIEW,TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR
  2924. define OCOUNT=-942
  2925. col OCOUNT new_val OCOUNT noprint
  2926. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2927. from (
  2928. select 'DBA_TABLES,' || owner ||','|| table_name ||',' ||',"'|| compression ||'","'|| compress_for ||'",' as csv_cols
  2929. from dba_tables
  2930. where compress_for in ('FOR ALL OPERATIONS', 'OLTP', 'ADVANCED')
  2931. union all
  2932. select 'DBA_TAB_PARTITIONS,' || table_owner ||','|| table_name ||','|| partition_name ||',"'|| compression ||'","'|| compress_for ||'",' as csv_cols
  2933. from dba_tab_partitions
  2934. where compress_for in ('FOR ALL OPERATIONS', 'OLTP', 'ADVANCED')
  2935. union all
  2936. select 'DBA_TAB_SUBPARTITIONS,' || table_owner ||','|| table_name ||','|| partition_name ||',"'|| compression ||'","'|| compress_for ||'",' as csv_cols
  2937. from dba_tab_subpartitions
  2938. where compress_for in ('FOR ALL OPERATIONS', 'OLTP', 'ADVANCED')
  2939. );
  2940. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2941. from dual where &&OCOUNT. > 0;
  2942. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2943. csv_cols
  2944. from (
  2945. select 'DBA_TABLES,' || owner ||','|| table_name ||',' ||',"'|| compression ||'","'|| compress_for ||'",' as csv_cols
  2946. from dba_tables
  2947. where compress_for in ('FOR ALL OPERATIONS', 'OLTP', 'ADVANCED')
  2948. union all
  2949. select 'DBA_TAB_PARTITIONS,' || table_owner ||','|| table_name ||','|| partition_name ||',"'|| compression ||'","'|| compress_for ||'",' as csv_cols
  2950. from dba_tab_partitions
  2951. where compress_for in ('FOR ALL OPERATIONS', 'OLTP', 'ADVANCED')
  2952. union all
  2953. select 'DBA_TAB_SUBPARTITIONS,' || table_owner ||','|| table_name ||','|| partition_name ||',"'|| compression ||'","'|| compress_for ||'",' as csv_cols
  2954. from dba_tab_subpartitions
  2955. where compress_for in ('FOR ALL OPERATIONS', 'OLTP', 'ADVANCED')
  2956. ) order by 1;
  2957. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  2958. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  2959. from dual where &&OCOUNT. in (-942, 0);
  2960. define OPTION_NAME=ADVANCED_COMPRESSION
  2961. define OPTION_QUERY=SECUREFILES_COMPRESSION_AND_DEDUPLICATION
  2962. define OPTION_QUERY_COLS=DATA_DICTIONARY_VIEW,TABLE_OWNER,TABLE_NAME,COLUMN_NAME,COMPRESSION,DEDUPLICATION
  2963. define OCOUNT=-942
  2964. col OCOUNT new_val OCOUNT noprint
  2965. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  2966. from (
  2967. select 'DBA_LOBS,' || owner ||','|| table_name ||','|| column_name ||',"'|| compression ||'","'|| deduplication ||'",' as csv_cols
  2968. from dba_lobs
  2969. where compression not in ('NO', 'NONE')
  2970. or deduplication not in ('NO', 'NONE')
  2971. union all
  2972. select 'DBA_LOB_PARTITIONS,' || table_owner ||','|| table_name ||','|| column_name ||',"'|| compression ||'","'|| deduplication ||'",' as csv_cols
  2973. from dba_lob_partitions
  2974. where compression not in ('NO', 'NONE')
  2975. or deduplication not in ('NO', 'NONE')
  2976. union all
  2977. select 'DBA_LOB_SUBPARTITIONS,' || table_owner ||','|| table_name ||','|| column_name ||',"'|| compression ||'","'|| deduplication ||'",' as csv_cols
  2978. from dba_lob_subpartitions
  2979. where compression not in ('NO', 'NONE')
  2980. or deduplication not in ('NO', 'NONE')
  2981. );
  2982. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  2983. from dual where &&OCOUNT. > 0;
  2984. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  2985. csv_cols
  2986. from (
  2987. select 'DBA_LOBS,' || owner ||','|| table_name ||','|| column_name ||',"'|| compression ||'","'|| deduplication ||'",' as csv_cols
  2988. from dba_lobs
  2989. where compression not in ('NO', 'NONE')
  2990. or deduplication not in ('NO', 'NONE')
  2991. union all
  2992. select 'DBA_LOB_PARTITIONS,' || table_owner ||','|| table_name ||','|| column_name ||',"'|| compression ||'","'|| deduplication ||'",' as csv_cols
  2993. from dba_lob_partitions
  2994. where compression not in ('NO', 'NONE')
  2995. or deduplication not in ('NO', 'NONE')
  2996. union all
  2997. select 'DBA_LOB_SUBPARTITIONS,' || table_owner ||','|| table_name ||','|| column_name ||',"'|| compression ||'","'|| deduplication ||'",' as csv_cols
  2998. from dba_lob_subpartitions
  2999. where compression not in ('NO', 'NONE')
  3000. or deduplication not in ('NO', 'NONE')
  3001. ) order by 1;
  3002. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3003. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3004. from dual where &&OCOUNT. in (-942, 0);
  3005. define OPTION_NAME=ADVANCED_COMPRESSION
  3006. define OPTION_QUERY=DBA_FLASHBACK_ARCHIVE
  3007. define OPTION_QUERY_COLS=FLASHBACK_ARCHIVE_NAME,TABLESPACE_NAME,QUOTA_IN_MB,RETENTION_IN_DAYS,CREATE_TIME,LAST_PURGE_TIME,STATUS
  3008. define OCOUNT=-942
  3009. col OCOUNT new_val OCOUNT noprint
  3010. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3011. from (
  3012. select
  3013. a.FLASHBACK_ARCHIVE_NAME,
  3014. b.TABLESPACE_NAME,
  3015. b.QUOTA_IN_MB,
  3016. a.RETENTION_IN_DAYS,
  3017. a.CREATE_TIME,
  3018. a.LAST_PURGE_TIME,
  3019. a.STATUS -- DEFAULT or not (NULL)
  3020. from DBA_FLASHBACK_ARCHIVE a
  3021. left join DBA_FLASHBACK_ARCHIVE_TS b on a.FLASHBACK_ARCHIVE# = b.FLASHBACK_ARCHIVE#
  3022. );
  3023. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3024. from dual where &&OCOUNT. > 0;
  3025. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3026. a.FLASHBACK_ARCHIVE_NAME ||'","'||
  3027. b.TABLESPACE_NAME ||'","'||
  3028. b.QUOTA_IN_MB ||'",' ||
  3029. a.RETENTION_IN_DAYS ||',' ||
  3030. a.CREATE_TIME ||',' ||
  3031. a.LAST_PURGE_TIME ||',"' ||
  3032. a.STATUS ||'",'
  3033. from DBA_FLASHBACK_ARCHIVE a
  3034. left join DBA_FLASHBACK_ARCHIVE_TS b on a.FLASHBACK_ARCHIVE# = b.FLASHBACK_ARCHIVE#
  3035. order by 1;
  3036. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3037. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3038. from dual where &&OCOUNT. in (-942, 0);
  3039. define OPTION_NAME=ADVANCED_COMPRESSION
  3040. define OPTION_QUERY=DBA_FLASHBACK_ARCHIVE_TABLES
  3041. define OPTION_QUERY_COLS=FLASHBACK_ARCHIVE_NAME,OWNER_NAME,TABLE_NAME,ARCHIVE_TABLE_NAME
  3042. define OCOUNT=-942
  3043. col OCOUNT new_val OCOUNT noprint
  3044. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3045. from (
  3046. select
  3047. FLASHBACK_ARCHIVE_NAME,
  3048. OWNER_NAME,
  3049. TABLE_NAME,
  3050. ARCHIVE_TABLE_NAME
  3051. from DBA_FLASHBACK_ARCHIVE_TABLES
  3052. );
  3053. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3054. from dual where &&OCOUNT. > 0;
  3055. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3056. FLASHBACK_ARCHIVE_NAME ||'","'||
  3057. OWNER_NAME ||'","'||
  3058. TABLE_NAME ||'","'||
  3059. ARCHIVE_TABLE_NAME ||'",'
  3060. from DBA_FLASHBACK_ARCHIVE_TABLES
  3061. order by 1;
  3062. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3063. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3064. from dual where &&OCOUNT. in (-942, 0);
  3065. -- Check for Advanced Index Compression
  3066. define OPTION_NAME=ADVANCED_COMPRESSION
  3067. define OPTION_QUERY=DBA_INDEXES.COMPRESSION
  3068. define OPTION_QUERY_COLS=OWNER,INDEX_NAME,TABLE_OWNER,TABLE_NAME,COMPRESSION
  3069. define OCOUNT=-942
  3070. col OCOUNT new_val OCOUNT noprint
  3071. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3072. from DBA_INDEXES
  3073. where COMPRESSION like '%ADVANCED%';
  3074. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3075. from dual where &&OCOUNT. > 0;
  3076. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3077. OWNER ||'","'||
  3078. INDEX_NAME ||'","'||
  3079. TABLE_OWNER ||'","'||
  3080. TABLE_NAME ||'","'||
  3081. COMPRESSION ||'",'
  3082. from DBA_INDEXES
  3083. where COMPRESSION like '%ADVANCED%'
  3084. order by OWNER, INDEX_NAME;
  3085. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3086. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3087. from dual where &&OCOUNT. in (-942, 0);
  3088. -- *** DATABASE VAULT
  3089. -- ====================================================================
  3090. select '&&GREP_PREFIX.,DATABASE_VAULT,DVSYS_SCHEMA,'||count(*)||',count,'||MAX(username)||','
  3091. from dba_users where UPPER(username)='DVSYS';
  3092. select '&&GREP_PREFIX.,DATABASE_VAULT,DVF_SCHEMA,'||count(*)||',count,'||MAX(username)||','
  3093. from dba_users where UPPER(username)='DVF';
  3094. define OPTION_NAME=DATABASE_VAULT
  3095. define OPTION_QUERY=DVSYS.DBA_DV_REALM
  3096. define OPTION_QUERY_COLS=NAME,DESCRIPTION,ENABLED
  3097. define OCOUNT=-942
  3098. col OCOUNT new_val OCOUNT noprint
  3099. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3100. from DVSYS.DBA_DV_REALM;
  3101. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3102. from dual where &&OCOUNT. > 0;
  3103. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3104. NAME ||'","'||
  3105. DESCRIPTION ||'",'||
  3106. ENABLED ||','
  3107. from DVSYS.DBA_DV_REALM
  3108. order by NAME;
  3109. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3110. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3111. from dual where &&OCOUNT. in (-942, 0);
  3112. -- *** DATABASE IN-MEMORY (introduced in 12.1.0.2.0)
  3113. -- ====================================================================
  3114. define OPTION_NAME=DB_IN_MEMORY
  3115. define OPTION_QUERY=INMEMORY_ENABLED_TABLES
  3116. define OPTION_QUERY_COLS=DATA_DICTIONARY_VIEW,TABLE_OWNER,TABLE_NAME,PARTITION_NAME,INMEMORY,INMEMORY_PRIORITY
  3117. define OCOUNT=-942
  3118. col OCOUNT new_val OCOUNT noprint
  3119. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3120. from (
  3121. select 'DBA_TABLES,' || owner ||','|| table_name ||',' ||',"'|| inmemory ||'","'|| inmemory_priority ||'",' as csv_cols
  3122. from dba_tables
  3123. where inmemory in ('ENABLED')
  3124. union all
  3125. select 'DBA_TAB_PARTITIONS,' || table_owner ||','|| table_name ||','|| partition_name ||',"'|| inmemory ||'","'|| inmemory_priority ||'",' as csv_cols
  3126. from dba_tab_partitions
  3127. where inmemory in ('ENABLED')
  3128. union all
  3129. select 'DBA_TAB_SUBPARTITIONS,' || table_owner ||','|| table_name ||','|| partition_name ||',"'|| inmemory ||'","'|| inmemory_priority ||'",' as csv_cols
  3130. from dba_tab_subpartitions
  3131. where inmemory in ('ENABLED')
  3132. union all
  3133. select 'DBA_OBJECT_TABLES,' || owner ||','|| table_name ||','|| object_id_type ||',"'|| inmemory ||'","'|| inmemory_priority ||'",' as csv_cols
  3134. from dba_object_tables
  3135. where inmemory in ('ENABLED')
  3136. );
  3137. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3138. from dual where &&OCOUNT. > 0;
  3139. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3140. csv_cols
  3141. from (
  3142. select 'DBA_TABLES,' || owner ||','|| table_name ||',' ||',"'|| inmemory ||'","'|| inmemory_priority ||'",' as csv_cols
  3143. from dba_tables
  3144. where inmemory in ('ENABLED')
  3145. union all
  3146. select 'DBA_TAB_PARTITIONS,' || table_owner ||','|| table_name ||','|| partition_name ||',"'|| inmemory ||'","'|| inmemory_priority ||'",' as csv_cols
  3147. from dba_tab_partitions
  3148. where inmemory in ('ENABLED')
  3149. union all
  3150. select 'DBA_TAB_SUBPARTITIONS,' || table_owner ||','|| table_name ||','|| partition_name ||',"'|| inmemory ||'","'|| inmemory_priority ||'",' as csv_cols
  3151. from dba_tab_subpartitions
  3152. where inmemory in ('ENABLED')
  3153. union all
  3154. select 'DBA_OBJECT_TABLES,' || owner ||','|| table_name ||','|| object_id_type ||',"'|| inmemory ||'","'|| inmemory_priority ||'",' as csv_cols
  3155. from dba_object_tables
  3156. where inmemory in ('ENABLED')
  3157. ) order by 1;
  3158. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3159. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3160. from dual where &&OCOUNT. in (-942, 0);
  3161. define OPTION_NAME=DB_IN_MEMORY
  3162. define OPTION_QUERY=GV$IM_SEGMENTS
  3163. define OPTION_QUERY_COLS=INST_ID,CON_ID,SEGMENT_TYPE,OWNER,SEGMENT_NAME,PARTITION_NAME,POPULATE_STATUS,INMEMORY_PRIORITY,INMEMORY_COMPRESSION
  3164. define OCOUNT=-942
  3165. col OCOUNT new_val OCOUNT noprint
  3166. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3167. from GV$IM_SEGMENTS;
  3168. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3169. from dual where &&OCOUNT. > 0;
  3170. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3171. a.CON_ID || ',' ||
  3172. a.INST_ID || ',"'||
  3173. a.SEGMENT_TYPE ||'","'||
  3174. a.OWNER ||'","'||
  3175. a.SEGMENT_NAME ||'","'||
  3176. a.PARTITION_NAME ||'","'||
  3177. a.POPULATE_STATUS ||'","'||
  3178. a.INMEMORY_PRIORITY ||'","'||
  3179. a.INMEMORY_COMPRESSION ||'",'
  3180. from GV$IM_SEGMENTS a
  3181. order by a.SEGMENT_TYPE, a.OWNER, a.SEGMENT_NAME, a.PARTITION_NAME;
  3182. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3183. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3184. from dual where &&OCOUNT. in (-942, 0);
  3185. -- *** OEM (ORACLE ENTERPRISE MANAGER)
  3186. -- ===================================================================*
  3187. -- Check for running known OEM Programs
  3188. define OPTION_NAME=OEM
  3189. define OPTION_QUERY=RUNNING_PROGRAMS
  3190. define OCOUNT=-942
  3191. col OCOUNT new_val OCOUNT noprint
  3192. select ltrim(rtrim(to_char(count(distinct program)))) as OCOUNT
  3193. FROM V$SESSION
  3194. WHERE
  3195. upper(program) LIKE '%XPNI.EXE%'
  3196. OR upper(program) LIKE '%VMS.EXE%'
  3197. OR upper(program) LIKE '%EPC.EXE%'
  3198. OR upper(program) LIKE '%TDVAPP.EXE%'
  3199. OR upper(program) LIKE 'VDOSSHELL%'
  3200. OR upper(program) LIKE '%VMQ%'
  3201. OR upper(program) LIKE '%VTUSHELL%'
  3202. OR upper(program) LIKE '%JAVAVMQ%'
  3203. OR upper(program) LIKE '%XPAUTUNE%'
  3204. OR upper(program) LIKE '%XPCOIN%'
  3205. OR upper(program) LIKE '%XPKSH%'
  3206. OR upper(program) LIKE '%XPUI%';
  3207. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3208. PROGRAM ||'",'
  3209. FROM V$SESSION
  3210. WHERE
  3211. upper(program) LIKE '%XPNI.EXE%'
  3212. OR upper(program) LIKE '%VMS.EXE%'
  3213. OR upper(program) LIKE '%EPC.EXE%'
  3214. OR upper(program) LIKE '%TDVAPP.EXE%'
  3215. OR upper(program) LIKE 'VDOSSHELL%'
  3216. OR upper(program) LIKE '%VMQ%'
  3217. OR upper(program) LIKE '%VTUSHELL%'
  3218. OR upper(program) LIKE '%JAVAVMQ%'
  3219. OR upper(program) LIKE '%XPAUTUNE%'
  3220. OR upper(program) LIKE '%XPCOIN%'
  3221. OR upper(program) LIKE '%XPKSH%'
  3222. OR upper(program) LIKE '%XPUI%';
  3223. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3224. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3225. from dual where &&OCOUNT. in (-942, 0);
  3226. -- PL/SQL anonymous block to Check for known OEM tables
  3227. DECLARE
  3228. cursor1 integer;
  3229. v_count number(1);
  3230. v_schema dba_tables.owner%TYPE;
  3231. v_version varchar2(10);
  3232. v_component varchar2(20);
  3233. v_i_name varchar2(10);
  3234. v_h_name varchar2(30);
  3235. stmt varchar2(200);
  3236. rows_processed integer;
  3237. CURSOR schema_array IS
  3238. SELECT owner
  3239. FROM dba_tables WHERE table_name = 'SMP_REP_VERSION';
  3240. CURSOR schema_array_v2 IS
  3241. SELECT owner
  3242. FROM dba_tables WHERE table_name = 'SMP_VDS_REPOS_VERSION';
  3243. BEGIN
  3244. --DBMS_OUTPUT.PUT_LINE ('.');
  3245. --DBMS_OUTPUT.PUT_LINE ('OEM REPOSITORY LOCATIONS');
  3246. SELECT instance_name,host_name INTO v_i_name, v_h_name FROM v$instance;
  3247. --DBMS_OUTPUT.PUT_LINE ('Instance: '||v_i_name||' on host: '||v_h_name);
  3248. OPEN schema_array;
  3249. OPEN schema_array_v2;
  3250. cursor1 := dbms_sql.open_cursor;
  3251. v_count := 0;
  3252. LOOP -- this loop steps through each valid schema.
  3253. FETCH schema_array INTO v_schema;
  3254. EXIT WHEN schema_array%notfound;
  3255. v_count := v_count + 1;
  3256. dbms_sql.parse(cursor1,'select c_current_version, c_component from '||v_schema||'.smp_rep_version', dbms_sql.native);
  3257. dbms_sql.define_column(cursor1, 1, v_version, 10);
  3258. dbms_sql.define_column(cursor1, 2, v_component, 20);
  3259. rows_processed:=dbms_sql.execute ( cursor1 );
  3260. loop -- to step through cursor1 to find console version.
  3261. if dbms_sql.fetch_rows(cursor1) >0 then
  3262. dbms_sql.column_value (cursor1, 1, v_version);
  3263. dbms_sql.column_value (cursor1, 2, v_component);
  3264. if v_component = 'CONSOLE' then
  3265. dbms_output.put_line ('&&GREP_PREFIX.,OEM,REPOSITORY1,'||v_count||',dbms_output,Schema '||rpad(v_schema,15)||' has a repository version '||v_version||',');
  3266. exit;
  3267. end if;
  3268. else
  3269. exit;
  3270. end if;
  3271. end loop;
  3272. END LOOP;
  3273. LOOP -- this loop steps through each valid V2 schema.
  3274. FETCH schema_array_v2 INTO v_schema;
  3275. EXIT WHEN schema_array_v2%notfound;
  3276. v_count := v_count + 1;
  3277. dbms_output.put_line ('&&GREP_PREFIX.,OEM,REPOSITORY2,'||v_count||',dbms_output,Schema '||rpad(v_schema,15)||' has a repository version 2.x,');
  3278. end loop;
  3279. dbms_sql.close_cursor (cursor1);
  3280. close schema_array;
  3281. close schema_array_v2;
  3282. if v_count = 0 then
  3283. dbms_output.put_line ('&&GREP_PREFIX.,OEM,NO_REPOSITORY,'||v_count||',dbms_output,There are NO OEM repositories with version prior to 10g on this instance - '||v_i_name||' on host '||v_h_name||',');
  3284. end if;
  3285. END;
  3286. /
  3287. --- OEM 10G AND HIGHER --- version and installation type (database control or grid/cloud control)
  3288. ----------------------
  3289. define OPTION_NAME=OEM
  3290. define OPTION_QUERY=MGMT_VERSIONS
  3291. define OPTION_QUERY_COLS=COMPONENT_NAME,VERSION,COMPAT_CORE_VERSION,COMPONENT_MODE,STATUS
  3292. define OCOUNT=-942
  3293. col OCOUNT new_val OCOUNT noprint
  3294. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3295. from SYSMAN.MGMT_VERSIONS;
  3296. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3297. from dual where &&OCOUNT. > 0;
  3298. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3299. COMPONENT_NAME || '","' || -- 'CORE'
  3300. VERSION || '","' ||
  3301. COMPAT_CORE_VERSION || '","' ||
  3302. COMPONENT_MODE || '","' || -- 'SYSAUX'='DB Control','CENTRAL'='Grid/Cloud Control'
  3303. STATUS || '",'
  3304. from SYSMAN.MGMT_VERSIONS
  3305. order by 1;
  3306. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3307. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3308. from dual where &&OCOUNT. in (-942, 0);
  3309. --- OEM 10G AND HIGHER --- components
  3310. ----------------------
  3311. define OPTION_NAME=OEM
  3312. define OPTION_QUERY=MGMT_INV_COMPONENT
  3313. define OPTION_QUERY_COLS=CONTAINER_TYPE,CONTAINER_NAME,CONTAINER_LOCATION,OUI_PLATFORM,IS_CLONABLE,NAME,VERSION,DESCRIPTION,EXTERNAL_NAME,INSTALLED_LOCATION,INSTALLER_VERSION,MIN_DEINSTALLER_VERSION,IS_TOP_LEVEL,TIMESTAMP
  3314. define OCOUNT=-942
  3315. col OCOUNT new_val OCOUNT noprint
  3316. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3317. from SYSMAN.MGMT_INV_CONTAINER a
  3318. full outer join SYSMAN.MGMT_INV_COMPONENT b on a.CONTAINER_GUID = b.CONTAINER_GUID
  3319. ;
  3320. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3321. from dual where &&OCOUNT. > 0;
  3322. SET LINESIZE 1500
  3323. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3324. a.CONTAINER_TYPE || '","' ||
  3325. a.CONTAINER_NAME || '","' ||
  3326. a.CONTAINER_LOCATION || '","' ||
  3327. a.OUI_PLATFORM || '","' ||
  3328. a.IS_CLONABLE || '","' ||
  3329. NAME || '","' ||
  3330. VERSION || '","' ||
  3331. substr(replace(replace(replace(to_char(substr(b.DESCRIPTION, 1, 1000)), chr(10), '[LF]'), chr(13), '[CR]'),'"',''''), 1, 255) || '","' ||
  3332. EXTERNAL_NAME || '","' ||
  3333. INSTALLED_LOCATION || '","' ||
  3334. INSTALLER_VERSION || '","' ||
  3335. MIN_DEINSTALLER_VERSION || '","' ||
  3336. IS_TOP_LEVEL || '","' ||
  3337. TIMESTAMP || '",'
  3338. from SYSMAN.MGMT_INV_CONTAINER a
  3339. full outer join SYSMAN.MGMT_INV_COMPONENT b on a.CONTAINER_GUID = b.CONTAINER_GUID
  3340. ;
  3341. SET LINESIZE 500
  3342. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3343. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3344. from dual where &&OCOUNT. in (-942, 0);
  3345. --- OEM 10G AND HIGHER --- Pack Access
  3346. define OPTION_NAME=OEM
  3347. define OPTION_QUERY=MGMT_ADMIN_LICENSES
  3348. define OPTION_QUERY_COLS=PACK_NAME,PACK_LABEL,TARGET_TYPE,PACK_DISPLAY_LABEL,PACK_ACCESS_AGREED
  3349. define OCOUNT=-942
  3350. col OCOUNT new_val OCOUNT noprint
  3351. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3352. from SYSMAN.MGMT_LICENSE_DEFINITIONS a,
  3353. SYSMAN.MGMT_ADMIN_LICENSES b,
  3354. (select decode(count(*), 0, 'NO', 'YES') as PACK_ACCESS_AGREED
  3355. from SYSMAN.MGMT_LICENSES where upper(I_AGREE)='YES') c
  3356. where a.pack_label = b.pack_name (+);
  3357. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3358. from dual where &&OCOUNT. > 0;
  3359. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3360. b.pack_name || ',' || a.pack_label || ',' || a.target_type || ',"' || a.pack_display_label || '","' || c.PACK_ACCESS_AGREED || '",'
  3361. from SYSMAN.MGMT_LICENSE_DEFINITIONS a,
  3362. SYSMAN.MGMT_ADMIN_LICENSES b,
  3363. (select decode(count(*), 0, 'NO', 'YES') as PACK_ACCESS_AGREED
  3364. from SYSMAN.MGMT_LICENSES where upper(I_AGREE)='YES') c
  3365. where a.pack_label = b.pack_name (+)
  3366. order by 1;
  3367. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3368. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3369. from dual where &&OCOUNT. in (-942, 0);
  3370. -- OEM Grid Control 10g; OEM Grid Control 11g; OEM Database Control 11g; OEM Cloud Control 12c
  3371. define OPTION_NAME=OEM
  3372. define OPTION_QUERY=GRID_CONTROL+11g
  3373. define OPTION_QUERY_COLS=TARGET_TYPE_DISPLAY_NAME,HOST_NAME,TARGET_NAME,PACK_DISPLAY_LABEL,PACK_ACCESS_GRANTED,PACK_ACCESS_AGREED,PACK_ACCESS_AGREED_DATE,PACK_ACCESS_AGREED_BY,TARGET_TYPE,PACK_LABEL
  3374. define OCOUNT=-942
  3375. col OCOUNT new_val OCOUNT noprint
  3376. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3377. from SYSMAN.MGMT_TARGETS tg
  3378. left outer join SYSMAN.MGMT_TARGET_TYPES tt on tg.target_type = tt.target_type
  3379. inner join SYSMAN.MGMT_LICENSE_DEFINITIONS ld on tg.target_type = ld.target_type
  3380. left outer join SYSMAN.MGMT_LICENSED_TARGETS lt on tg.target_guid = lt.target_guid and ld.pack_label = lt.pack_name
  3381. left outer join SYSMAN.MGMT_LICENSE_CONFIRMATION lc on tg.target_guid = lc.target_guid;
  3382. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3383. from dual where &&OCOUNT. > 0;
  3384. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"' ||
  3385. tt.type_display_name || '","' ||
  3386. tg.host_name || '",' ||
  3387. tg.target_name || ',"' ||
  3388. ld.pack_display_label || '",' ||
  3389. decode(lt.pack_name , null, 'NO', 'YES') || ',' ||
  3390. decode(lc.target_guid, null, 'NO', 'YES') || ',' ||
  3391. lc.confirmed_time || ',"' ||
  3392. lc.confirmed_by || '","' ||
  3393. tg.target_type || '","' ||
  3394. ld.pack_label || '",'
  3395. from SYSMAN.MGMT_TARGETS tg
  3396. left outer join SYSMAN.MGMT_TARGET_TYPES tt on tg.target_type = tt.target_type
  3397. inner join SYSMAN.MGMT_LICENSE_DEFINITIONS ld on tg.target_type = ld.target_type
  3398. left outer join SYSMAN.MGMT_LICENSED_TARGETS lt on tg.target_guid = lt.target_guid and ld.pack_label = lt.pack_name
  3399. left outer join SYSMAN.MGMT_LICENSE_CONFIRMATION lc on tg.target_guid = lc.target_guid
  3400. order by tg.host_name, tt.type_display_name, tg.target_name, ld.pack_display_label;
  3401. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3402. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3403. from dual where &&OCOUNT. in (-942, 0);
  3404. -- OEM PACK ACCESS AGREEMENTS (10g or higher)
  3405. define OPTION_NAME=OEM
  3406. define OPTION_QUERY=MGMT_LICENSES
  3407. define OCOUNT=-942
  3408. col OCOUNT new_val OCOUNT noprint
  3409. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3410. from SYSMAN.MGMT_LICENSES
  3411. ;
  3412. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3413. USERNAME || ',' || TIMESTAMP || ',"' || I_AGREE || '",'
  3414. from SYSMAN.MGMT_LICENSES
  3415. order by TIMESTAMP;
  3416. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3417. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3418. from dual where &&OCOUNT. in (-942, 0);
  3419. -- OEM MANAGED DATABASES (10g or higher)
  3420. define OPTION_NAME=OEM
  3421. define OPTION_QUERY=MGMT_TARGETS
  3422. define OPTION_QUERY_COLS=TARGET_NAME,HOST_NAME,LOAD_TIMESTAMP,LAST_LOAD_TIME,TARGET_TYPE
  3423. define OCOUNT=-942
  3424. col OCOUNT new_val OCOUNT noprint
  3425. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3426. from SYSMAN.MGMT_TARGETS
  3427. where TARGET_TYPE like '%database%'
  3428. ;
  3429. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3430. from dual where &&OCOUNT. > 0;
  3431. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3432. TARGET_NAME || '","' ||
  3433. HOST_NAME || '",' ||
  3434. LOAD_TIMESTAMP || ',' ||
  3435. LAST_LOAD_TIME || ',"' ||
  3436. TARGET_TYPE || '",'
  3437. from SYSMAN.MGMT_TARGETS
  3438. where TARGET_TYPE like '%database%'
  3439. order by TARGET_NAME;
  3440. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3441. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3442. from dual where &&OCOUNT. in (-942, 0);
  3443. -- OEM MANAGED TARGETS (10g or higher)
  3444. define OPTION_NAME=OEM
  3445. define OPTION_QUERY=MGMT$TARGET
  3446. define OPTION_QUERY_COLS=TARGET_NAME,DISPLAY_NAME,HOST_NAME,TARGET_TYPE,LAST_METRIC_LOAD_TIME
  3447. define OCOUNT=-942
  3448. col OCOUNT new_val OCOUNT noprint
  3449. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3450. from MGMT$TARGET
  3451. where TARGET_TYPE like '%database%'
  3452. ;
  3453. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3454. from dual where &&OCOUNT. > 0;
  3455. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3456. TARGET_NAME || '","' ||
  3457. DISPLAY_NAME || '","' ||
  3458. HOST_NAME || '","' ||
  3459. TARGET_TYPE || '",' ||
  3460. LAST_METRIC_LOAD_TIME || ','
  3461. from MGMT$TARGET
  3462. where TARGET_TYPE like '%database%'
  3463. order by TARGET_NAME;
  3464. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3465. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3466. from dual where &&OCOUNT. in (-942, 0);
  3467. -- OEM MGMT_LICENSE_CONFIRMATION (10g or higher)
  3468. define OPTION_NAME=OEM
  3469. define OPTION_QUERY=MGMT_LICENSE_CONFIRMATION
  3470. define OCOUNT=-942
  3471. col OCOUNT new_val OCOUNT noprint
  3472. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3473. from SYSMAN.MGMT_LICENSE_CONFIRMATION a,
  3474. SYSMAN.MGMT_TARGETS b
  3475. where a.target_guid = b.target_guid (+)
  3476. ;
  3477. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3478. a.confirmation || '","' ||
  3479. a.confirmed_by || '","' ||
  3480. a.confirmed_time || '","' ||
  3481. b.target_name || '","' ||
  3482. b.target_type || '","' ||
  3483. b.type_display_name || '",'
  3484. from SYSMAN.MGMT_LICENSE_CONFIRMATION a,
  3485. SYSMAN.MGMT_TARGETS b
  3486. where a.target_guid = b.target_guid (+)
  3487. order by 1;
  3488. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3489. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3490. from dual where &&OCOUNT. in (-942, 0);
  3491. -- OEM PACK USAGE (12c Cloud Control)
  3492. define OPTION_NAME=OEM
  3493. define OPTION_QUERY=PACK_USAGE
  3494. define OPTION_QUERY_COLS=PACK_NAME,TARGET_NAME,TARGET_DISPLAY_NAME,TARGET_TYPE,HOST_NAME,CURRENTLY_USED,DETECTED_USAGES,TOTAL_SAMPLES,LAST_USAGE_DATE,FIRST_SAMPLE_DATE,LAST_SAMPLE_DATE,PACK_ID
  3495. define OCOUNT=-942
  3496. col OCOUNT new_val OCOUNT noprint
  3497. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3498. FROM SYSMAN.mgmt_fu_registrations reg,
  3499. SYSMAN.mgmt_fu_statistics stat,
  3500. SYSMAN.mgmt_targets tgts
  3501. WHERE (stat.isused = 1 or stat.detected_samples > 0) -- current or past usage
  3502. AND stat.target_guid = tgts.target_guid
  3503. AND reg.feature_id = stat.feature_id
  3504. AND reg.collection_mode = 2
  3505. --AND tgts.display_name = 'TARGET_NAME'
  3506. ;
  3507. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3508. from dual where &&OCOUNT. > 0;
  3509. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3510. reg.feature_name || '","' ||
  3511. tgts.target_name || '","' ||
  3512. tgts.display_name || '","' ||
  3513. tgts.type_display_name || '","' ||
  3514. tgts.host_name || '","' ||
  3515. DECODE(stat.isused, 1, 'TRUE', 'FALSE') || '",' ||
  3516. stat.detected_samples || ',' ||
  3517. stat.total_samples || ',' ||
  3518. stat.last_usage_date || ',' ||
  3519. stat.first_sample_date || ',' ||
  3520. stat.last_sample_date || ',"' ||
  3521. reg.feature_id || '",'
  3522. FROM SYSMAN.mgmt_fu_registrations reg,
  3523. SYSMAN.mgmt_fu_statistics stat,
  3524. SYSMAN.mgmt_targets tgts
  3525. WHERE (stat.isused = 1 or stat.detected_samples > 0) -- current or past usage
  3526. AND stat.target_guid = tgts.target_guid
  3527. AND reg.feature_id = stat.feature_id
  3528. AND reg.collection_mode = 2
  3529. --AND tgts.display_name = 'TARGET_NAME'
  3530. ORDER BY decode(tgts.target_type, 'oracle_database', 1, 'rac_database', 1, 2), -- db packs first
  3531. reg.feature_name,
  3532. tgts.type_display_name,
  3533. tgts.display_name,
  3534. tgts.host_name;
  3535. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3536. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3537. from dual where &&OCOUNT. in (-942, 0);
  3538. -- OEM PACK FEATURE USAGE (12c Cloud Control)
  3539. define OPTION_NAME=OEM
  3540. define OPTION_QUERY=PACK_FEATURE_USAGE
  3541. -- Incomplete string, to avoid error: string beginning "PACK_NAME,..." is too long. maximum size is 240 characters.
  3542. define OPTION_QUERY_COLS=PACK_NAME,TARGET_NAME,TARGET_DISPLAY_NAME,TARGET_TYPE,HOST_NAME,PACK_CURRENTLY_USED,FEATURE_NAME,FEAT_CURRENTLY_USED,FEAT_DETECTED_USAGES,FEAT_TOTAL_SAMPLES,FEAT_LAST_USAGE_DATE,FEAT_FIRST_SAMPLE_DATE,FEAT_LAST_SAMPLE_DATE,PACK_LABEL
  3543. define OCOUNT=-942
  3544. col OCOUNT new_val OCOUNT noprint
  3545. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3546. FROM SYSMAN.mgmt_fu_registrations reg,
  3547. SYSMAN.mgmt_fu_statistics stat,
  3548. SYSMAN.mgmt_targets tgts,
  3549. SYSMAN.mgmt_fu_statistics f_stats,
  3550. SYSMAN.mgmt_fu_registrations freg,
  3551. SYSMAN.mgmt_fu_license_map lmap
  3552. WHERE (stat.isused = 1 or stat.detected_samples > 0 or f_stats.isused = 1 or f_stats.detected_samples > 0) -- current or past usage
  3553. AND stat.target_guid = tgts.target_guid
  3554. AND reg.feature_id = stat.feature_id
  3555. AND reg.collection_mode = 2
  3556. AND lmap.pack_id = reg.feature_id
  3557. AND lmap.feature_id = freg.feature_id
  3558. AND freg.feature_id = f_stats.feature_id
  3559. AND f_stats.target_guid = tgts.target_guid
  3560. --AND tgts.display_name = 'TARGET_NAME'
  3561. ;
  3562. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,PACK_ID,FEATURE_ID,'
  3563. from dual where &&OCOUNT. > 0;
  3564. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3565. reg.feature_name || '","' ||
  3566. tgts.target_name || '","' ||
  3567. tgts.display_name || '","' ||
  3568. tgts.type_display_name || '","' ||
  3569. tgts.host_name || '","' ||
  3570. DECODE(stat.isused, 1, 'TRUE', 'FALSE') || '","' ||
  3571. freg.feature_name || '","' ||
  3572. DECODE(f_stats.isused, 1, 'TRUE', 'FALSE') || '",' ||
  3573. f_stats.detected_samples || ',' ||
  3574. f_stats.total_samples || ',' ||
  3575. f_stats.last_usage_date || ',' ||
  3576. f_stats.first_sample_date || ',' ||
  3577. f_stats.last_sample_date || ',"' ||
  3578. lmap.pack_label || '","' ||
  3579. lmap.pack_id || '","' ||
  3580. lmap.feature_id || '",'
  3581. FROM SYSMAN.mgmt_fu_registrations reg,
  3582. SYSMAN.mgmt_fu_statistics stat,
  3583. SYSMAN.mgmt_targets tgts,
  3584. SYSMAN.mgmt_fu_statistics f_stats,
  3585. SYSMAN.mgmt_fu_registrations freg,
  3586. SYSMAN.mgmt_fu_license_map lmap
  3587. WHERE (stat.isused = 1 or stat.detected_samples > 0 or f_stats.isused = 1 or f_stats.detected_samples > 0) -- current or past usage
  3588. AND stat.target_guid = tgts.target_guid
  3589. AND reg.feature_id = stat.feature_id
  3590. AND reg.collection_mode = 2
  3591. AND lmap.pack_id = reg.feature_id
  3592. AND lmap.feature_id = freg.feature_id
  3593. AND freg.feature_id = f_stats.feature_id
  3594. AND f_stats.target_guid = tgts.target_guid
  3595. --AND tgts.display_name = 'TARGET_NAME'
  3596. ORDER BY decode(tgts.target_type, 'oracle_database', 1, 'rac_database', 1, 2), -- db packs first
  3597. reg.feature_name,
  3598. tgts.type_display_name,
  3599. tgts.display_name,
  3600. freg.feature_name;
  3601. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3602. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",') || '&OPTION_QUERY_COLS.,PACK_ID,FEATURE_ID,'
  3603. from dual where &&OCOUNT. in (-942, 0);
  3604. -- OEM - TUNING PACK EVIDENCES (10g or higher) - SQL Profiles usage
  3605. define OPTION_NAME=OEM
  3606. define OPTION_QUERY=SQL_PROFILES
  3607. define OPTION_QUERY_COLS=COUNT,NAME,CREATED,LAST_MODIFIED,DESCRIPTION,TYPE,STATUS
  3608. define OCOUNT=-942
  3609. col OCOUNT new_val OCOUNT noprint
  3610. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3611. from DBA_SQL_PROFILES
  3612. where lower(STATUS) = 'enabled';
  3613. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3614. from dual where &&OCOUNT. > 0;
  3615. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3616. '&&OCOUNT' || ',"' || -- count is added again as a first column for backward compatibility
  3617. NAME || '","' ||
  3618. CREATED || '","' ||
  3619. LAST_MODIFIED || '","' ||
  3620. DESCRIPTION || '","' ||
  3621. TYPE || '","' ||
  3622. STATUS || '",'
  3623. from DBA_SQL_PROFILES
  3624. where lower(STATUS) = 'enabled';
  3625. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3626. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3627. from dual where &&OCOUNT. in (-942, 0);
  3628. -- OEM - TUNING PACK EVIDENCES (10g or higher) - SQL Access Advisor and SQL Tuning Advisor
  3629. define OPTION_NAME=OEM
  3630. define OPTION_QUERY=DBA_ADVISOR_TASKS
  3631. define OPTION_QUERY_COLS=TASK_ID,OWNER,TASK_NAME,DESCRIPTION,ADVISOR_NAME,CREATED,LAST_MODIFIED,PARENT_TASK_ID,EXECUTION_START,EXECUTION_END,STATUS,SOURCE,HOW_CREATED
  3632. define OCOUNT=-942
  3633. col OCOUNT new_val OCOUNT noprint
  3634. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3635. from DBA_ADVISOR_TASKS
  3636. where ADVISOR_NAME in ('SQL Tuning Advisor', 'SQL Access Advisor')
  3637. ;
  3638. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3639. from dual where &&OCOUNT. > 0;
  3640. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3641. TASK_ID || ',"' ||
  3642. OWNER || '","' ||
  3643. TASK_NAME || '","' ||
  3644. DESCRIPTION || '","' ||
  3645. ADVISOR_NAME || '","' ||
  3646. CREATED || '","' ||
  3647. LAST_MODIFIED || '",' ||
  3648. PARENT_TASK_ID || ',"' ||
  3649. EXECUTION_START || '","' ||
  3650. EXECUTION_END || '","' ||
  3651. STATUS || '","' ||
  3652. SOURCE || '","' ||
  3653. HOW_CREATED || '",'
  3654. from DBA_ADVISOR_TASKS
  3655. where ADVISOR_NAME in ('SQL Tuning Advisor', 'SQL Access Advisor') -- SYS_AUTO_SQL_TUNING_TASK will be ignored at the analysis time
  3656. order by CREATED;
  3657. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3658. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3659. from dual where &&OCOUNT. in (-942, 0);
  3660. -- OEM - TUNING PACK EVIDENCES (10g or higher) - SQL Tuning Sets
  3661. define OPTION_NAME=OEM
  3662. define OPTION_QUERY=DBA_SQLSET
  3663. define OPTION_QUERY_COLS=ID,NAME,OWNER,CREATED,LAST_MODIFIED,STATEMENT_COUNT,DESCRIPTION
  3664. define OCOUNT=-942
  3665. col OCOUNT new_val OCOUNT noprint
  3666. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3667. from DBA_SQLSET;
  3668. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3669. from dual where &&OCOUNT. > 0;
  3670. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3671. ID || ',"' ||
  3672. NAME || '","' ||
  3673. OWNER || '","' ||
  3674. CREATED || '","' ||
  3675. LAST_MODIFIED || '",' ||
  3676. STATEMENT_COUNT || ',"' ||
  3677. DESCRIPTION || '",'
  3678. from DBA_SQLSET
  3679. order by ID;
  3680. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3681. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3682. from dual where &&OCOUNT. in (-942, 0);
  3683. -- OEM - TUNING PACK EVIDENCES (10g or higher) - SQL Tuning Sets references
  3684. define OPTION_NAME=OEM
  3685. define OPTION_QUERY=DBA_SQLSET_REFERENCES
  3686. define OPTION_QUERY_COLS=SQLSET_ID,SQLSET_NAME,SQLSET_OWNER,ID,OWNER,CREATED,DESCRIPTION
  3687. define OCOUNT=-942
  3688. col OCOUNT new_val OCOUNT noprint
  3689. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3690. from DBA_SQLSET_REFERENCES;
  3691. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3692. from dual where &&OCOUNT. > 0;
  3693. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3694. SQLSET_ID || ',"' ||
  3695. SQLSET_NAME || '","' ||
  3696. SQLSET_OWNER || '",' ||
  3697. ID || ',"' ||
  3698. OWNER || '","' ||
  3699. CREATED || '","' ||
  3700. DESCRIPTION || '",'
  3701. from DBA_SQLSET_REFERENCES
  3702. order by SQLSET_ID, OWNER, DESCRIPTION, ID;
  3703. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3704. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3705. from dual where &&OCOUNT. in (-942, 0);
  3706. -- *** AUDIT VAULT
  3707. -- ===================================================================*
  3708. select '&&GREP_PREFIX.,AUDIT_VAULT*,AVSYS_SCHEMA,'||count(*)||',count,'||MAX(username)||','
  3709. from DBA_USERS where upper(USERNAME)='AVSYS';
  3710. -- *** CONTENT DATABASE and RECORDS DATABASE
  3711. -- ====================================================================
  3712. select '&&GREP_PREFIX.,CONTENT_AND_RECORDS,CONTENT_SCHEMA,'||count(*)||',count,'||MAX(username)||','
  3713. from dba_users where UPPER(username)='CONTENT';
  3714. -- CONTENT
  3715. define OPTION_NAME=CONTENT_DATABASE
  3716. define OPTION_QUERY=ODM_DOCUMENT
  3717. define OCOUNT=-942
  3718. col OCOUNT new_val OCOUNT noprint
  3719. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3720. from ODM_DOCUMENT;
  3721. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3722. count(*) || ','
  3723. from ODM_DOCUMENT;
  3724. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3725. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3726. from dual where &&OCOUNT. in (-942);
  3727. -- RECORDS
  3728. define OPTION_NAME=RECORDS_DATABASE
  3729. define OPTION_QUERY=ODM_RECORD
  3730. define OCOUNT=-942
  3731. col OCOUNT new_val OCOUNT noprint
  3732. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3733. from ODM_RECORD;
  3734. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3735. count(*) || ','
  3736. from ODM_RECORD;
  3737. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3738. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3739. from dual where &&OCOUNT. in (-942);
  3740. -- *** OWB (ORACLE WAREHOUSE BUILDER)
  3741. -- ===================================================================*
  3742. -- Detect OWB repository
  3743. define OPTION_NAME=OWB
  3744. define OPTION_QUERY=REPOSITORY
  3745. DECLARE
  3746. CURSOR schema_array IS
  3747. SELECT owner
  3748. FROM dba_tables WHERE table_name = 'CMPSYSCLASSES';
  3749. c_installed_ver integer;
  3750. rows_processed integer;
  3751. v_schema dba_tables.owner%TYPE;
  3752. v_schema_cnt integer;
  3753. v_version varchar2(15);
  3754. BEGIN
  3755. OPEN schema_array;
  3756. c_installed_ver := dbms_sql.open_cursor;
  3757. <<owb_schema_loop>>
  3758. LOOP -- For each valid schema...
  3759. FETCH schema_array INTO v_schema;
  3760. EXIT WHEN schema_array%notfound;
  3761. --Determine if current schema is valid (contains CMPInstallation_V view)
  3762. dbms_sql.parse(c_installed_ver,'select installedversion from '|| v_schema || '.CMPInstallation_v where name = ''Oracle Warehouse Builder''',dbms_sql.native);
  3763. dbms_sql.define_column(c_installed_ver, 1, v_version, 15);
  3764. rows_processed:=dbms_sql.execute ( c_installed_ver );
  3765. loop -- Find OWB version.
  3766. if dbms_sql.fetch_rows(c_installed_ver) > 0 then
  3767. dbms_sql.column_value (c_installed_ver, 1, v_version);
  3768. v_schema_cnt := v_schema_cnt + 1;
  3769. dbms_output.put_line ('.');
  3770. dbms_output.put_line ('&&GREP_PREFIX.,&&OPTION_NAME.,&&OPTION_QUERY.'||',1,1,'||'Schema '||v_schema||' contains a version '||v_version||' repository');
  3771. else
  3772. exit;
  3773. end if;
  3774. end loop;
  3775. end loop;
  3776. END;
  3777. /
  3778. -- *** PATCHES
  3779. -- ====================================================================
  3780. define OPTION_NAME=PATCHES
  3781. define OPTION_QUERY=SYS.REGISTRY$HISTORY
  3782. define OPTION_QUERY_COLS=ACTION_TIME,ACTION,NAMESPACE,VERSION,ID,COMMENTS
  3783. define OCOUNT=-942
  3784. col OCOUNT new_val OCOUNT noprint
  3785. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3786. from SYS.REGISTRY$HISTORY;
  3787. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3788. from dual where &&OCOUNT. > 0;
  3789. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3790. ACTION_TIME ||','||
  3791. ACTION ||','||
  3792. NAMESPACE ||','||
  3793. VERSION ||','||
  3794. ID ||','||
  3795. COMMENTS ||','
  3796. from SYS.REGISTRY$HISTORY
  3797. order by ACTION_TIME
  3798. ;
  3799. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3800. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3801. from dual where &&OCOUNT. in (-942, 0);
  3802. --------------------------------------------
  3803. PROMPT *** EXTRA INFO *** CPU/Cores/Sockets
  3804. --------------------------------------------
  3805. -- CPU/CORES/SOCKETS (For 10.2 and higher)
  3806. --------------------------------------------
  3807. define OPTION_NAME=CPU_CORES_SOCKETS
  3808. define OPTION_QUERY=10g_r2.V$LICENSE
  3809. define OCOUNT=-904
  3810. col OCOUNT new_val OCOUNT noprint
  3811. select ltrim(rtrim(to_char(count(CPU_CORE_COUNT_HIGHWATER||CPU_SOCKET_COUNT_HIGHWATER)))) as OCOUNT
  3812. from V$LICENSE;
  3813. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3814. SESSIONS_HIGHWATER ||','||
  3815. CPU_COUNT_CURRENT ||','||
  3816. CPU_CORE_COUNT_CURRENT ||','||
  3817. CPU_SOCKET_COUNT_CURRENT ||','||
  3818. CPU_COUNT_HIGHWATER ||','||
  3819. CPU_CORE_COUNT_HIGHWATER ||','||
  3820. CPU_SOCKET_COUNT_HIGHWATER ||','
  3821. from V$LICENSE;
  3822. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3823. decode(&&OCOUNT., 0, 'count,', '"ORA-00904: invalid column name",')
  3824. from dual where &&OCOUNT. in (-904, 0);
  3825. -- DBA_CPU_USAGE_STATISTICS (For 10.2 and higher)
  3826. --------------------------------------------
  3827. define OPTION_NAME=DBA_CPU_USAGE_STATISTICS
  3828. define OPTION_QUERY=DBA_CPU_USAGE_STATISTICS
  3829. define OPTION_QUERY_COLS=VERSION,TIMESTAMP,CPU_COUNT,CPU_CORE_COUNT,CPU_SOCKET_COUNT
  3830. define OCOUNT=-942
  3831. col OCOUNT new_val OCOUNT noprint
  3832. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3833. FROM DBA_CPU_USAGE_STATISTICS;
  3834. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3835. from dual where &&OCOUNT. > 0;
  3836. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3837. VERSION ||','||
  3838. TIMESTAMP ||','||
  3839. CPU_COUNT ||','||
  3840. CPU_CORE_COUNT ||','||
  3841. CPU_SOCKET_COUNT ||','
  3842. from DBA_CPU_USAGE_STATISTICS;
  3843. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3844. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3845. from dual where &&OCOUNT. in (-942, 0);
  3846. --------------------------------------------
  3847. PROMPT *** EXTRA INFO *** ReviewLite_conc
  3848. --------------------------------------------
  3849. -- V$LICENSE
  3850. define OPTION_NAME=EXTRA_INFO
  3851. define OPTION_QUERY=V$LICENSE
  3852. define OCOUNT=-942
  3853. col OCOUNT new_val OCOUNT noprint
  3854. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3855. FROM V$LICENSE;
  3856. select&SCRIPT_OO '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3857. SESSIONS_MAX ||','||
  3858. SESSIONS_WARNING ||','||
  3859. SESSIONS_CURRENT ||','||
  3860. SESSIONS_HIGHWATER ||','||
  3861. USERS_MAX ||','
  3862. FROM V$LICENSE;
  3863. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3864. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3865. from dual where &&OCOUNT. in (-942, 0);
  3866. -- V$SESSION
  3867. define OPTION_NAME=EXTRA_INFO
  3868. define OPTION_QUERY=V$SESSION
  3869. define OCOUNT=-942
  3870. col OCOUNT new_val OCOUNT noprint
  3871. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3872. FROM V$SESSION;
  3873. select&SCRIPT_OO '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,'||
  3874. SID || ',' ||
  3875. SERIAL# || ',"'||
  3876. USERNAME ||'","'||
  3877. COMMAND ||'","'||
  3878. STATUS ||'","'||
  3879. SERVER ||'","'||
  3880. SCHEMANAME ||'","'||
  3881. OSUSER ||'","'||
  3882. PROCESS ||'","'||
  3883. MACHINE ||'","'||
  3884. TERMINAL ||'","'||
  3885. PROGRAM ||'","'||
  3886. TYPE ||'","'||
  3887. MODULE ||'","'||
  3888. ACTION ||'","'||
  3889. CLIENT_INFO ||'","'||
  3890. LAST_CALL_ET ||'","'||
  3891. LOGON_TIME ||'",'
  3892. FROM V$SESSION;
  3893. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3894. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3895. from dual where &&OCOUNT. in (-942, 0);
  3896. --------------------------------------------
  3897. PROMPT *** EXTRA INFO *** Troubleshooting
  3898. --------------------------------------------
  3899. -- Check User Privileges, for troubleshooting
  3900. select '&&GREP_PREFIX.,USER_PRIVS,USER,,,'||
  3901. USER || ','
  3902. from DUAL;
  3903. select '&&GREP_PREFIX.,USER_PRIVS,USER_SYS_PRIVS,,,'||
  3904. USERNAME || ',' ||
  3905. PRIVILEGE || ','
  3906. from USER_SYS_PRIVS;
  3907. select '&&GREP_PREFIX.,USER_PRIVS,USER_ROLE_PRIVS,,,'||
  3908. USERNAME || ',' ||
  3909. GRANTED_ROLE || ','
  3910. from USER_ROLE_PRIVS;
  3911. select '&&GREP_PREFIX.,USER_PRIVS,ROLE_SYS_PRIVS,,,'||
  3912. ROLE || ',' ||
  3913. PRIVILEGE || ','
  3914. from ROLE_SYS_PRIVS;
  3915. select '&&GREP_PREFIX.,USER_PRIVS,DVSYS.DBA_DV_REALM_AUTH,,,'||
  3916. REALM_NAME || ',"' ||
  3917. AUTH_RULE_SET_NAME || '",' ||
  3918. AUTH_OPTIONS || ','
  3919. from DVSYS.DBA_DV_REALM_AUTH
  3920. where GRANTEE=USER
  3921. order by REALM_NAME;
  3922. select '&&GREP_PREFIX.,USER_PRIVS,CURRENT_CONTAINER,,,'||
  3923. sys_context('USERENV', 'CON_ID' ) || ',' ||
  3924. sys_context('USERENV', 'CON_NAME') || ','
  3925. FROM dual;
  3926. SPOOL OFF
  3927. SPOOL &&OUTPUT_PATH.oraproducts.csv
  3928. --------------------------------------------
  3929. PROMPT *** OTHER ORACLE PRODUCTS ***
  3930. --------------------------------------------
  3931. -- *** EBS (E-BUSINESS SUITE)
  3932. -- ===================================================================*
  3933. -- Detect EBS related schemas
  3934. define OPTION_NAME=EBS
  3935. define OPTION_QUERY=EBS_SCHEMAS
  3936. define OPTION_QUERY_COLS=OWNER,OBJECT_NAME,OBJECT_TYPE,OBJECT_CREATED,OWNER_CREATED
  3937. define OCOUNT=-942
  3938. col OCOUNT new_val OCOUNT noprint
  3939. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3940. from DBA_OBJECTS a
  3941. join DBA_USERS b on a.OWNER = B.USERNAME
  3942. where a.OBJECT_NAME in ('FND_PRODUCT_GROUPS')
  3943. and a.OBJECT_TYPE in ('TABLE', 'SYNONYM')
  3944. order by a.OBJECT_NAME, a.OBJECT_TYPE, a.OWNER;
  3945. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3946. from dual where &&OCOUNT. > 0;
  3947. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3948. a.OWNER || '","' ||
  3949. a.OBJECT_NAME || '","' ||
  3950. a.OBJECT_TYPE || '",' ||
  3951. a.CREATED || ',' ||
  3952. b.CREATED || ','
  3953. from DBA_OBJECTS a
  3954. join DBA_USERS b on a.OWNER = B.USERNAME
  3955. where a.OBJECT_NAME in ('FND_PRODUCT_GROUPS')
  3956. and a.OBJECT_TYPE in ('TABLE', 'SYNONYM')
  3957. order by a.OBJECT_NAME, a.OBJECT_TYPE, a.OWNER;
  3958. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3959. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3960. from dual where &&OCOUNT. in (-942, 0);
  3961. -- Check if APPS schema contains FND_PRODUCT_GROUPS
  3962. define EBS_FROM=EBS_UNKNOWN
  3963. col EBS_FROM_ new_val EBS_FROM
  3964. select 'APPS' as EBS_FROM_ from APPS.FND_PRODUCT_GROUPS where rownum=1;
  3965. -- If not in APPS, check for other schemas
  3966. select OWNER as EBS_FROM_ from DBA_TABLES where TABLE_NAME='FND_PRODUCT_GROUPS' and '&EBS_FROM'='EBS_UNKNOWN' order by 1 desc;
  3967. prompt Trying to select from &EBS_FROM..FND_PRODUCT_GROUPS ...
  3968. -- Detect EBS release
  3969. define OPTION_NAME=EBS
  3970. define OPTION_QUERY=RELEASE
  3971. define OPTION_QUERY_COLS=RELEASE_NAME,APPLICATIONS_SYSTEM_NAME,APPS_USERNAME
  3972. define OCOUNT=-942
  3973. col OCOUNT new_val OCOUNT noprint
  3974. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  3975. from &EBS_FROM..FND_PRODUCT_GROUPS;
  3976. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  3977. from dual where &&OCOUNT. > 0;
  3978. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  3979. RELEASE_NAME || '","' ||
  3980. APPLICATIONS_SYSTEM_NAME || '","' ||
  3981. '&EBS_FROM' || '",'
  3982. from &EBS_FROM..FND_PRODUCT_GROUPS;
  3983. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  3984. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  3985. from dual where &&OCOUNT. in (-942, 0);
  3986. -- Check if APPS schema contains AD_APPLIED_PATCHES
  3987. define EBS_FROM=EBS_UNKNOWN
  3988. col EBS_FROM_ new_val EBS_FROM
  3989. select 'APPS' as EBS_FROM_ from APPS.AD_APPLIED_PATCHES where rownum=1;
  3990. -- If not in APPS, check for other schemas
  3991. select OWNER as EBS_FROM_ from DBA_TABLES where TABLE_NAME='AD_APPLIED_PATCHES' and '&EBS_FROM'='EBS_UNKNOWN' order by 1 desc;
  3992. prompt Trying to select from &EBS_FROM..AD_APPLIED_PATCHES ...
  3993. -- Check for DDL changes in the database - for EBS versions 11.5.7 and higher
  3994. define OPTION_NAME=EBS
  3995. define OPTION_QUERY=DDL
  3996. define OPTION_QUERY_COLS=OWNER,OBJECT_NAME,OBJECT_TYPE,CREATED,LAST_DDL_TIME
  3997. define OCOUNT=-942
  3998. col OCOUNT new_val OCOUNT noprint
  3999. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  4000. from (
  4001. select distinct
  4002. OWNER || '","' ||
  4003. OBJECT_NAME || '","' ||
  4004. OBJECT_TYPE || '",' ||
  4005. CREATED || ',' ||
  4006. LAST_DDL_TIME || ','
  4007. from DBA_OBJECTS
  4008. where CREATED < LAST_DDL_TIME
  4009. and CREATED not in (select distinct p.CREATION_DATE from &EBS_FROM..AD_APPLIED_PATCHES p)
  4010. and GENERATED='N'
  4011. and object_type in ( 'PACKAGE', 'PACKAGE BODY', 'PROCEDURE', 'TABLE',
  4012. 'CLUSTER', 'VIEW', 'FUNCTION', 'DATABASE LINK', 'SEQUENCE',
  4013. 'TABLE', 'TABLE PARTITION', 'TRIGGER', 'TYPE', 'TYPE BODY')
  4014. );
  4015. select 'GREP'||'EBS>>,&OPTION_QUERY_COLS.,'
  4016. from dual where &&OCOUNT. > 0;
  4017. select distinct
  4018. 'GREP'||'EBS>>,"'||
  4019. OWNER || '","' ||
  4020. OBJECT_NAME || '","' ||
  4021. OBJECT_TYPE || '",' ||
  4022. CREATED || ',' ||
  4023. LAST_DDL_TIME || ','
  4024. from DBA_OBJECTS
  4025. where CREATED < LAST_DDL_TIME
  4026. and CREATED not in (select distinct p.CREATION_DATE from &EBS_FROM..AD_APPLIED_PATCHES p)
  4027. and GENERATED='N'
  4028. and object_type in ( 'PACKAGE', 'PACKAGE BODY', 'PROCEDURE', 'TABLE',
  4029. 'CLUSTER', 'VIEW', 'FUNCTION', 'DATABASE LINK', 'SEQUENCE',
  4030. 'TABLE', 'TABLE PARTITION', 'TRIGGER', 'TYPE', 'TYPE BODY')
  4031. ;
  4032. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  4033. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  4034. from dual where &&OCOUNT. in (-942, 0);
  4035. -- Retrieve list of EBS Oracle Schemas (for troubleshooting)
  4036. define OPTION_NAME=EBS
  4037. define OPTION_QUERY=SYSTEM.FND_ORACLE_USERID
  4038. define OPTION_QUERY_COLS=ORACLE_ID,ORACLE_USERNAME,CREATION_DATE,DESCRIPTION,ENABLED_FLAG,USERNAME,CREATED
  4039. define OCOUNT=-942
  4040. col OCOUNT new_val OCOUNT noprint
  4041. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  4042. from SYSTEM.FND_ORACLE_USERID a
  4043. left join DBA_USERS b on a.ORACLE_USERNAME = b.USERNAME
  4044. ;
  4045. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  4046. from dual where &&OCOUNT. > 0;
  4047. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  4048. a.ORACLE_ID || '","' ||
  4049. a.ORACLE_USERNAME || '",' ||
  4050. a.CREATION_DATE || ',"' ||
  4051. a.DESCRIPTION || '","' ||
  4052. a.ENABLED_FLAG || '","' ||
  4053. b.USERNAME || '",' ||
  4054. b.CREATED || ','
  4055. from SYSTEM.FND_ORACLE_USERID a
  4056. left join DBA_USERS b on a.ORACLE_USERNAME = b.USERNAME
  4057. order by a.ORACLE_ID;
  4058. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  4059. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  4060. from dual where &&OCOUNT. in (-942, 0);
  4061. -- Detect few EBS specific objects (for troubleshooting)
  4062. define OPTION_NAME=EBS
  4063. define OPTION_QUERY=EBS_SPECIFIC_OBJECTS
  4064. define OPTION_QUERY_COLS=OBJECT_NAME,OBJECT_TYPE,OWNER,CREATED
  4065. define OCOUNT=-942
  4066. col OCOUNT new_val OCOUNT noprint
  4067. select ltrim(rtrim(to_char(count(*)))) as OCOUNT
  4068. from DBA_OBJECTS a
  4069. where a.OBJECT_NAME in ('FND_PRODUCT_GROUPS', 'AD_APPLIED_PATCHES', 'FND_ORACLE_USERID')
  4070. ;
  4071. select '&&GREP_PREFIX.,&OPTION_NAME.~HEADER,&OPTION_QUERY.~HEADER,&&OCOUNT.,count,&OPTION_QUERY_COLS.,'
  4072. from dual where &&OCOUNT. > 0;
  4073. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,count,"'||
  4074. a.OBJECT_NAME || '","' ||
  4075. a.OBJECT_TYPE || '","' ||
  4076. a.OWNER || '",' ||
  4077. a.CREATED || ','
  4078. from DBA_OBJECTS a
  4079. where a.OBJECT_NAME in ('FND_PRODUCT_GROUPS', 'AD_APPLIED_PATCHES', 'FND_ORACLE_USERID')
  4080. order by a.OBJECT_NAME, a.OBJECT_TYPE, a.OWNER;
  4081. select '&&GREP_PREFIX.,&OPTION_NAME.,&OPTION_QUERY.,&&OCOUNT.,'||
  4082. decode(&&OCOUNT., 0, 'count,', '"ORA-00942: table or view does not exist",')
  4083. from dual where &&OCOUNT. in (-942, 0);
  4084. PROMPT
  4085. -- *** OWB (ORACLE WAREHOUSE BUILDER) DETAILS
  4086. -- ===================================================================*
  4087. -- Gather detailed information
  4088. define OPTION_NAME=OWB
  4089. define OPTION_QUERY=multiple
  4090. DECLARE
  4091. c_installed_ver integer;
  4092. c_workspaces integer;
  4093. c_deployment integer;
  4094. c_execution integer;
  4095. c_pluggable_map integer;
  4096. c_transportable integer;
  4097. c_schedule integer;
  4098. c_scd_dimension integer;
  4099. c_user_def_FCO integer;
  4100. c_user_def_SCO integer;
  4101. c_map_operator integer;
  4102. c_pf_activity integer;
  4103. c_icon_set integer;
  4104. c_streams integer;
  4105. c_spatial integer;
  4106. c_data_profile integer;
  4107. c_data_rule integer;
  4108. c_data_auditor integer;
  4109. c_miv_connector integer;
  4110. c_sap_connector integer;
  4111. c_loc_report integer;
  4112. c_hetero integer;
  4113. c_webservice integer;
  4114. c_copybook integer;
  4115. c_dimcube integer;
  4116. c_realtime integer;
  4117. c_chunk integer;
  4118. c_obiee integer;
  4119. v_schema_cnt number(3);
  4120. v_schema dba_tables.owner%TYPE;
  4121. v_objcnt integer;
  4122. v_sfx varchar2(2);
  4123. v_suffix varchar2(32);
  4124. v_wksp_cond varchar2(32);
  4125. v_where_and varchar2(7);
  4126. v_product varchar2(25);
  4127. v_version varchar2(15);
  4128. v_tokyo_version varchar2(15);
  4129. v_paris_vers varchar2(15);
  4130. v_oldtahoe_vers varchar2(15);
  4131. v_tahoe_version varchar2(15);
  4132. v_i_name v$instance.instance_name%TYPE;
  4133. v_h_name v$instance.host_name%TYPE;
  4134. v_workspace_cnt number(5);
  4135. v_workspace_id number(9);
  4136. v_workspace_name varchar2(255);
  4137. v_workspace_owner varchar2(255);
  4138. v_enterprise_opts integer;
  4139. v_data_qual_opts integer;
  4140. v_connector_opts integer;
  4141. rows_processed integer;
  4142. v_report_details boolean;
  4143. v_tlo_report_details boolean;
  4144. v_is_cluster_db boolean;
  4145. -- for ReviewLite output
  4146. v_grep_me_prefix varchar2(400) := '&&GREP_PREFIX.,';
  4147. v_option_name varchar2(20) := 'OWB,';
  4148. v_feature_name varchar2(100);
  4149. v_feature_type varchar2(20);
  4150. --
  4151. v_locname varchar2(255);
  4152. v_connuser varchar2(4000);
  4153. v_servicename varchar2(4000);
  4154. v_host varchar2(4000);
  4155. v_port varchar2(4000);
  4156. CURSOR schema_array IS --=============list schemas
  4157. SELECT owner
  4158. FROM dba_tables WHERE table_name = 'CMPSYSCLASSES';
  4159. BEGIN
  4160. dbms_output.enable(1000000);
  4161. v_report_details := true;
  4162. v_tlo_report_details := false;
  4163. v_tokyo_version := '11.1';
  4164. v_paris_vers := '10.2';
  4165. v_oldtahoe_vers := '11.0';
  4166. v_tahoe_version := '11.2';
  4167. v_is_cluster_db := dbms_utility.is_cluster_database; --=======================check for RAC
  4168. -- database vershion check
  4169. for c_ in (select banner from v$version where banner like 'Oracle%')
  4170. loop
  4171. if instr(c_.banner, 'Release 7') > 0 or instr(c_.banner, 'Release 8') > 0 then
  4172. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'VERSION_CHECK_ERR,,,The script should be run on Oracle9 or newer.');
  4173. return;
  4174. end if;
  4175. end loop;
  4176. select instance_name,host_name into v_i_name, v_h_name
  4177. from sys.v_$instance;
  4178. if v_is_cluster_db = true then
  4179. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'RAC,,,YES');
  4180. else
  4181. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'RAC,,,NO');
  4182. end if;
  4183. OPEN schema_array;
  4184. c_installed_ver := dbms_sql.open_cursor;
  4185. c_workspaces := dbms_sql.open_cursor;
  4186. c_deployment := dbms_sql.open_cursor;
  4187. c_execution := dbms_sql.open_cursor;
  4188. c_pluggable_map := dbms_sql.open_cursor;
  4189. c_transportable := dbms_sql.open_cursor;
  4190. c_schedule := dbms_sql.open_cursor;
  4191. c_scd_dimension := dbms_sql.open_cursor;
  4192. c_user_def_FCO := dbms_sql.open_cursor;
  4193. c_user_def_SCO := dbms_sql.open_cursor;
  4194. c_map_operator := dbms_sql.open_cursor;
  4195. c_pf_activity := dbms_sql.open_cursor;
  4196. c_icon_set := dbms_sql.open_cursor;
  4197. c_streams := dbms_sql.open_cursor;
  4198. c_spatial := dbms_sql.open_cursor;
  4199. c_data_profile := dbms_sql.open_cursor;
  4200. c_data_rule := dbms_sql.open_cursor;
  4201. c_data_auditor := dbms_sql.open_cursor;
  4202. c_miv_connector := dbms_sql.open_cursor;
  4203. c_sap_connector := dbms_sql.open_cursor;
  4204. c_loc_report := dbms_sql.open_cursor;
  4205. c_hetero := dbms_sql.open_cursor;
  4206. c_webservice := dbms_sql.open_cursor;
  4207. c_copybook := dbms_sql.open_cursor;
  4208. c_dimcube := dbms_sql.open_cursor;
  4209. c_realtime := dbms_sql.open_cursor;
  4210. c_chunk := dbms_sql.open_cursor;
  4211. c_obiee := dbms_sql.open_cursor;
  4212. v_schema_cnt := 0;
  4213. <<owb_schema_loop>>
  4214. LOOP -- For each valid schema... ==============LOOP through schemas
  4215. FETCH schema_array INTO v_schema;
  4216. EXIT WHEN schema_array%notfound;
  4217. begin
  4218. -- Determine if current schema is valid (contains CMPInstallation_V view)
  4219. dbms_sql.parse(c_installed_ver,
  4220. 'select installedversion, name
  4221. from '|| v_schema || '.CMPInstallation_v',
  4222. dbms_sql.native);
  4223. dbms_sql.define_column(c_installed_ver, 1, v_version, 15);
  4224. dbms_sql.define_column(c_installed_ver, 2, v_product, 25);
  4225. rows_processed := dbms_sql.execute ( c_installed_ver );
  4226. dbms_output.put_line('');
  4227. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'REPOSITORY~HEADER,SQLCODE,SQLERRM,schema,comment,version');
  4228. loop -- Find OWB version.
  4229. if dbms_sql.fetch_rows(c_installed_ver) > 0 then
  4230. dbms_sql.column_value (c_installed_ver, 1, v_version);
  4231. dbms_sql.column_value (c_installed_ver, 2, v_product);
  4232. v_schema_cnt := v_schema_cnt + 1;
  4233. if v_product = 'Oracle Warehouse Builder' then
  4234. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'REPOSITORY,,,' || v_schema || ',"contains a repository version","' || v_version || '"'); --================print if schema contains repository
  4235. exit;
  4236. end if;
  4237. else
  4238. exit;
  4239. end if;
  4240. end loop;
  4241. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'REPOSITORY,' || SQLCODE || ',' || SQLERRM || ',' || v_schema);
  4242. end;
  4243. --
  4244. -- Establish a loop here to iterate on workspaceID if schema is OWBSYS.
  4245. -- If so, all feature checks compute option use per WS Owner/WS Name.
  4246. --
  4247. if v_schema = 'OWBSYS' then
  4248. dbms_sql.parse(c_workspaces,
  4249. 'select user_name, workspace_name, workspace_Id
  4250. from '|| v_schema || '.workspace_assignment
  4251. where isworkspaceowner = 1
  4252. and workspace_Id > 1
  4253. order by user_name, workspace_name, workspace_Id',
  4254. dbms_sql.native);
  4255. dbms_sql.define_column(c_workspaces, 1, v_workspace_owner, 255);
  4256. dbms_sql.define_column(c_workspaces, 2, v_workspace_name, 255);
  4257. dbms_sql.define_column(c_workspaces, 3, v_workspace_id);
  4258. rows_processed := dbms_sql.execute(c_workspaces);
  4259. v_sfx := '_r';
  4260. v_suffix := '_r';
  4261. v_where_and := ' and ';
  4262. else
  4263. v_sfx := '_v';
  4264. v_suffix := '_v';
  4265. v_where_and := ' where ';
  4266. end if;
  4267. -- Checks for deployment
  4268. begin
  4269. if instr(v_version, v_paris_vers) = 1 then
  4270. dbms_sql.parse(c_deployment,
  4271. 'select count(*)
  4272. from '|| v_schema || '.all_RT_AUDIT_DEPLOYMENTS ',
  4273. dbms_sql.native);
  4274. else
  4275. dbms_sql.parse(c_deployment,
  4276. 'select count(*)
  4277. from '|| v_schema || '.OWB$WB_RT_AUDIT_DEPLOYMENTS ',
  4278. dbms_sql.native);
  4279. end if;
  4280. dbms_sql.define_column(c_deployment, 1, v_objcnt);
  4281. rows_processed := dbms_sql.execute(c_deployment);
  4282. dbms_output.put_line('');
  4283. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'OBJECTS_DEPLOYED~HEADER,SQLCODE,SQLERRM,schema,comment,objects_count');
  4284. loop -- Count deployment objects.
  4285. if dbms_sql.fetch_rows(c_deployment) > 0 then
  4286. dbms_sql.column_value (c_deployment, 1, v_objcnt);
  4287. if v_report_details = true then
  4288. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'OBJECTS_DEPLOYED,,,' || v_schema || ',"design-time objects deployed to this instance",' || v_objcnt); -- print number of objects deployed
  4289. end if;
  4290. exit;
  4291. else
  4292. exit;
  4293. end if;
  4294. end loop;
  4295. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'OBJECTS_DEPLOYED,' || SQLCODE || ',' || SQLERRM || ',' || v_schema);
  4296. end;
  4297. -- Checks for execution
  4298. begin
  4299. if instr(v_version,v_paris_vers) = 1 then
  4300. dbms_sql.parse(c_execution,'select count(*)
  4301. from ' || v_schema || '.all_RT_AUDIT_EXECUTIONS ',
  4302. dbms_sql.native);
  4303. else
  4304. dbms_sql.parse(c_execution,'select count(*)
  4305. from ' || v_schema || '.OWB$WB_RT_AUDIT_EXECUTIONS ',
  4306. dbms_sql.native);
  4307. end if;
  4308. dbms_sql.define_column(c_execution, 1, v_objcnt);
  4309. rows_processed := dbms_sql.execute ( c_execution );
  4310. dbms_output.put_line('');
  4311. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'JOBS_RUN~HEADER,SQLCODE,SQLERRM,schema,comment,jobs_count');
  4312. loop -- Count deployment objects.
  4313. if dbms_sql.fetch_rows(c_execution) > 0 then
  4314. dbms_sql.column_value (c_execution, 1, v_objcnt);
  4315. if v_report_details = true then
  4316. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'JOBS_RUN,,,' || v_schema || ',"job run on this instance",' || to_char(v_objcnt)); --================ print number of jobs run on instance
  4317. end if;
  4318. exit;
  4319. else
  4320. exit;
  4321. end if;
  4322. end loop;
  4323. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'JOBS_RUN,' || SQLCODE || ',' || SQLERRM || ',' || v_schema);
  4324. end;
  4325. v_workspace_cnt := 0;
  4326. <<owb_workspace_loop>>
  4327. LOOP -- For each OWB 10g R2 schema or OWB 11g workspace
  4328. if v_schema = 'OWBSYS' then
  4329. if dbms_sql.fetch_rows(c_workspaces) > 0 then
  4330. dbms_sql.column_value (c_workspaces, 1, v_workspace_owner);
  4331. dbms_sql.column_value (c_workspaces, 2, v_workspace_name);
  4332. dbms_sql.column_value (c_workspaces, 3, v_workspace_id);
  4333. v_wksp_cond := 'workspaceID = ' || to_char(v_workspace_id);
  4334. v_workspace_cnt := v_workspace_cnt + 1;
  4335. if instr(v_version, v_tokyo_version) = 1 then
  4336. v_sfx := '';
  4337. v_suffix := 'where ' || v_wksp_cond;
  4338. else
  4339. v_suffix := '_r where ' || v_wksp_cond;
  4340. end if;
  4341. else
  4342. exit owb_workspace_loop;
  4343. end if;
  4344. elsif v_workspace_cnt = 0 then
  4345. v_workspace_cnt := 1;
  4346. else
  4347. exit owb_workspace_loop;
  4348. end if;
  4349. v_enterprise_opts := 0;
  4350. v_data_qual_opts := 0;
  4351. v_connector_opts := 0;
  4352. -- Detect any Enterprise ETL option features in use.EAD
  4353. dbms_output.put_line('');
  4354. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES~HEADER,SQLCODE,SQLERRM,schema,workspace_owner,workspace_name,workspace_id,feature_name,feature_type,feature_usage_quantity');
  4355. -- 1) Check for pluggable maps
  4356. begin
  4357. v_feature_name := '"pluggable maps"';
  4358. v_feature_type := 'ENTERPRISE';
  4359. if instr(v_version,v_tokyo_version) = 1 then
  4360. dbms_sql.parse(c_pluggable_map,
  4361. 'select count(*)
  4362. from '|| v_schema || '.CMPFCOClasses ' || v_suffix || --v_suffix was declared earlier and can be "where"or "_r where"
  4363. ' and s2_1 = ''CMPPublicSubMap''',
  4364. dbms_sql.native);
  4365. else
  4366. dbms_sql.parse(c_pluggable_map,
  4367. 'select count(*)
  4368. from ' || v_schema || '.CMPPublicSubMap' || v_suffix,
  4369. dbms_sql.native);
  4370. end if;
  4371. dbms_sql.define_column(c_pluggable_map, 1, v_objcnt);
  4372. rows_processed := dbms_sql.execute ( c_pluggable_map );
  4373. loop -- Count pluggable map objects.
  4374. if dbms_sql.fetch_rows(c_pluggable_map) > 0 then
  4375. dbms_sql.column_value (c_pluggable_map, 1, v_objcnt);
  4376. if v_objcnt > 0 then
  4377. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4378. v_enterprise_opts := v_enterprise_opts + 1;
  4379. exit;
  4380. end if;
  4381. else
  4382. exit;
  4383. end if;
  4384. end loop;
  4385. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4386. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4387. end;
  4388. -- 2) Check for transportable tablespaces, and if any reference FCOs.
  4389. begin
  4390. v_feature_name := '"members in transportable tablespaces"';
  4391. v_feature_type := 'ENTERPRISE';
  4392. if instr(v_version,v_tokyo_version) = 1 then
  4393. dbms_sql.parse(c_transportable,
  4394. 'select count(*)
  4395. from (' || 'select workspaceid, r_11
  4396. from ' || v_schema || '.CMPSCOClasses
  4397. union all
  4398. select workspaceid, r_11
  4399. from ' || v_schema ||'.CMPSCOCfgClasses
  4400. union all
  4401. select workspaceid, r_11
  4402. from ' || v_schema ||'.CMPSCOMapClasses
  4403. union all
  4404. select workspaceid, r_11
  4405. from '|| v_schema ||'.CMPSCOPrpClasses
  4406. ) sco
  4407. where sco.workspaceID = ' || to_char(v_workspace_id) ||
  4408. ' and sco.r_11 in (select i_1
  4409. from ' || v_schema || '.CMPFCOClasses ' || v_suffix ||
  4410. ' and s2_1 = ''CMPWBOracleTTS''
  4411. )',
  4412. dbms_sql.native);
  4413. else
  4414. dbms_sql.parse(c_transportable,
  4415. 'select count(*)
  4416. from ' || v_schema || '.secondclassobject' || v_suffix ||
  4417. v_where_and || 'firstclassobject ' || 'in (select elementid
  4418. from ' || v_schema || '.CMPWBOracleTTS' || v_suffix ||
  4419. ')',
  4420. dbms_sql.native);
  4421. end if;
  4422. dbms_sql.define_column(c_transportable, 1, v_objcnt);
  4423. rows_processed := dbms_sql.execute ( c_transportable );
  4424. loop -- Count FCO references across all transportable tablespaces.
  4425. if dbms_sql.fetch_rows(c_transportable) > 0 then
  4426. dbms_sql.column_value (c_transportable, 1, v_objcnt);
  4427. if v_objcnt > 0 then
  4428. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4429. v_enterprise_opts := v_enterprise_opts + 1;
  4430. exit;
  4431. end if;
  4432. else
  4433. exit;
  4434. end if;
  4435. end loop;
  4436. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4437. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4438. end;
  4439. -- 3) Check for schedules (calenders)
  4440. begin
  4441. v_feature_name := '"schedules"';
  4442. v_feature_type := 'ENTERPRISE';
  4443. if instr(v_version,v_tokyo_version) = 1 then
  4444. dbms_sql.parse(c_schedule,
  4445. 'select count(*)
  4446. from ' || v_schema || '.CMPFCOClasses ' || v_suffix ||
  4447. ' and s2_1 = ''CMPCalendar''',
  4448. dbms_sql.native);
  4449. else
  4450. dbms_sql.parse(c_schedule,
  4451. 'select count(*)
  4452. from ' || v_schema||'.CMPCalendar' || v_suffix,
  4453. dbms_sql.native);
  4454. end if;
  4455. dbms_sql.define_column(c_schedule, 1, v_objcnt);
  4456. rows_processed := dbms_sql.execute ( c_schedule );
  4457. loop -- Count schedules.
  4458. if dbms_sql.fetch_rows(c_schedule) > 0 then
  4459. dbms_sql.column_value (c_schedule, 1, v_objcnt);
  4460. if v_objcnt > 0 then
  4461. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4462. v_enterprise_opts := v_enterprise_opts + 1;
  4463. exit;
  4464. end if;
  4465. else
  4466. exit;
  4467. end if;
  4468. end loop;
  4469. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4470. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4471. end;
  4472. -- 4) Check for slowly changing dimensions (SCD)
  4473. begin
  4474. v_feature_name := '"slowly changing dimensions"';
  4475. v_feature_type := 'ENTERPRISE';
  4476. if instr(v_version,v_tokyo_version) = 1 then
  4477. dbms_sql.parse(c_scd_dimension,
  4478. 'select count(*)
  4479. from ' || v_schema || '.CMPFCOClasses ' || v_suffix ||
  4480. ' and s2_1 in (''CMPDimension'',''CMPWBPsftTreeStrct'')' ||
  4481. ' and i_7 in (2,3)',
  4482. dbms_sql.native);
  4483. else
  4484. dbms_sql.parse(c_scd_dimension,
  4485. 'select count(*)
  4486. from ' || v_schema || '.CMPDimension' || v_suffix ||
  4487. v_where_and || 'slowlychangingtype in (2,3)',
  4488. dbms_sql.native);
  4489. end if;
  4490. dbms_sql.define_column(c_scd_dimension, 1, v_objcnt);
  4491. rows_processed := dbms_sql.execute(c_scd_dimension);
  4492. loop -- Count slowly changing (type 2 or 3) dimensions.
  4493. if dbms_sql.fetch_rows(c_scd_dimension) > 0 then
  4494. dbms_sql.column_value (c_scd_dimension, 1, v_objcnt);
  4495. if v_objcnt > 0 then
  4496. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4497. v_enterprise_opts := v_enterprise_opts + 1;
  4498. exit;
  4499. end if;
  4500. else
  4501. exit;
  4502. end if;
  4503. end loop;
  4504. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4505. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4506. end;
  4507. -- 5a) Check for all FCO-type user defined objects (UDOs)
  4508. begin
  4509. v_feature_name := '"user defined objects (weak modules, folders, and other FCOs)"';
  4510. v_feature_type := 'ENTERPRISE';
  4511. if instr(v_version,v_tokyo_version) = 1 then
  4512. dbms_sql.parse(c_user_def_FCO,
  4513. 'select count(*)
  4514. from ' || v_schema || '.CMPFCOClasses ' || v_suffix ||
  4515. ' and s2_1 in (''CMPWeakFirstClassObject'',''CMPWeakFolder'',''CMPWeakModule'')',
  4516. dbms_sql.native);
  4517. else
  4518. --Note: weak folders are included in the weak FCO view.
  4519. dbms_sql.parse(c_user_def_FCO,
  4520. 'select count(*)
  4521. from (select 1
  4522. from ' || v_schema || '.CMPWeakFirstClassObject' || v_suffix ||
  4523. ' union all
  4524. select 1
  4525. from ' || v_schema || '.CMPWeakModule' || v_suffix ||
  4526. ')',
  4527. dbms_sql.native);
  4528. end if;
  4529. dbms_sql.define_column(c_user_def_FCO, 1, v_objcnt);
  4530. rows_processed := dbms_sql.execute ( c_user_def_FCO );
  4531. loop -- Count user defined objects (UDOs) as Weak FirstClassObjects
  4532. if dbms_sql.fetch_rows(c_user_def_FCO) > 0 then
  4533. dbms_sql.column_value (c_user_def_FCO, 1, v_objcnt);
  4534. if v_objcnt > 0 then
  4535. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4536. v_enterprise_opts := v_enterprise_opts + 1;
  4537. exit;
  4538. end if;
  4539. else
  4540. exit;
  4541. end if;
  4542. end loop;
  4543. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4544. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4545. end;
  4546. -- 5b) Check for all SCO-type user defined objects (UDOs)
  4547. begin
  4548. v_feature_name := '"user defined properties (weak associations, properties, and other SCOs)"';
  4549. v_feature_type := 'ENTERPRISE';
  4550. if instr(v_version, v_tokyo_version) = 1 then
  4551. dbms_sql.parse(c_user_def_SCO,
  4552. 'select count(*)
  4553. from (' || 'select 1
  4554. from ' || v_schema || '.CMPSCOClasses ' || v_suffix ||
  4555. ' and s2_1 in (''CMPWeakAssociation'')
  4556. union all '||
  4557. 'select 1
  4558. from ' || v_schema || '.CMPSCOCfgClasses ' || v_suffix ||
  4559. ' and s2_1 in (''CMPWeakSecondClassObject'')
  4560. union all ' ||
  4561. 'select 1
  4562. from ' || v_schema||'.CMPSCOPrpClasses '||v_suffix||
  4563. ' and s2_1 in (''CMPUserDefinedProperty'')
  4564. )',
  4565. dbms_sql.native);
  4566. elsif instr(v_version, v_paris_vers) = 1 then
  4567. dbms_sql.parse(c_user_def_SCO,
  4568. 'select count(*)
  4569. from (' || 'select 1
  4570. from ' || v_schema||'.CMPWeakSecondClassObject' || v_suffix || '
  4571. union all '||
  4572. 'select 1
  4573. from ' || v_schema||'.CMPWeakAssociation' || v_suffix || '
  4574. union all '||
  4575. 'select 1
  4576. from ' || v_schema||'.CMPUserDefinedProperty' || v_suffix ||
  4577. ')',
  4578. dbms_sql.native);
  4579. else
  4580. -- Note: Tahoe no longer includes CMPUserDefinedProperty
  4581. dbms_sql.parse(c_user_def_SCO,
  4582. 'select count(*)
  4583. from ('|| 'select 1
  4584. from ' || v_schema || '.CMPWeakSecondClassObject' || v_suffix ||
  4585. ' union all ' ||
  4586. 'select 1
  4587. from ' || v_schema || '.CMPWeakAssociation' || v_suffix || ')',
  4588. dbms_sql.native);
  4589. end if;
  4590. dbms_sql.define_column(c_user_def_SCO, 1, v_objcnt);
  4591. rows_processed := dbms_sql.execute ( c_user_def_SCO );
  4592. loop -- Count user defined objects (UDOs) as Weak SCO-type objects
  4593. if dbms_sql.fetch_rows(c_user_def_SCO) > 0 then
  4594. dbms_sql.column_value (c_user_def_SCO, 1, v_objcnt);
  4595. if v_objcnt > 0 then
  4596. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4597. v_enterprise_opts := v_enterprise_opts + 1;
  4598. exit;
  4599. end if;
  4600. else
  4601. exit;
  4602. end if;
  4603. end loop;
  4604. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4605. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4606. end;
  4607. -- 6) Check for EETL-specific map operators
  4608. begin
  4609. v_feature_name := '"EETL-specific map operators"';
  4610. v_feature_type := 'ENTERPRISE';
  4611. if instr(v_version,v_tokyo_version) = 1 then
  4612. dbms_sql.parse(c_map_operator,
  4613. 'select count(*)
  4614. from ' || v_schema || '.CMPSCOMapClasses '|| v_suffix ||
  4615. ' and s2_1 in (''CMPMapOperator'')
  4616. and (instr(s2_4,''userTypes.IteratorOperator'')>0 or
  4617. instr(s2_4,''userTypes.ExpandObject'')>0 or
  4618. instr(s2_4,''userTypes.ConstructObject'')>0
  4619. )',
  4620. dbms_sql.native);
  4621. else
  4622. dbms_sql.parse(c_map_operator,
  4623. 'select count(*)
  4624. from ' || v_schema || '.CMPMapOperator' || v_suffix ||
  4625. v_where_and || ' (instr(strongtypename,''userTypes.IteratorOperator'')>0 or
  4626. instr(strongtypename,''userTypes.ExpandObject'')>0 or
  4627. instr(strongtypename,''userTypes.ConstructObject'')>0)',
  4628. dbms_sql.native);
  4629. end if;
  4630. dbms_sql.define_column(c_map_operator, 1, v_objcnt);
  4631. rows_processed := dbms_sql.execute ( c_map_operator );
  4632. loop -- Count EETL-specific map operators
  4633. if dbms_sql.fetch_rows(c_map_operator) > 0 then
  4634. dbms_sql.column_value (c_map_operator, 1, v_objcnt);
  4635. if v_objcnt > 0 then
  4636. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4637. v_enterprise_opts := v_enterprise_opts + 1;
  4638. exit;
  4639. end if;
  4640. else
  4641. exit;
  4642. end if;
  4643. end loop;
  4644. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4645. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4646. end;
  4647. -- 6a) Check for EETL-specific XML target map operators
  4648. begin
  4649. v_feature_name := '"EETL-specific XML target operators"';
  4650. v_feature_type := 'ENTERPRISE';
  4651. if instr(v_version,v_tokyo_version) = 1 then
  4652. dbms_sql.parse(c_map_operator,
  4653. 'select count(*)
  4654. from (select distinct r_15
  4655. from ' || v_schema || '.CMPSCOPRPCLASSES ' || v_suffix ||
  4656. ' and s2_1 in (''CMPStringPropertyValue'')
  4657. and s4_1=''8i.MAPPING.FILE.OUTPUT_AS_XML'' and s3_4=''true''
  4658. )',
  4659. dbms_sql.native);
  4660. else
  4661. dbms_sql.parse(c_map_operator,
  4662. 'select count(*)
  4663. from (select distinct firstclassobject
  4664. from ' || v_schema || '.CMPStringPropertyvalue' || v_suffix || v_where_and ||
  4665. ' logicalname=''8i.MAPPING.FILE.OUTPUT_AS_XML'' and value=''true''
  4666. )',
  4667. dbms_sql.native);
  4668. end if;
  4669. dbms_sql.define_column(c_map_operator, 1, v_objcnt);
  4670. rows_processed := dbms_sql.execute ( c_map_operator );
  4671. loop -- Count EETL-specific map operators
  4672. if dbms_sql.fetch_rows(c_map_operator) > 0 then
  4673. dbms_sql.column_value (c_map_operator, 1, v_objcnt);
  4674. if v_objcnt > 0 then
  4675. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4676. v_enterprise_opts := v_enterprise_opts + 1;
  4677. exit;
  4678. end if;
  4679. else
  4680. exit;
  4681. end if;
  4682. end loop;
  4683. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4684. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4685. end;
  4686. -- 6b) Check for EETL-specific usage of target load ordering
  4687. begin
  4688. v_feature_name := '"EETL-specific usage of Target Load Ordering"';
  4689. v_feature_type := 'ENTERPRISE';
  4690. if instr(v_version,v_tokyo_version) = 1 then
  4691. dbms_sql.parse(c_map_operator,
  4692. 'select count(*) from (select distinct r_11 from '||
  4693. v_schema||'.CMPSCOPRPCLASSES '||v_suffix||
  4694. ' and s2_1 in (''CMPStringPropertyValue'')
  4695. and s4_1=''MAP.TARGET_LOAD_ORDER'' and ((s3_4 is not null) AND instr(s3_4,'','') > 0)
  4696. and r_11 not in (select distinct r_15
  4697. from ' || v_schema || '.CMPSCOPRPCLASSES ' || v_suffix ||
  4698. ' and s2_1 in (''CMPPhysicalObject'')
  4699. and i_1 in (select r_11
  4700. from ' || v_schema || '.CMPSCOPRPCLASSES '|| v_suffix ||
  4701. ' and s2_1 in (''CMPStringPropertyValue'')
  4702. and s4_1 like ''%USETLO'' and s3_4=''false''))
  4703. MINUS
  4704. select distinct r_11
  4705. from ' || v_schema || '.CMPSCOPRPCLASSES' || v_sfx || ' pv,
  4706. (select i_1, s2_4
  4707. from ' || v_schema || '.CMPSCOMapClasses ' || v_suffix ||
  4708. v_where_and || ' s2_1 in (''CMPMapOperator'') and (instr(s2_4,''Dimension'')>0)) op
  4709. where pv.r_15=op.i_1 AND s4_1 = ''SCE.PARMETERS.LOADTYPE'' and (s3_4 in (''TYPE1'',''TYPE2'',''TYPE3''))
  4710. and s2_1 in (''CMPStringPropertyValue'')
  4711. MINUS
  4712. select i_1
  4713. from ' || v_schema || '.CMPFCOClasses ' || v_suffix ||
  4714. ' and s2_1 = ''CMPDataRuleMap''
  4715. ) ',
  4716. dbms_sql.native);
  4717. elsif instr(v_version,v_paris_vers) = 1 then
  4718. dbms_sql.parse(c_map_operator,
  4719. 'select count(*)
  4720. from (select distinct firstclassobject
  4721. from ' || v_schema || '.CMPStringPropertyvalue' || v_suffix ||
  4722. v_where_and || ' logicalname=''MAP.TARGET_LOAD_ORDER''
  4723. and ((value is not null) AND instr(value,'','') > 0)
  4724. and firstclassobject not in (select firstclassobject
  4725. from ' || v_schema || '.cmpstringpropertyvalue' || v_suffix ||
  4726. v_where_and || ' logicalname like ''%USETLO''
  4727. and value=''false'')
  4728. MINUS
  4729. select distinct firstclassobject
  4730. from ' || v_schema || '.CMPStringPropertyvalue' || v_sfx || ' pv,
  4731. (select elementid,strongtypename
  4732. from ' || v_schema || '.CMPMapOperator' || v_suffix ||
  4733. v_where_and || ' (instr(strongtypename,''Dimension'')>0)
  4734. ) op
  4735. where pv.propertyowner=op.elementid
  4736. AND LOGICALNAME = ''SCE.PARMETERS.LOADTYPE''
  4737. and (VALUE in (''TYPE1'',''TYPE2'',''TYPE3''))
  4738. MINUS
  4739. select elementid
  4740. from '|| v_schema || '.CMPDataRuleMap' || v_suffix ||
  4741. ')',
  4742. dbms_sql.native);
  4743. else
  4744. dbms_sql.parse(c_map_operator,
  4745. 'select count(*)
  4746. from (select distinct firstclassobject
  4747. from ' || v_schema || '.CMPStringPropertyvalue' || v_sfx || ' pv,
  4748. (select distinct logicalobject, value
  4749. from ' || v_schema || '.cmpphysicalobject_r cpo, '|| v_schema||'.cmpstringpropertyvalue_r cpv
  4750. where cpo.' || v_wksp_cond || ' and cpv.'|| v_wksp_cond ||
  4751. ' and cpo.elementid=cpv.firstclassobject
  4752. and cpv.logicalname like ''%USETLO''
  4753. ) po,
  4754. (select value
  4755. from '|| v_schema || '.cmpprimitivemodelattribute_r
  4756. where name=''DEFAULTVALUE''
  4757. and attributetypefqn like ''%TARGET_LOAD_ORDER%''
  4758. ) dv
  4759. where ' || v_wksp_cond||'
  4760. and logicalname=''MAP.TARGET_LOAD_ORDER'' and ((pv.value is not null) AND instr(pv.value,'','') > 0)
  4761. and firstclassobject = po.logicalobject(+)
  4762. and (po.value = ''true'' or dv.value=''true'')
  4763. MINUS
  4764. select distinct firstclassobject
  4765. from ' || v_schema || '.CMPStringPropertyvalue' || v_sfx || ' pv,
  4766. (select elementid, strongtypename
  4767. from ' || v_schema || '.CMPMapOperator' || v_suffix ||
  4768. v_where_and || ' (instr(strongtypename,''Dimension'')>0)
  4769. ) op
  4770. where pv.propertyowner=op.elementid
  4771. AND LOGICALNAME = ''SCE.PARMETERS.LOADTYPE''
  4772. and (VALUE in (''TYPE1'',''TYPE2'',''TYPE3''))
  4773. MINUS
  4774. select elementid from ' || v_schema || '.CMPDataRuleMap' || v_suffix ||
  4775. ')',
  4776. dbms_sql.native);
  4777. end if;
  4778. dbms_sql.define_column(c_map_operator, 1, v_objcnt);
  4779. rows_processed := dbms_sql.execute ( c_map_operator );
  4780. loop -- Count EETL-specific map operators
  4781. if dbms_sql.fetch_rows(c_map_operator) > 0 then
  4782. dbms_sql.column_value (c_map_operator, 1, v_objcnt);
  4783. if v_objcnt > 0 then
  4784. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4785. v_enterprise_opts := v_enterprise_opts + 1;
  4786. exit;
  4787. end if;
  4788. else
  4789. exit;
  4790. end if;
  4791. end loop;
  4792. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4793. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4794. end;
  4795. -- 6c) Check for Multi Configuration
  4796. begin
  4797. v_feature_name := '"EETL-specific usage of Configurations (Multi-Config)"';
  4798. v_feature_type := 'ENTERPRISE';
  4799. if instr(v_version,v_tokyo_version) = 1 then
  4800. dbms_sql.parse(c_map_operator,
  4801. 'select count(*)
  4802. from (select r_17,count(*) c
  4803. from ' || v_schema || '.CMPFCOClasses ' || v_suffix ||
  4804. ' and s2_1 in (''CMPNamedConfiguration'')
  4805. group by r_17
  4806. )
  4807. where c >1',
  4808. dbms_sql.native);
  4809. else
  4810. dbms_sql.parse(c_map_operator,
  4811. 'select count(*)
  4812. from (select owningproject,count(*) c
  4813. from ' || v_schema || '.CMPNamedConfiguration'||v_suffix ||
  4814. v_where_and || ' 1=1
  4815. group by owningproject
  4816. )
  4817. where c >1',
  4818. dbms_sql.native);
  4819. end if;
  4820. dbms_sql.define_column(c_map_operator, 1, v_objcnt);
  4821. rows_processed := dbms_sql.execute ( c_map_operator );
  4822. loop -- Count EETL-specific map operators
  4823. if dbms_sql.fetch_rows(c_map_operator) > 0 then
  4824. dbms_sql.column_value (c_map_operator, 1, v_objcnt);
  4825. if v_objcnt > 0 then
  4826. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4827. v_enterprise_opts := v_enterprise_opts + 1;
  4828. exit;
  4829. end if;
  4830. else
  4831. exit;
  4832. end if;
  4833. end loop;
  4834. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4835. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4836. end;
  4837. -- 7) Check for EETL-specific process flow activities (exclude Tasks from Experts!)
  4838. begin
  4839. v_feature_name := '"EETL-specific process flow activities"';
  4840. v_feature_type := 'ENTERPRISE';
  4841. if instr(v_version,v_tokyo_version) = 1 then
  4842. dbms_sql.parse(c_pf_activity,
  4843. 'select count(*)
  4844. from ' || v_schema||'.CMPSCOCfgClasses '|| v_suffix ||
  4845. ' and s2_1 in (''CMPProcessActivity'')
  4846. and (instr(s2_4,''processFlow.ASSIGN'') > 0 or
  4847. instr(s2_4,''processFlow.NOTIFICATION'') > 0 or
  4848. instr(s2_4,''processFlow.ROUTE'') > 0 or
  4849. instr(s2_4,''processFlow.FOR_LOOP'') > 0 or
  4850. instr(s2_4,''processFlow.WHILE_LOOP'') > 0 or
  4851. instr(s2_4,''processFlow.SET_STATUS'') > 0
  4852. )',
  4853. dbms_sql.native);
  4854. else
  4855. dbms_sql.parse(c_pf_activity,
  4856. 'select count(*)
  4857. from ' || v_schema || '.CMPProcessActivity' || v_suffix ||
  4858. v_where_and || ' classname != ''CMPTask''
  4859. and (instr(strongtypename,''processFlow.ASSIGN'')>0 or
  4860. instr(strongtypename,''processFlow.NOTIFICATION'')>0 or
  4861. instr(strongtypename,''processFlow.ROUTE'')>0 or
  4862. instr(strongtypename,''processFlow.FOR_LOOP'')>0 or
  4863. instr(strongtypename,''processFlow.WHILE_LOOP'')>0 or
  4864. instr(strongtypename,''processFlow.SET_STATUS'')>0
  4865. )',
  4866. dbms_sql.native);
  4867. end if;
  4868. dbms_sql.define_column(c_pf_activity, 1, v_objcnt);
  4869. rows_processed := dbms_sql.execute ( c_pf_activity );
  4870. loop -- Count EETL-specific process flow activities
  4871. if dbms_sql.fetch_rows(c_pf_activity) > 0 then
  4872. dbms_sql.column_value (c_pf_activity, 1, v_objcnt);
  4873. if v_objcnt > 0 then
  4874. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4875. v_enterprise_opts := v_enterprise_opts + 1;
  4876. exit;
  4877. end if;
  4878. else
  4879. exit;
  4880. end if;
  4881. end loop;
  4882. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4883. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4884. end;
  4885. -- 8) Check for IconSets
  4886. begin
  4887. v_feature_name := '"icon sets"';
  4888. v_feature_type := 'ENTERPRISE';
  4889. if instr(v_version,v_tokyo_version) = 1 then
  4890. dbms_sql.parse(c_icon_set,'select count(*) from '||
  4891. v_schema||'.CMPFCOClasses '||v_suffix||
  4892. ' and s2_1 in (''CMPIcon'')',
  4893. dbms_sql.native);
  4894. else
  4895. dbms_sql.parse(c_icon_set,'select count(*) from '||
  4896. v_schema||'.CMPIcon'||v_suffix,
  4897. dbms_sql.native);
  4898. end if;
  4899. dbms_sql.define_column(c_icon_set, 1, v_objcnt);
  4900. rows_processed := dbms_sql.execute ( c_icon_set );
  4901. loop -- Count icon sets
  4902. if dbms_sql.fetch_rows(c_icon_set) > 0 then
  4903. dbms_sql.column_value (c_icon_set, 1, v_objcnt);
  4904. if v_objcnt > 0 then
  4905. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4906. v_enterprise_opts := v_enterprise_opts + 1;
  4907. exit;
  4908. end if;
  4909. else
  4910. exit;
  4911. end if;
  4912. end loop;
  4913. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4914. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4915. end;
  4916. -- 9) Check for Streams functions
  4917. begin
  4918. v_feature_name := '"streams mapping operators"';
  4919. v_feature_type := 'ENTERPRISE';
  4920. if instr(v_version,v_tokyo_version) = 1 then
  4921. dbms_sql.parse(c_streams,
  4922. 'select count(*)
  4923. from ' || v_schema || '.CMPSCOMapClasses ' || v_suffix ||
  4924. ' and s2_1 = ''CMPMapOperator''
  4925. and r_17 in (select i_1
  4926. from ' || v_schema || '.CMPFCOClasses ' || v_suffix ||
  4927. ' and s2_1 = ''CMPFunction''
  4928. and s2_3 = ''REPLICATE''
  4929. )',
  4930. dbms_sql.native);
  4931. else
  4932. dbms_sql.parse(c_streams,
  4933. 'select count(*)
  4934. from '|| v_schema||'.CMPMapOperator' || v_suffix ||
  4935. v_where_and || ' referencingobject in (select elementid
  4936. from '|| v_schema || '.CMPFunction' || v_suffix ||
  4937. v_where_and || ' name = ''REPLICATE''
  4938. )',
  4939. dbms_sql.native);
  4940. end if;
  4941. dbms_sql.define_column(c_streams, 1, v_objcnt);
  4942. rows_processed := dbms_sql.execute ( c_streams );
  4943. loop -- Count icon sets
  4944. if dbms_sql.fetch_rows(c_streams) > 0 then
  4945. dbms_sql.column_value (c_streams, 1, v_objcnt);
  4946. if v_objcnt > 0 then
  4947. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4948. v_enterprise_opts := v_enterprise_opts + 1;
  4949. exit;
  4950. end if;
  4951. else
  4952. exit;
  4953. end if;
  4954. end loop;
  4955. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4956. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4957. end;
  4958. --10) Check for Spatial functions
  4959. begin
  4960. v_feature_name := '"spatial mapping operators"';
  4961. v_feature_type := 'ENTERPRISE';
  4962. if instr(v_version,v_tokyo_version) = 1 then
  4963. dbms_sql.parse(c_streams,
  4964. 'select count(*)
  4965. from ' || v_schema || '.CMPSCOMapClasses '|| v_suffix ||
  4966. ' and s2_1 = ''CMPMapOperator''
  4967. and r_17 in (select i_1
  4968. from '|| v_schema||'.CMPFCOClasses ' || v_suffix ||
  4969. ' and s2_1 = ''CMPFunction'''||
  4970. ' and s2_3 in (''SDO_AGGR_CENTROID'',''SDO_AGGR_CONVEXHULL'',''SDO_AGGR_MBR'',''SDO_AGGR_UNION'')
  4971. )',
  4972. dbms_sql.native);
  4973. else
  4974. dbms_sql.parse(c_streams,
  4975. 'select count(*)
  4976. from ' || v_schema || '.CMPMapOperator' || v_suffix ||
  4977. v_where_and || ' referencingobject in (select elementid
  4978. from '|| v_schema || '.CMPFunction' || v_suffix ||
  4979. v_where_and || ' name in (''SDO_AGGR_CENTROID'',''SDO_AGGR_CONVEXHULL'',''SDO_AGGR_MBR'',''SDO_AGGR_UNION'')
  4980. )',
  4981. dbms_sql.native);
  4982. end if;
  4983. dbms_sql.define_column(c_streams, 1, v_objcnt);
  4984. rows_processed := dbms_sql.execute ( c_streams );
  4985. loop -- Count icon sets
  4986. if dbms_sql.fetch_rows(c_streams) > 0 then
  4987. dbms_sql.column_value (c_streams, 1, v_objcnt);
  4988. if v_objcnt > 0 then
  4989. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  4990. v_enterprise_opts := v_enterprise_opts + 1;
  4991. exit;
  4992. end if;
  4993. else
  4994. exit;
  4995. end if;
  4996. end loop;
  4997. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  4998. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  4999. end;
  5000. --11) Check for Native support for heterogeneous database
  5001. begin
  5002. v_feature_name := '"heterogeneous database modules"';
  5003. v_feature_type := 'ENTERPRISE';
  5004. if instr(v_version,v_tahoe_version) = 1 then
  5005. dbms_sql.parse(c_hetero,
  5006. 'select count(*)
  5007. from '|| v_schema || '.CMPINSTALLEDMODULE' || v_suffix ||
  5008. v_where_and || ' seeded=0
  5009. and (instr(strongtypename,''DB2UDBNativeModule'')>0 or
  5010. instr(strongtypename,''GenericNativeModule'')>0 or
  5011. instr(strongtypename,''KMMapModule'')>0 or
  5012. instr(strongtypename,''SQLServerNativeModule'')>0 or
  5013. instr(strongtypename,''CMPKMTaskFlowInstalledModule'')>0
  5014. )',
  5015. dbms_sql.native);
  5016. dbms_sql.define_column(c_hetero, 1, v_objcnt);
  5017. rows_processed := dbms_sql.execute ( c_hetero );
  5018. loop
  5019. if dbms_sql.fetch_rows(c_hetero) > 0 then
  5020. dbms_sql.column_value (c_hetero, 1, v_objcnt);
  5021. if v_objcnt > 0 then
  5022. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  5023. v_enterprise_opts := v_enterprise_opts + 1;
  5024. exit;
  5025. end if;
  5026. else
  5027. exit;
  5028. end if;
  5029. end loop;
  5030. end if;
  5031. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  5032. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  5033. end;
  5034. --12) Check for Web Services - excluding seeded ones
  5035. begin
  5036. v_feature_name := '"web services"';
  5037. v_feature_type := 'ENTERPRISE';
  5038. if instr(v_version,v_tahoe_version) = 1 then
  5039. dbms_sql.parse(c_webservice,
  5040. 'select count(*)
  5041. from ' || v_schema || '.CMPWEBSERVICE' || v_suffix ||
  5042. v_where_and || 'seeded=0',
  5043. dbms_sql.native);
  5044. dbms_sql.define_column(c_webservice, 1, v_objcnt);
  5045. rows_processed := dbms_sql.execute ( c_webservice );
  5046. loop
  5047. if dbms_sql.fetch_rows(c_webservice) > 0 then
  5048. dbms_sql.column_value (c_webservice, 1, v_objcnt);
  5049. if v_objcnt > 0 then
  5050. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  5051. v_enterprise_opts := v_enterprise_opts + 1;
  5052. exit;
  5053. end if;
  5054. else
  5055. exit;
  5056. end if;
  5057. end loop;
  5058. end if;
  5059. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  5060. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  5061. end;
  5062. --13) Cobol copybooks
  5063. begin
  5064. v_feature_name := '"flat files imported from Cobol copybooks"';
  5065. v_feature_type := 'ENTERPRISE';
  5066. if instr(v_version,v_tahoe_version) = 1 then
  5067. dbms_sql.parse(c_copybook,
  5068. 'select count(*)
  5069. from '|| v_schema || '.cmpwbfile' || v_suffix ||
  5070. v_where_and || 'length(copybooksource)>0',
  5071. dbms_sql.native);
  5072. dbms_sql.define_column(c_copybook, 1, v_objcnt);
  5073. rows_processed := dbms_sql.execute ( c_copybook );
  5074. loop
  5075. if dbms_sql.fetch_rows(c_copybook) > 0 then
  5076. dbms_sql.column_value (c_copybook, 1, v_objcnt);
  5077. if v_objcnt > 0 then
  5078. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  5079. v_enterprise_opts := v_enterprise_opts + 1;
  5080. exit;
  5081. end if;
  5082. else
  5083. exit;
  5084. end if;
  5085. end loop;
  5086. end if;
  5087. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  5088. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  5089. end;
  5090. --14) OLAP with Cube MVs
  5091. begin
  5092. v_feature_name := '"Dimensions/Cubes storing data in OLAP cube-organized materialized views"';
  5093. v_feature_type := 'ENTERPRISE';
  5094. if instr(v_version,v_tahoe_version) = 1 then
  5095. dbms_sql.parse(c_dimcube,
  5096. 'select count(1)
  5097. from (select elementid
  5098. from ' || v_schema || '.CMPDimension' || v_suffix ||
  5099. v_where_and || 'implementation=''HOLAP''
  5100. UNION
  5101. select elementid
  5102. from '|| v_schema || '.CMPCube' || v_suffix||
  5103. v_where_and || 'implementation=''HOLAP''
  5104. ) ',
  5105. dbms_sql.native);
  5106. dbms_sql.define_column(c_dimcube, 1, v_objcnt);
  5107. rows_processed := dbms_sql.execute ( c_dimcube );
  5108. loop
  5109. if dbms_sql.fetch_rows(c_dimcube) > 0 then
  5110. dbms_sql.column_value (c_dimcube, 1, v_objcnt);
  5111. if v_objcnt > 0 then
  5112. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  5113. v_enterprise_opts := v_enterprise_opts + 1;
  5114. exit;
  5115. end if;
  5116. else
  5117. exit;
  5118. end if;
  5119. end loop;
  5120. end if;
  5121. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  5122. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  5123. end;
  5124. --15) Orphan management
  5125. begin
  5126. v_feature_name := '"Dimensions/Cubes defining orphan management policies"';
  5127. v_feature_type := 'ENTERPRISE';
  5128. if instr(v_version,v_tahoe_version) = 1 then
  5129. dbms_sql.parse(c_dimcube,
  5130. 'select count(1)
  5131. from (select elementid
  5132. from '|| v_schema||'.CMPDimension' || v_suffix ||
  5133. v_where_and || ' (LoadPolicyForInvalidKey not like ''NO_MAINTENANCE'' or
  5134. LoadPolicyForNULL not like ''NO_MAINTENANCE'' or
  5135. RemovePolicy not like ''NO_MAINTENANCE'')
  5136. UNION
  5137. select elementid
  5138. from ' || v_schema||'.CMPCube'|| v_suffix ||
  5139. v_where_and || ' (LoadPolicyForInvalidKey not like ''NO_MAINTENANCE'' or
  5140. LoadPolicyForNULL not like ''NO_MAINTENANCE'' )
  5141. ) ',
  5142. dbms_sql.native);
  5143. dbms_sql.define_column(c_dimcube, 1, v_objcnt);
  5144. rows_processed := dbms_sql.execute ( c_dimcube );
  5145. loop
  5146. if dbms_sql.fetch_rows(c_dimcube) > 0 then
  5147. dbms_sql.column_value (c_dimcube, 1, v_objcnt);
  5148. if v_objcnt > 0 then
  5149. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  5150. v_enterprise_opts := v_enterprise_opts + 1;
  5151. exit;
  5152. end if;
  5153. else
  5154. exit;
  5155. end if;
  5156. end loop;
  5157. end if;
  5158. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  5159. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  5160. end;
  5161. --16) Real-time mappings
  5162. begin
  5163. v_feature_name := '"real-time mappings using advanced queues"';
  5164. v_feature_type := 'ENTERPRISE';
  5165. if instr(v_version,v_tahoe_version) = 1 then
  5166. dbms_sql.parse(c_realtime,
  5167. 'select count(*)
  5168. from ' || v_schema || '.CMPMap' || v_suffix ||
  5169. v_where_and || ' instr(strongtypename,''CMPTrickleFeedMap'')>0 ',
  5170. dbms_sql.native);
  5171. dbms_sql.define_column(c_realtime, 1, v_objcnt);
  5172. rows_processed := dbms_sql.execute ( c_realtime );
  5173. loop
  5174. if dbms_sql.fetch_rows(c_realtime) > 0 then
  5175. dbms_sql.column_value (c_realtime, 1, v_objcnt);
  5176. if v_objcnt > 0 then
  5177. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  5178. v_enterprise_opts := v_enterprise_opts + 1;
  5179. exit;
  5180. end if;
  5181. else
  5182. exit;
  5183. end if;
  5184. end loop;
  5185. end if;
  5186. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  5187. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  5188. end;
  5189. --17) Data chunking feature
  5190. begin
  5191. v_feature_name := '"mappings with chunking options"';
  5192. v_feature_type := 'ENTERPRISE';
  5193. if instr(v_version,v_tahoe_version) = 1 then
  5194. dbms_sql.parse(c_chunk,
  5195. 'select count(*)
  5196. from ' || v_schema || '.cmpstringpropertyvalue' || v_suffix ||
  5197. v_where_and || ' logicalname like ''8i.MAPPINGS.PLSQLSTEP.PARALLELCHUNKINGPARAMS.CHUNKINGMETHOD.CHUNKBYCONTROLLER''
  5198. and value not like ''NONE'' ',
  5199. dbms_sql.native);
  5200. dbms_sql.define_column(c_chunk, 1, v_objcnt);
  5201. rows_processed := dbms_sql.execute ( c_chunk );
  5202. loop
  5203. if dbms_sql.fetch_rows(c_chunk) > 0 then
  5204. dbms_sql.column_value (c_chunk, 1, v_objcnt);
  5205. if v_objcnt > 0 then
  5206. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  5207. v_enterprise_opts := v_enterprise_opts + 1;
  5208. exit;
  5209. end if;
  5210. else
  5211. exit;
  5212. end if;
  5213. end loop;
  5214. end if;
  5215. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  5216. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  5217. end;
  5218. --18) OBIEE
  5219. begin
  5220. v_feature_name := '"OBIEE modules"';
  5221. v_feature_type := 'ENTERPRISE';
  5222. if instr(v_version,v_tahoe_version) = 1 then
  5223. dbms_sql.parse(c_obiee,
  5224. 'select count(*)
  5225. from '|| v_schema || '.cmpinstalledmodule' || v_suffix ||
  5226. v_where_and || ' strongtypename like ''oracle.wh.repos.impl.intelligenceSchema.OBIEESchema''',
  5227. dbms_sql.native);
  5228. dbms_sql.define_column(c_obiee, 1, v_objcnt);
  5229. rows_processed := dbms_sql.execute ( c_obiee );
  5230. loop
  5231. if dbms_sql.fetch_rows(c_obiee) > 0 then
  5232. dbms_sql.column_value (c_obiee, 1, v_objcnt);
  5233. if v_objcnt > 0 then
  5234. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  5235. v_enterprise_opts := v_enterprise_opts + 1;
  5236. exit;
  5237. end if;
  5238. else
  5239. exit;
  5240. end if;
  5241. end loop;
  5242. end if;
  5243. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  5244. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  5245. end;
  5246. -- Detect any Data Quality option features in use.
  5247. -- 1) Check for data profiles
  5248. begin
  5249. v_feature_name := '"data profiles"';
  5250. v_feature_type := 'DATA_QUALITY';
  5251. if instr(v_version,v_tokyo_version) = 1 then
  5252. dbms_sql.parse(c_data_profile ,
  5253. 'select count(*)
  5254. from '|| v_schema||'.CMPFCOClasses ' || v_suffix ||
  5255. ' and s2_1 = ''CMPProfile''',
  5256. dbms_sql.native);
  5257. else
  5258. dbms_sql.parse(c_data_profile ,
  5259. 'select count(*)
  5260. from '|| v_schema || '.CMPProfile' || v_suffix,
  5261. dbms_sql.native);
  5262. end if;
  5263. dbms_sql.define_column(c_data_profile , 1, v_objcnt);
  5264. rows_processed := dbms_sql.execute ( c_data_profile );
  5265. loop -- Count data profiles.
  5266. if dbms_sql.fetch_rows(c_data_profile ) > 0 then
  5267. dbms_sql.column_value (c_data_profile , 1, v_objcnt);
  5268. if v_objcnt > 0 then
  5269. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  5270. v_data_qual_opts := v_data_qual_opts + 1;
  5271. exit;
  5272. end if;
  5273. else
  5274. exit;
  5275. end if;
  5276. end loop;
  5277. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  5278. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  5279. end;
  5280. -- 2) Check for custom data rules (exclude seeded rules)
  5281. begin
  5282. v_feature_name := '"custom data rules"';
  5283. v_feature_type := 'DATA_QUALITY';
  5284. if instr(v_version,v_tokyo_version) = 1 then
  5285. dbms_sql.parse(c_data_rule ,
  5286. 'select count(*)
  5287. from '|| v_schema||'.CMPFCOClasses '|| v_suffix ||
  5288. ' and s2_1 = ''CMPBusinessRuleDefinition'''||
  5289. ' and b_11 = 0',
  5290. dbms_sql.native);
  5291. else
  5292. dbms_sql.parse(c_data_rule ,
  5293. 'select count(*)
  5294. from ' || v_schema||'.CMPBusinessRuleDefinition' || v_suffix ||
  5295. v_where_and || 'seeded = 0',
  5296. dbms_sql.native);
  5297. end if;
  5298. dbms_sql.define_column(c_data_rule , 1, v_objcnt);
  5299. rows_processed := dbms_sql.execute ( c_data_rule );
  5300. loop -- Count custom data rules
  5301. if dbms_sql.fetch_rows(c_data_rule ) > 0 then
  5302. dbms_sql.column_value (c_data_rule , 1, v_objcnt);
  5303. if v_objcnt > 0 then
  5304. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  5305. v_data_qual_opts := v_data_qual_opts + 1;
  5306. exit;
  5307. end if;
  5308. else
  5309. exit;
  5310. end if;
  5311. end loop;
  5312. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  5313. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  5314. end;
  5315. -- 3) Check for data auditors
  5316. begin
  5317. v_feature_name := '"data auditors"';
  5318. v_feature_type := 'DATA_QUALITY';
  5319. if instr(v_version,v_tokyo_version) = 1 then
  5320. dbms_sql.parse(c_data_auditor ,
  5321. 'select count(*)
  5322. from ' || v_schema || '.CMPFCOClasses '|| v_suffix ||
  5323. ' and s2_1 = ''CMPDataRuleMap''',
  5324. dbms_sql.native);
  5325. else
  5326. dbms_sql.parse(c_data_auditor ,
  5327. 'select count(*)
  5328. from ' || v_schema||'.CMPDataRuleMap'|| v_suffix,
  5329. dbms_sql.native);
  5330. end if;
  5331. dbms_sql.define_column(c_data_auditor , 1, v_objcnt);
  5332. rows_processed := dbms_sql.execute ( c_data_auditor );
  5333. loop -- Count data auditors
  5334. if dbms_sql.fetch_rows(c_data_auditor ) > 0 then
  5335. dbms_sql.column_value (c_data_auditor , 1, v_objcnt);
  5336. if v_objcnt > 0 then
  5337. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  5338. v_data_qual_opts := v_data_qual_opts + 1;
  5339. exit;
  5340. end if;
  5341. else
  5342. exit;
  5343. end if;
  5344. end loop;
  5345. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  5346. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  5347. end;
  5348. -- Detect any Connector option features in use.
  5349. -- 1) Check for SAP modules
  5350. begin
  5351. v_feature_name := '"SAP application sources"';
  5352. v_feature_type := 'CONNECTORS';
  5353. if instr(v_version,v_tokyo_version) = 1 then
  5354. dbms_sql.parse(c_sap_connector,
  5355. 'select count(*)
  5356. from '|| v_schema||'.CMPFCOClasses '|| v_suffix ||
  5357. ' and s2_1 = ''CMPWBSAPInstalledModule''',
  5358. dbms_sql.native);
  5359. else
  5360. dbms_sql.parse(c_sap_connector,
  5361. 'select count(*)
  5362. from '|| v_schema||'.CMPWBSAPInstalledModule' || v_suffix,
  5363. dbms_sql.native);
  5364. end if;
  5365. dbms_sql.define_column(c_sap_connector, 1, v_objcnt);
  5366. rows_processed := dbms_sql.execute ( c_sap_connector );
  5367. loop -- Count SAP modules
  5368. if dbms_sql.fetch_rows(c_sap_connector) > 0 then
  5369. dbms_sql.column_value (c_sap_connector, 1, v_objcnt);
  5370. if v_objcnt > 0 then
  5371. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  5372. v_connector_opts := v_connector_opts + 1;
  5373. exit;
  5374. end if;
  5375. else
  5376. exit;
  5377. end if;
  5378. end loop;
  5379. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  5380. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  5381. end;
  5382. -- 2) Check for EBS/PSFT/SIEBEL modules
  5383. -- In Paris/Tokyo, EBS and PSFT are (weak) MIVInstalledModules.
  5384. -- Starting with Tahoe, they are DatabaseModules and may be
  5385. -- distinguished by their StrongTypeName.
  5386. -- SIEBEL modules are also DatabaseModules and first appear in Tahoe.
  5387. begin
  5388. v_feature_name := '"custom CMI adapters"';
  5389. v_feature_type := 'CONNECTORS';
  5390. if instr(v_version,v_tokyo_version) = 1 then
  5391. dbms_sql.parse(c_miv_connector,
  5392. 'select count(*)
  5393. from ' || v_schema || '.CMPFCOClasses '|| v_suffix ||
  5394. ' and s2_1 = ''CMPWeakModule''
  5395. and s2_4 = ''oracle.wh.repos.impl.application.CMPMIVInstalledModule''',
  5396. dbms_sql.native);
  5397. elsif instr(v_version,v_paris_vers) = 1 or
  5398. instr(v_version,v_oldtahoe_vers) = 1 then
  5399. dbms_sql.parse(c_miv_connector,
  5400. 'select count(*)
  5401. from '|| v_schema || '.CMPWeakModule' || v_suffix ||
  5402. v_where_and || 'instr(strongtypename,''CMPMIVInstalledModule'')>0',
  5403. dbms_sql.native);
  5404. else
  5405. dbms_sql.parse(c_miv_connector,
  5406. 'select count(*)
  5407. from ' || v_schema||'.CMPDatabaseModule' || v_suffix ||
  5408. v_where_and || '(instr(strongtypename,''CMPOracleEBSInstalledModule'') > 0 or
  5409. instr(strongtypename,''CMPPeoplesoftInstalledModule'') > 0 or
  5410. instr(strongtypename,''CMPSiebelInstalledModule'') > 0
  5411. )',
  5412. dbms_sql.native);
  5413. end if;
  5414. dbms_sql.define_column(c_miv_connector, 1, v_objcnt);
  5415. rows_processed := dbms_sql.execute ( c_miv_connector );
  5416. loop -- Count MIV modules.
  5417. if dbms_sql.fetch_rows(c_miv_connector) > 0 then
  5418. dbms_sql.column_value (c_miv_connector, 1, v_objcnt);
  5419. if v_objcnt > 0 then
  5420. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type || ',' || v_objcnt);
  5421. v_connector_opts := v_connector_opts + 1;
  5422. exit;
  5423. end if;
  5424. else
  5425. exit;
  5426. end if;
  5427. end loop;
  5428. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'FEATURES,' || SQLCODE || ',' || SQLERRM || ',' ||
  5429. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id || ',' || v_feature_name || ',' || v_feature_type);
  5430. end;
  5431. --============================================================== LOCATIONS =================================================================
  5432. -- collect even if no features have been found
  5433. if (1=1 or v_enterprise_opts > 0 or v_data_qual_opts > 0 or v_connector_opts > 0) then
  5434. begin
  5435. dbms_output.put_line('');
  5436. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'LOCATIONS~HEADER,SQLCODE,SQLERRM,schema,workspace_owner,workspace_name,workspace_id,' ||
  5437. 'location_name,connection_user,host,port,service_name');
  5438. if instr(v_version,v_tokyo_version) = 1 then
  5439. dbms_sql.parse(c_loc_report,
  5440. 'select locname, connuser, host, servicename, NVL(port,''1521'') as port
  5441. from (select loc.s2_3 as locname, loc.i_1 as locid, spv.s3_4 as connuser, sp1.s3_4 as host, sp2.s3_4 as servicename
  5442. from '|| v_schema ||'.CMPFCOClasses loc, ' ||
  5443. v_schema ||'.CMPSCOPrpClasses spv, '||
  5444. v_schema ||'.CMPSCOPrpClasses sp1, '||
  5445. v_schema ||'.CMPSCOPrpClasses sp2 '||
  5446. 'where loc.' || v_wksp_cond ||
  5447. ' and loc.s2_1 in (''CMPLogicalLocation'',''CMPRuntimeLocation'')
  5448. and loc.i_1 = spv.r_15(+)
  5449. and spv.' || v_wksp_cond ||
  5450. ' and spv.s2_1 = ''CMPStringPropertyValue''
  5451. and ''CMPLocation_ConnectAsUser'' = spv.s4_1(+)
  5452. and loc.i_1 = sp1.r_15(+)
  5453. and sp1.' || v_wksp_cond ||
  5454. ' and sp1.s2_1 = ''CMPStringPropertyValue''
  5455. and ''CMPLocation_Host'' = sp1.s4_1(+)
  5456. and loc.i_1 = sp2.r_15(+)
  5457. and sp2.' || v_wksp_cond ||
  5458. ' and sp2.s2_1 = ''CMPStringPropertyValue''
  5459. and ''CMPLocation_ServiceName'' = sp2.s4_1(+)
  5460. ) a,
  5461. (select loc.i_1 as locid, sp3.s3_4 as port
  5462. from '|| v_schema || '.CMPFCOClasses loc, ' ||
  5463. v_schema || '.CMPSCOPrpClasses sp3 '||
  5464. 'where loc.' || v_wksp_cond ||
  5465. ' and loc.s2_1 in (''CMPLogicalLocation'',''CMPRuntimeLocation'')
  5466. and loc.i_1 = sp3.r_15(+)
  5467. and sp3.' || v_wksp_cond ||
  5468. ' and sp3.s2_1 = ''CMPStringPropertyValue''
  5469. and ''CMPLocation_Port'' = sp3.s4_1(+)
  5470. ) b
  5471. where a.locid = b.locid(+)
  5472. order by locname ',
  5473. dbms_sql.native);
  5474. elsif instr(v_version,v_paris_vers) = 1 then
  5475. dbms_sql.parse(c_loc_report,
  5476. 'select loc.name, spv.value as connuser, sp1.value as host, sp2.value as servicename, nvl(sp3.value,''1521'') as port '||
  5477. 'from '|| v_schema||'.cmplocation' || v_sfx || ' loc, ' ||
  5478. v_schema ||'.cmpstringpropertyvalue' || v_sfx || ' spv, ' ||
  5479. v_schema ||'.cmpstringpropertyvalue' || v_sfx || ' sp1, ' ||
  5480. v_schema ||'.cmpstringpropertyvalue' || v_sfx || ' sp2, ' ||
  5481. v_schema ||'.cmpstringpropertyvalue' || v_sfx || ' sp3 ' ||
  5482. 'where loc.elementid = spv.propertyowner(+)
  5483. and ''CMPLocation_ConnectAsUser'' = spv.logicalname(+)
  5484. and loc.elementid = sp1.propertyowner(+)
  5485. and ''CMPLocation_Host'' = sp1.logicalname(+)
  5486. and loc.elementid = sp2.propertyowner(+)
  5487. and ''CMPLocation_ServiceName'' = sp2.logicalname(+)
  5488. and loc.elementid = sp3.propertyowner(+)
  5489. and ''CMPLocation_Port'' = sp3.logicalname(+)
  5490. order by loc.name ',
  5491. dbms_sql.native);
  5492. else
  5493. dbms_sql.parse(c_loc_report,
  5494. 'select locname, connuser, host, servicename, NVL(port,''1521'') as port
  5495. from (select loc.name as locname, loc.elementid as locid, spv.value as connuser, sp1.value as host, sp2.value as servicename
  5496. from '|| v_schema || '.cmplocation' || v_sfx || ' loc
  5497. left join ' || v_schema || '.cmpstringpropertyvalue' || v_sfx || ' spv on loc.elementid = spv.propertyowner
  5498. and ''CMPLocation_ConnectAsUser'' = spv.logicalname
  5499. left join ' || v_schema || '.cmpstringpropertyvalue' || v_sfx || ' sp1 on loc.elementid = sp1.propertyowner
  5500. and ''CMPLocation_Host'' = sp1.logicalname
  5501. left join ' || v_schema || '.cmpstringpropertyvalue' || v_sfx || ' sp2 on loc.elementid = sp2.propertyowner
  5502. and ''CMPLocation_ServiceName'' = sp2.logicalname
  5503. where loc.' || v_wksp_cond || '
  5504. and spv.' || v_wksp_cond || '
  5505. and sp1.' || v_wksp_cond || '
  5506. and sp2.' || v_wksp_cond || '
  5507. ) a
  5508. left join (select loc.elementid as locid, sp3.value AS port
  5509. from ' || v_schema || '.cmplocation' || v_sfx || ' loc
  5510. left join ' || v_schema || '.cmpstringpropertyvalue' || v_sfx || ' sp3 on loc.elementid = sp3.propertyowner
  5511. and ''CMPLocation_Port'' = sp3.logicalname
  5512. where loc.' || v_wksp_cond || '
  5513. and sp3.' || v_wksp_cond || '
  5514. ) b on a.locid = b.locid
  5515. order by locname',
  5516. dbms_sql.native);
  5517. end if;
  5518. dbms_sql.define_column(c_loc_report, 1, v_locname, 255);
  5519. dbms_sql.define_column(c_loc_report, 2, v_connuser, 4000);
  5520. dbms_sql.define_column(c_loc_report, 3, v_host, 4000);
  5521. dbms_sql.define_column(c_loc_report, 4, v_servicename, 4000);
  5522. dbms_sql.define_column(c_loc_report, 5, v_port,4000);
  5523. v_objcnt := 0;
  5524. rows_processed := dbms_sql.execute ( c_loc_report );
  5525. loop -- Count locations
  5526. if dbms_sql.fetch_rows(c_loc_report) > 0 then
  5527. dbms_sql.column_value (c_loc_report, 1, v_locname);
  5528. dbms_sql.column_value (c_loc_report, 2, v_connuser);
  5529. dbms_sql.column_value (c_loc_report, 3, v_host);
  5530. dbms_sql.column_value (c_loc_report, 4, v_servicename);
  5531. dbms_sql.column_value (c_loc_report, 5, v_port);
  5532. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'LOCATIONS,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id
  5533. || ',' || v_locname || ',' || v_connuser || ',' || v_host || ',' || v_port || ',' || v_servicename);
  5534. v_objcnt := v_objcnt + 1;
  5535. else
  5536. exit;
  5537. end if;
  5538. end loop;
  5539. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'LOCATIONS,' || SQLCODE || ',' || SQLERRM || ',' ||
  5540. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id);
  5541. end;
  5542. -- print mapings with TLO enabled --
  5543. begin
  5544. if v_tlo_report_details = true then
  5545. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'MAPPINGS_TLP~HEADER,SQLCODE,SQLERRM,schema,workspace_owner,workspace_name,workspace_id,
  5546. description,location');
  5547. if instr(v_version,v_tokyo_version) = 1 then
  5548. dbms_sql.parse(c_map_operator,
  5549. 'select s2_3
  5550. from ' || v_schema||'.CMPFCOClasses
  5551. where i_1 in (select distinct r_11
  5552. from '|| v_schema ||'.CMPSCOPRPCLASSES '|| v_suffix ||
  5553. ' and s2_1 in (''CMPStringPropertyValue'')
  5554. and s4_1=''MAP.TARGET_LOAD_ORDER'' and ((s3_4 is not null) AND instr(s3_4,'','') > 0)'||
  5555. ' and r_11 not in (select distinct r_15
  5556. from '|| v_schema || '.CMPSCOPRPCLASSES '||v_suffix||
  5557. ' and s2_1 in (''CMPPhysicalObject'')
  5558. and i_1 in (select r_11
  5559. from ' || v_schema || '.CMPSCOPRPCLASSES ' || v_suffix ||
  5560. ' and s2_1 in (''CMPStringPropertyValue'')
  5561. and s4_1 like ''%USETLO'' and s3_4=''false''
  5562. )
  5563. )
  5564. MINUS
  5565. select distinct r_11
  5566. from '|| v_schema || '.CMPSCOPRPCLASSES' || v_sfx||' pv,
  5567. (select i_1,s2_4
  5568. from '|| v_schema||'.CMPSCOMapClasses '|| v_suffix||
  5569. v_where_and||' s2_1 in (''CMPMapOperator'')
  5570. and (instr(s2_4,''Dimension'')>0)
  5571. ) op
  5572. where pv.r_15=op.i_1
  5573. AND s4_1 = ''SCE.PARMETERS.LOADTYPE'' and (s3_4 in (''TYPE1'',''TYPE2'',''TYPE3''))
  5574. and s2_1 in (''CMPStringPropertyValue'')
  5575. minus
  5576. select i_1
  5577. from ' || v_schema || '.CMPFCOClasses ' || v_suffix ||
  5578. ' and s2_1 = ''CMPDataRuleMap''
  5579. ) ',
  5580. dbms_sql.native);
  5581. elsif instr(v_version,v_paris_vers) = 1 then
  5582. dbms_sql.parse(c_map_operator,
  5583. 'select name
  5584. from '|| v_schema||'.cmpmap'|| v_suffix||
  5585. v_where_and || ' elementid in (select distinct firstclassobject
  5586. from ' || v_schema|| '.CMPStringPropertyvalue'|| v_suffix||
  5587. v_where_and ||' logicalname=''MAP.TARGET_LOAD_ORDER''
  5588. and ((value is not null)
  5589. AND instr(value,'','') > 0
  5590. )
  5591. and firstclassobject not in (select firstclassobject
  5592. from ' || v_schema || '.cmpstringpropertyvalue'|| v_suffix ||
  5593. v_where_and || ' logicalname like ''%USETLO'' and value=''false''
  5594. )
  5595. MINUS
  5596. select distinct firstclassobject
  5597. from '|| v_schema ||'.CMPStringPropertyvalue' || v_sfx || ' pv,
  5598. (select elementid, strongtypename
  5599. from '|| v_schema || '.CMPMapOperator' || v_suffix ||
  5600. v_where_and || ' (instr(strongtypename,''Dimension'')>0)
  5601. ) op
  5602. where pv.propertyowner=op.elementid AND LOGICALNAME = ''SCE.PARMETERS.LOADTYPE'' and (VALUE in (''TYPE1'',''TYPE2'',''TYPE3''))
  5603. MINUS
  5604. select elementid
  5605. from ' || v_schema || '.CMPDataRuleMap'|| v_suffix || ')',
  5606. dbms_sql.native);
  5607. else
  5608. dbms_sql.parse(c_map_operator,
  5609. 'select name
  5610. from '|| v_schema || '.cmpmap_r
  5611. where elementid in (select distinct firstclassobject
  5612. from '|| v_schema || '.CMPStringPropertyvalue'|| v_sfx || ' pv,
  5613. (select distinct logicalobject,value
  5614. from '|| v_schema || '.cmpphysicalobject_r cpo, ' || v_schema ||'.cmpstringpropertyvalue_r cpv
  5615. where cpo.'|| v_wksp_cond ||'
  5616. and cpv. '||v_wksp_cond ||
  5617. ' and cpo.elementid=cpv.firstclassobject
  5618. and cpv.logicalname like ''%USETLO''
  5619. ) po,
  5620. (select value from ' || v_schema || '.cmpprimitivemodelattribute_r
  5621. where name=''DEFAULTVALUE''
  5622. and attributetypefqn like ''%TARGET_LOAD_ORDER%''
  5623. ) dv
  5624. where ' || v_wksp_cond || '
  5625. and logicalname=''MAP.TARGET_LOAD_ORDER'' and ((pv.value is not null) AND instr(pv.value,'','') > 0)
  5626. and firstclassobject = po.logicalobject(+) and (po.value = ''true'' or dv.value=''true'')
  5627. MINUS
  5628. select distinct firstclassobject
  5629. from '|| v_schema ||'.CMPStringPropertyvalue' || v_sfx ||' pv,
  5630. (select elementid,strongtypename
  5631. from '|| v_schema || '.CMPMapOperator'|| v_suffix ||
  5632. v_where_and || ' (instr(strongtypename,''Dimension'')>0)
  5633. ) op
  5634. where pv.propertyowner=op.elementid AND LOGICALNAME = ''SCE.PARMETERS.LOADTYPE'' and (VALUE in (''TYPE1'',''TYPE2'',''TYPE3''))
  5635. MINUS
  5636. select elementid
  5637. from ' || v_schema || '.CMPDataRuleMap' || v_suffix ||
  5638. ')',
  5639. dbms_sql.native);
  5640. end if;
  5641. dbms_sql.define_column(c_map_operator, 1, v_locname, 255);
  5642. rows_processed := dbms_sql.execute ( c_map_operator );
  5643. loop -- Count locations
  5644. if dbms_sql.fetch_rows(c_map_operator) > 0 then
  5645. dbms_sql.column_value (c_map_operator, 1, v_locname);
  5646. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'MAPPINGS_TLO,,,' || v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id ||
  5647. ',"Mapping with Target Load Order options",' || v_locname);
  5648. else
  5649. exit;
  5650. end if;
  5651. end loop;
  5652. end if;
  5653. exception when others then dbms_output.put_line(v_grep_me_prefix || v_option_name || 'MAPPINGS_TLO,' || SQLCODE || ',' || SQLERRM || ',' ||
  5654. v_schema || ',' || v_workspace_owner || ',' || v_workspace_name || ',' || v_workspace_id);
  5655. end;
  5656. end if;
  5657. END LOOP owb_workspace_loop;
  5658. END LOOP owb_schema_loop;
  5659. dbms_sql.close_cursor (c_installed_ver);
  5660. dbms_sql.close_cursor (c_workspaces);
  5661. dbms_sql.close_cursor (c_deployment);
  5662. dbms_sql.close_cursor (c_execution);
  5663. dbms_sql.close_cursor (c_pluggable_map);
  5664. dbms_sql.close_cursor (c_transportable);
  5665. dbms_sql.close_cursor (c_schedule);
  5666. dbms_sql.close_cursor (c_scd_dimension);
  5667. dbms_sql.close_cursor (c_user_def_FCO);
  5668. dbms_sql.close_cursor (c_user_def_SCO);
  5669. dbms_sql.close_cursor (c_map_operator);
  5670. dbms_sql.close_cursor (c_pf_activity);
  5671. dbms_sql.close_cursor (c_icon_set);
  5672. dbms_sql.close_cursor (c_streams);
  5673. dbms_sql.close_cursor (c_spatial);
  5674. dbms_sql.close_cursor (c_data_profile);
  5675. dbms_sql.close_cursor (c_data_rule);
  5676. dbms_sql.close_cursor (c_data_auditor);
  5677. dbms_sql.close_cursor (c_miv_connector);
  5678. dbms_sql.close_cursor (c_sap_connector);
  5679. dbms_sql.close_cursor (c_loc_report);
  5680. dbms_sql.close_cursor (c_hetero);
  5681. dbms_sql.close_cursor (c_webservice);
  5682. dbms_sql.close_cursor (c_copybook);
  5683. dbms_sql.close_cursor (c_dimcube);
  5684. dbms_sql.close_cursor (c_realtime);
  5685. dbms_sql.close_cursor (c_chunk);
  5686. dbms_sql.close_cursor (c_obiee);
  5687. close schema_array;
  5688. if v_schema_cnt = 0 then
  5689. dbms_output.put_line('');
  5690. dbms_output.put_line(v_grep_me_prefix || v_option_name || 'OWB_REPOS,,,NO,There are NO OWB repositories on this instance,');
  5691. end if;
  5692. END;
  5693. /
  5694. PROMPT
  5695. select 'Review Lite Script runtime:' " ",
  5696. (sysdate - to_date('&SYSDATE_START', 'YYYY-MM-DD_HH24:MI:SS'))*24*60*60 " ",
  5697. 'seconds' " "
  5698. from dual;
  5699. PROMPT END OF SCRIPT
  5700. SPOOL OFF
  5701. PROMPT ===================================================================================================*
  5702. PROMPT CAPTURING FILE INTEGRITY INFORMATION
  5703. define OUTF=*
  5704. define SUMF=*
  5705. col OUTF_ new_val OUTF noprint
  5706. col SUMF_ new_val SUMF noprint
  5707. select replace('&&OUTPUT_PATH.*.csv' , decode('&PSEP', '/', '\', '/'), '&PSEP') as OUTF_,
  5708. replace('&&OUTPUT_PATH.summary.csv', decode('&PSEP', '/', '\', '/'), '&PSEP') as SUMF_
  5709. from dual;
  5710. SET TERMOUT OFF
  5711. -- prepare powershell scripts to generate md5 digest
  5712. SPOOL md5.ps1
  5713. PROMPT $v_path = $args[0]
  5714. PROMPT cd $v_path
  5715. PROMPT
  5716. PROMPT Get-ChildItem *.csv |
  5717. PROMPT Foreach-Object {
  5718. PROMPT
  5719. PROMPT $expHWfilename=$_.FullName
  5720. PROMPT $fullPath = Resolve-Path $expHWfilename
  5721. PROMPT $md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
  5722. PROMPT $hash = ([System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($fullPath))))
  5723. PROMPT $hash=$hash.ToLower()
  5724. PROMPT $hash -replace "-", "" | Add-Content *summary.csv
  5725. PROMPT
  5726. PROMPT }
  5727. PROMPT
  5728. SPOOL OFF
  5729. -- prepare powershell scripts to generate sha1 digest
  5730. SPOOL sha1.ps1
  5731. PROMPT $v_path = $args[0]
  5732. PROMPT cd $v_path
  5733. PROMPT
  5734. PROMPT Get-ChildItem *.csv |
  5735. PROMPT Foreach-Object {
  5736. PROMPT
  5737. PROMPT $expHWfilename=$_.FullName
  5738. PROMPT $fullPath = Resolve-Path $expHWfilename
  5739. PROMPT $sha1 = New-Object -TypeName System.Security.Cryptography.SHA1CryptoServiceProvider
  5740. PROMPT $sha1hash = ([System.BitConverter]::ToString($sha1.ComputeHash([System.IO.File]::ReadAllBytes($fullPath))))
  5741. PROMPT $sha1hash=$sha1hash.ToLower()
  5742. PROMPT $sha1hash -replace "-", "" | Add-Content *summary.csv
  5743. PROMPT
  5744. PROMPT }
  5745. SPOOL OFF
  5746. SET TERMOUT ON
  5747. host echo ========================================================== > fii_err.txt
  5748. host echo File Integrity Information >> &&SUMF
  5749. host echo ========================================================== >> &&SUMF
  5750. host echo === File size >> &&SUMF
  5751. host echo ========================================================== >> &&SUMF
  5752. host echo === dir >> &&SUMF
  5753. host dir /o:n &&OUTF ReviewLite*.* >> &&SUMF 2>> fii_err.txt
  5754. host echo === ls -l >> &&SUMF
  5755. host ls -l &&OUTF ReviewLite*.* >> &&SUMF 2>> fii_err.txt
  5756. host echo ========================================================== >> &&SUMF
  5757. host echo === MD5 and SHA-1 checksums - if possible >> &&SUMF
  5758. host echo === Please ignore errors >> &&SUMF
  5759. host echo ========================================================== >> &&SUMF
  5760. host echo === md5sum >> &&SUMF
  5761. host /usr/bin/md5sum &&OUTF ReviewLite*.* >> &&SUMF 2>> fii_err.txt
  5762. host powershell.exe -ExecutionPolicy Bypass -F "md5.ps1" ".\&&SCRIPT_SD\&&HOST_NAME._&&INSTANCE_NAME." >> &&SUMF 2>> fii_err.txt
  5763. host echo === sha1sum >> &&SUMF
  5764. host /usr/bin/sha1sum &&OUTF ReviewLite*.* >> &&SUMF 2>> fii_err.txt
  5765. host powershell.exe -ExecutionPolicy Bypass -F "sha1.ps1" ".\&&SCRIPT_SD\&&HOST_NAME._&&INSTANCE_NAME." >> &&SUMF 2>> fii_err.txt
  5766. host echo ========================================================== >> &&SUMF
  5767. host echo Debug Info: '&PWD' '&RMDEL' '&PSEP' '&OUTF' >> &&SUMF
  5768. host echo ========================================================== >> &&SUMF
  5769. host &RMDEL fii_err.txt md5.ps1 sha1.ps1
  5770. PROMPT ===================================================================================================*
  5771. PROMPT THIS SECTION IS NOT SPOOLED INTO ANY FILE
  5772. PROMPT CHECKING DEPENDENCIES ...
  5773. SET HEADING ON
  5774. col P noprint
  5775. col IMPORTANT format a100
  5776. select * from
  5777. (
  5778. select
  5779. -1 as P,
  5780. 'Please make sure that CDB$ROOT container and all the open PLUGGABLE DATABASES (PDBs) are collected' as IMPORTANT
  5781. from dual
  5782. union all
  5783. select a.CON_ID,
  5784. ' - ' || a.NAME || ' with SERVICE_NAME=' || b.NETWORK_NAME
  5785. from V$CONTAINERS a
  5786. join CDB_SERVICES b on a.CON_ID = b.CON_ID and b.NETWORK_NAME is not null and b.NETWORK_NAME not like '%XDB'
  5787. where a.NAME!='PDB$SEED' -- seed PDB is not needed
  5788. and a.OPEN_MODE in ('READ WRITE', 'READ ONLY') -- PDB is open
  5789. and sys_context('USERENV', 'CON_NAME')='CDB$ROOT' -- PDB list is visible only from CDB$ROOT
  5790. )
  5791. where exists (select 1 from V$DATABASE where CDB = 'YES') -- must be a container database
  5792. order by 1, 2;
  5793. PROMPT ...
  5794. select * from
  5795. (
  5796. select
  5797. -2 as P,
  5798. 'Please make sure that all the DATABASE TARGETS are collected:' as IMPORTANT
  5799. from dual
  5800. union all
  5801. select
  5802. -1 as P,
  5803. ' - ' || TARGET_NAME || ' on host ' || HOST_NAME
  5804. from SYSMAN.MGMT_TARGETS
  5805. where TARGET_TYPE like '%database%'
  5806. )
  5807. where 1 < (select count(*) from SYSMAN.MGMT_TARGETS where TARGET_TYPE like '%database%') -- not needed for OEM database control
  5808. order by 1, 2;
  5809. PROMPT
  5810. PROMPT ===================================================================================================*
  5811. EXIT