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