Problem: Objects become invalid so easily

Hi All,
We are running Oracle 9i Standard Edition, which was downgraded from the Enterprise Edition, because they want to save $50K/year.
I have noticed even in the enterprise edition that some objects (sprocs, functions, triggers, packages) could become invalid for no reason (no schema changes and no changes in some sprocs/functions called by some others). I have googled this problem and found a few tips on the the internet and at least one seasoned DBA said Oracle objects can become invalid for no obvious reasons. After the downgrade, things got worse. The DBA runs a script to compile all packages, sprocs, functions, triggers once every hour. Then things got even worse. But I think the DBA script did not run more than once in a row to resolve some dependency issues. So now the DBA runs his script every two minutes. The problem is gone, but is there any better way to do this? Or should it happen in the first place? I figure that if Oracle runs like this, it should be out of business soon, because the MS SQL guys say they never have to explicitly re-compile invalid obejcts. At first the DBA thought that when PowerBuilder calls the sprocs, the sprocs do not re-compile because Sybase does not know how to program against Oracle. Then one day I was using SQL*Plus to run the sprocs and got the explicit error message for invalid objects and then the DBA was convinced otherwise.
Thanks.
Ben

Thanks a lot. Yes you are right. The re-complie did cause other objects to be invalid. that's why I asked to dba to run his script more than once in a row. Now the problem seems to be gone. But here is what I found at http://www.dbazine.com/oracle/or-articles/hordila2. It is true when a package or sproc becomes invalid, they often times do not auto re-compile. See his comments on that.
Application Malfunctions and Data InconsistenciesPart of maintaining quick response times for the database is making sure that as many objects as possible have a valid status. At least frequently used objects should not be invalid. Some objects (views, triggers, procedures, functions, packages, package bodies) can become invalid under certain circumstances: after massive data loads, imports, batches, even without explicit schema changes, after schema restructuring (drop, re-name, alter of objects). Very often, developers leave behind on purpose lots of invalid objects, to serve as a library of source code for future needs, or as a source code backup for the production objects. Some of these events are thought of as normal, or maybe bad style, while others are treated as bugs.
Anyway, if this happens, applications may stop working at all or may start working slower, incorrectly or incompletely. Mal-functioning triggers calling invalid procedures, etc., for example, can lead to data inconsistencies, missed data propagation, etc. In a complex system, this is a serious situation and may go undetected for some length of time.
Failed RecompilingFor some objects (views, triggers), the Oracle system may attempt automatically to recompile and validate them at the first run. This will slow the first runs of the application, but the system will function correctly, and be faster on the next runs. For stored programs, most of the time, this auto-recompile does not happen. The DBA needs to detect and recompile them as soon as possible.
Some objects need to be re-developed/edited for references to be successfully recompiled and to become valid again. And other objects may
Ben

Similar Messages

  • Time when Oracle object become invalid

    We can find if there are invalid objects in the database.
    But is there a way to find when the object become invalid. I am interested in finding the time when object become invalid.
    Let me know if Oracle can tell this information.
    Thank you.
    --harvey                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

    Hi harvey;
    Please check below thread:
    Determine when objects become invalid
    Determine when objects become invalid
    http://stackoverflow.com/questions/1467604/determining-when-an-oracle-database-object-became-invalid
    Also see:
    http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/general007.htm
    Regard
    Helios

  • Object Fields Mysteriously Becoming Invalid

    I am not exactly sure what code to post with this considering the nature of what's going on, so I'll do my best to explain and then perhaps I can provide code based on your responses.
    When my application loads in the AppDelegate I create 3 objects of the "Item" type and then create an array out of those objects and add that array to an ItemListController which has a property for an NSMutableArray. The program then loads a UINavigationController with each of those objects in it being drawn with a subClass of UITableViewCell. As it stands now, if I click on any one of those objects more than 3 times, the object itself does not become nil, but all of the fields within it do.
    - (void)applicationDidFinishLaunching:(UIApplication *)application {
    Item *sword = [[Item alloc] initWithName:@"Sword" description:@"This is a sword"];
    //sword.itemPrice = (int *)524;
    Item *shield = [[Item alloc] initWithName:@"Shield" description:@"This is a shield"];
    //shield.itemPrice = (int *)322;
    Item *subligar = [[Item alloc] initWithName:@"Subligar" description:@"This is a subligar"];
    //subligar.itemPrice = (int *)1034;
    [subligar setImageWithPath:@"Hello.png"];
    if(self.itemListController == nil) {
    ItemListController *controller = [[ItemListController alloc] init];
    self.itemListController = controller;
    [controller release];
    NSMutableArray *itemArray = [[NSMutableArray alloc] initWithObjects:sword, shield, subligar, nil];
    self.itemListController.items = itemArray;
    [itemArray release];
    // Configure and show the window
    [window addSubview:[navigationController view]];
    [window makeKeyAndVisible];
    The click handler of my TableView right now simply calls the AppDelegate's instance of ItemListController and then gets the object back from the items array at the index at which the user clicked. From there, I set a few properties and load a view tailored to that Item.
    Presently, all of the logic that sets properties with the Item and loads the view for that object is commented out and so the only behavior occurring is the Item being retrieved from the AppDelegate's ItemListController.items and then being stored in a temporary object which is later released. But like I said above, *after 3 requests for my object all of its fields become invalid*. I have no idea what is causing it because the object itself is never being released within that time. Below is the code from the click event of the table cell:
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    calls++;
    NSLog(@"Hit Count: %d", calls);
    iPhoneHelloWorldAppDelegate *appDelegate = (iPhoneHelloWorldAppDelegate *)[[UIApplication sharedApplication] delegate];
    Item *item = (Item *)[appDelegate.itemListController.items objectAtIndex:indexPath.row];
    //lastItem = item;
    if(self.itemView == nil) {
    ItemViewController *viewController = [[ItemViewController alloc] initWithNibName:@"ItemViewController" bundle:[NSBundle mainBundle]];
    self.itemView = viewController;
    [viewController release];
    if(calls > 3) {
    NSLog(@"item retainCount = %d", [item retainCount]);
    [item release];
    Here's a snapshot from the debugger after my Item object dies:
    http://img514.imageshack.us/img514/4567/picture2az5.png

    Hi,
    Item *item = (Item *)[appDelegate.itemListController.items objectAtIndex:indexPath.row];
    //lastItem = item;
    if(self.itemView == nil) {
    ItemViewController *viewController = [[ItemViewController alloc] initWithNibName:@"ItemViewController" bundle:[NSBundle mainBundle]];
    self.itemView = viewController;
    [viewController release];
    if(calls > 3) {
    NSLog(@"item retainCount = %d", [item retainCount]);
    // Why do you relase item? I don't see any retain or method wich increases the retain-count.
    [item release];

  • Object library invalid or contains references to object definitions that could not be found problem

    Hello,
    Yesterday I got the following error on the server: "object library invalid or contains references to object definitions that could not be found problem".
    I found this documentation, followed the steps and all was OK on the server:
    http://support.microsoft.com/kb/2703186/en-us
    https://social.msdn.microsoft.com/Forums/office/en-US/e94f2fc3-71f1-4dad-bbf1-37f906e28e8e/object-library-invalid-or-contains-references-to-object-definitions-that-could-not-be-found?forum=exceldev
    Our server is used to do batch processing for refreshing our excel's. This morning, after the excel's got refreshed on the server, I've got this error on the
    client computers (everything works fine on the server computer). I did the steps above on the client computers, but the problem still persists.
    It looks like there is a difference in version between server and client.
    If I do the refreshing on the same computer there is no problem. But when the server does the refreshing and I try to open it on a different computer, I get this error.
    The security update has been removed from the computer, but I can't use my excel's anymore.
    Does any one have some advice for me?
    Best regards,
    Wouter

    Hi Wouter,
    Thanks for the further explaintation.
    According to the description, the issue seems that the Workboook on the client side(with lower Excel version) couldn't run the VBA after it opened by server(higher version Excel application).
    If I understood correctly, that sounds that the issue is relative to the specific version of Excel product or the updates.
    I suggest you contacting Microsoft support to raise an incident so that our engineer could work closely with him to identify the root cause and resolve this issue as soon as possible.
    If the support engineer determines that the issue is the result of a bug the service request will be a no-charge case and you won't be charged.
    Please visit the below link to see the various paid support options that are available to better meet your needs.
    http://support.microsoft.com/default.aspx?id=fh;en-us;offerprophone
    Regards & Fei
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Objects using dblinks become invalid

    I am using numerous functions / procedures / synonyms which point to other databases via dblinks. All was well when the dbLinks / synonyms were public. Last week I was asked to put up a test schema on the same database so I duly made all the public dblinks & synonyms private. All seemed well, everything compiled so I made it live.
    Now we get intermittent problems whereby the procedures using the synonyms & dblinks suddenly become invalid. They refuse to automatically compile, causing errors in the applications using the database. SOmetimes they automatically recompile after a time, sometimes they refuse to compile until I do them manually in SQL developer.
    anybody have any idea why this should be happening?
    Main database is Oracle Enterprise 11.1.0.7 64 bit, connecting to one of same version, one of 10.2.0.4 64 bit. All running on AIX 6.1.

    Hi,
    Same thing is happening here.
    DB A with PROC_SP (Strore procedure)
    DB B with 2 users; user TEST1 referencing [email protected] and user TEST2 referencing also [email protected]
    When compiling code on user TEST1 that uses [email protected], the code on TEST2 becames invalid, and vice-versa.
    Did you solve your problem ?
    My Database version is 11.2.0.2.0, both DB (A and B) use the same version (Exadata with 11R2)
    Thanks in advance.

  • Why Synonym becomes INVALID when changes are made on the related object ?

    Hi all,
    WHY SYNONYMS becomes invalid when changes are made on related OBJECTS ?
    Is there any specific reasons for this.?
    Is there any method or procedures to make the synonym VALID as soon as the we perform any alteration on the related object.
    Thanks
    Himabala

    Synonym will be validated when it is accessed, no need to take an action.

  • Problem of Materialized view become invalid

    Hi,
    I know that because of DML or DDL operation My Materialized view invalid.
    But I want to know the from which table it become invalid.
    Is there any dictionary view from which I can find ?

    Hi,
    I know that because of DML or DDL operation My Materialized view invalid.
    But I want to know the from which table it become invalid.
    Is there any dictionary view from which I can find ?

  • Combination of packages repeteiively becoming invalid

    Hello all,
    We are using Oracle 9.2.0.7.0 on Toad and SQL Developer on a database with a vast number of packages. At the moment for no clear reason 7 packages repetitively become invalid for no transparent reason. When we recompile using dbms_utility.compile_schema all object will reinstate themselves, and become valid. The next moment you look and want to use the packages they will be invalid again.
    We have tried to compare the packages with a comparable database, where the same revisions of the packages exist. On the test database these are correct and valid, on the acceptance database they (the 7 mentioned before) fall over.
    Can anybody give us any indications on where to find the problem? We have tried recompiling the forms that are part of the applications, but these are all valid. We are out of ideas now.
    Any help is greatly appreciated.
    Thanks,
    -victorbax-

    http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/general007.htm#
    This link might give you a clue on what might have happend inside
    http://it.toolbox.com/blogs/database-solutions/keep-track-of-oracle-object-dependences-2521
    Edited by: Maran Viswarayar on Sep 24, 2008 4:28 PM

  • When do VI and queue references become invalid?

    Hi all,
    I have a fairly complicated problem, so please bear with me.
    1)  I have a reentrant SubVI (let's call it VI "Assign") that has an input cluster of (VI ref, queue ref) (let's call the cluster type "Refs").  If the VI ref is invalid (first execution), the VI ref and queue ref are assigned values and are passed on as an output cluster of same type.  (The VI does other things too, but for simplicity only this is important.)
    2)  The VI that calls VI "Assign" (let's call it VI "Store") is not reentrant and has a local variable of type "Refs" that is wired to the input and output of VI "Assign".  This VI effectively stores the references.  The references returned by VI "Assign" are always valid right after the call, but after the problem condition described below, they are invalid at the start of all calls before they are passed to VI "Assign".
    3)  VI "Store" is called by multiple non-reentrant VIs, so the local variables of VI "Assign" retain their values (Has been tested and verified to retain their values).  The VI causing the problem in this case is a template VI of which multiple copies are launched (let's call it VI "Template").
    The problem is that the moment an instance of VI "Template" is closed, the queue reference becomes invalid, although the actual variant value of the reference remains the same.  The VI ref can become invalid or not, depending on small changes, but is always reproducible.  I assume there must be some similarity between VI and queue refs.  After spending some time researching, the Labview help states for the Open VI Ref component "If you do not close this reference, it closes automatically after the top-level VI associated with this function executes."  In this case I assumed it means that the moment the reentrant VI "Assign" finishes, the references will get cleared ??  So I made a non-reentrant VI (let's call it VI "NR Assign") that only assigns values to the references and VI "Assign" now calls this VI (It effectively does what I described VI "Assign" does).  I keep this VI alive by using it in a VI which never terminates and since it never terminates, the references should never become invalid.  Anyone still following?  This didn't solve the problem though.  If I reproduce the same scenario using only one instance of the template VI, it works just fine.  Furthermore, the VI and queue references are never closed, to aid analysis of the problem.  Can anyone shine some light on what happens when a template VI terminates?  Could this be the problem?
    Unfortunately I cannot include the code.
    Thank you whoever is able to make sense of this.
    Christie

    Christie wrote:
    Hi all,
    I have a fairly complicated problem, so please bear with me.
    1)  I have a reentrant SubVI (let's call it VI "Assign") that has an input cluster of (VI ref, queue ref) (let's call the cluster type "Refs").  If the VI ref is invalid (first execution), the VI ref and queue ref are assigned values and are passed on as an output cluster of same type.  (The VI does other things too, but for simplicity only this is important.)
    2)  The VI that calls VI "Assign" (let's call it VI "Store") is not reentrant and has a local variable of type "Refs" that is wired to the input and output of VI "Assign".  This VI effectively stores the references.  The references returned by VI "Assign" are always valid right after the call, but after the problem condition described below, they are invalid at the start of all calls before they are passed to VI "Assign".
    3)  VI "Store" is called by multiple non-reentrant VIs, so the local variables of VI "Assign" retain their values (Has been tested and verified to retain their values).  The VI causing the problem in this case is a template VI of which multiple copies are launched (let's call it VI "Template").
    The problem is that the moment an instance of VI "Template" is closed, the queue reference becomes invalid, although the actual variant value of the reference remains the same.  The VI ref can become invalid or not, depending on small changes, but is always reproducible.  I assume there must be some similarity between VI and queue refs.  After spending some time researching, the Labview help states for the Open VI Ref component "If you do not close this reference, it closes automatically after the top-level VI associated with this function executes."  In this case I assumed it means that the moment the reentrant VI "Assign" finishes, the references will get cleared ??  So I made a non-reentrant VI (let's call it VI "NR Assign") that only assigns values to the references and VI "Assign" now calls this VI (It effectively does what I described VI "Assign" does).  I keep this VI alive by using it in a VI which never terminates and since it never terminates, the references should never become invalid.  Anyone still following?  This didn't solve the problem though.  If I reproduce the same scenario using only one instance of the template VI, it works just fine.  Furthermore, the VI and queue references are never closed, to aid analysis of the problem.  Can anyone shine some light on what happens when a template VI terminates?  Could this be the problem?
    Unfortunately I cannot include the code.
    Thank you whoever is able to make sense of this.
    Christie
    All LabVIEW refnums do get deallocated automatically when the top-level VI in whose hierarchy the refnum was created goes idle (stops executing). You will have to make sure that the creation of a refnum is done inside a VI hierarchy that stays running for the entire time you want to use that refnum.
    Rolf Kalbermatter
    Message Edited by rolfk on 06-27-2007 11:52 AM
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • Object Class Invalid when downloading the pricing procedure from ECC to CRM

    Hi,
    I want to download the pricing procedure for that I have created the ZDNL_CUST_CND which contains only the following tablesT683, T683S, T683T and T683U.
    When I check in R3AM1 status is Red.
    The following Error have been found in SLG1
    •     Object class invalid
    •     Error in inbound data check
    Message no. CND_MAP120
    Diagnosis
    During the receiving inspection, serious errors were found in the consistency of the exchange object.
    System Response
    Data exchange is terminated
    •     Data exchange terminated     
    Message no. CND_MAP122
    Diagnosis
    Data exchange has been terminated due to serious errors. No exchanged data has been posted in the system.
    The following Error has been found in SMQ1
    •     R3AD_CONDITIONS     STOP
    Details of STOP
    Set by Host name: litldq; Transaction: ; Report: SAPMSSY1
    I have checked the connection, everything is perfect.
    What may be the problem?
    Thanks

    Hi,
      Please try to re-generate the adapter object (ZDNL_CUST_CND) services using trx.
    SMOGGEN
    . After this, try re-running the load.
    I assume that your CRM inbound mapping module are correctly coded. If the problem persists, try de-registering the R3AD_CONDITIONS inbound queue using trx.
    SMQR
    and then debugging the inbound queue from the same trx. after re-starting the load.
    Reward if this helps!
    Regards,
    Sudipta.

  • Object is invalid on object.parentStory.characters.item(i+1).fontStyle;

    Hey guys,
    I have an array where I save the contents of a textFrame, where "object" is the textFrame.
    textContent = object.contents;
    Then I have a for loop to loop  through all items. With
    if(i > 0)
    object.parentStory.characters.item(i-1).fontStyle.toString().toLowerCase();
    object.parentStory.characters.item(i).fontStyle.toString().toLowerCase();
    if(i < textContent.length-1)
    object.parentStory.characters.item(i+1).fontStyle.toString().toLowerCase();
    I am getting the previous, current and next styles. It's for xml purposes and with this I can add a "<b>" , "<i>", etc. tag for my objects. The problem occuring now is that on some point, object.parentStory.characters.item(i+1).fontStyle; returns "object is invalid".
    That being said, item(i+1) is valid. If I alert this, it says "object [character]". I tried to use if(object.parentStory.characters.item(i+1).hasOwnProperty('fontStyle')), but it didn't work. I don't know why it throws this error and I couldn't find any solution to this problem on the web.
    Has anybody experienced this?  Here is the complete code(without italic and bold italic):
    function spliceSlice(str, index, count, add) {
      return str.slice(0, index) + (add || "") + str.slice(index + count);
    function checkFontStyle(object){
        textContent = object.contents;
        for(i = 0; i < textContent.length; i++){
            style = object.parentStory.characters.item(i).fontStyle.toString().toLowerCase();
            if(i > 0)
                prevStyle = object.parentStory.characters.item(i-1).fontStyle.toString().toLowerCase();
            if(i < textContent.length - 1){
                nextStyle = object.parentStory.characters.item(i+1).fontStyle.toString().toLowerCase();
            if(style.indexOf('bold') > -1){
                if(prevStyle.indexOf('bold') > -1){
                else if(nextStyle.indexOf('bold') < -1){
                    textContent.spliceSlice(textContent, i, 0, '[/b]');
                else{
                    textContent = spliceSlice(textContent, i, 0, '[b]');
        return textContent;
    The desired behaviour would be, that if the current object has no "fontStyle" it should just skip this iteration.

    be carefull with var totalPages = parseInt(app.activeWindow.activePage.name);
    the pagename can be (for ex.) "MXIV", if you use roman numbering.
    use .documentOffset to be on the safe side.

  • After December 2014 update, Compile Error - calling Excel Objects Sub "Object library invalid or contains references to object definitions that could not be found"

    When try to call Sub in Excel Objects > SheetXX after the original xlsm is modified and saved by another user in diff machine, getting an error below and seems Excel cannot identify any subs exists in Sheet.
    Compile error:
    Object library invalid or contains references to object definitions that could not be found
    Note: it seems that this problem has been occurring After December 2014 update and still exists even after applying the fix:
    http://blogs.technet.com/b/the_microsoft_excel_support_team_blog/archive/2014/12/11/forms-controls-stop-working-after-december-2014-updates-.aspx)

    Hi Kwlee324,
    Thanks for sharing the workaround with us. It would be very helpful for others who have the same issue.
    Also I found a two useful links about the error message "Object library invalid or contains references to object definitions that could not be found":
    https://support.microsoft.com/kb/2703186
    http://blogs.msdn.com/b/vsod/archive/2009/06/05/visual-basic-6-controls-stop-working-after-security-advisory-960715.aspx
    Hope it is helpful.
    Regards & Fei
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • MATERIALIZED VIEW BECOMES INVALID AFTER REFRESH

    Hello All,
    I have wierd problem ,
    In my enviroinment we have a MATERIALIZED VIEW ,which is refreshed by a sheduled DBMS_SNAPSHOT.REFRESH Job post the refresh it becomes invalid and every time we have to compile it manually ,Could anybody help with a solution .Thanks a lot in Advance .
    DETAILS :
    ======
    VERSION:Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
    HOST: IBM AIX

    Is the MV part of a refresh group?
    Post the command and parameters used by the scheduled job to do the refresh as well as the parameters you use when you do it manually.

  • Problem in calling invalid stored procedures in pro*c

    Hi,
    we wrote a common package in pl/sql which would be used in pro*c and java programs. This common packages uses few tables, which are accessed by public synonyms and are not owned by the schema owning this package.
    We do switch the synonyms every day after loading. So if i have a table T1.
    i have one public synonym T1 which points to table T1. Also i have another table T2. One day the public synonym points to T1 table and on second day it points to T2.
    What is happening is after the loading of the table, the package body is becoming invalid.. Any further call to the package in pl/sql and java is working fine. In Pro*c, where we make 5 dedicated connections and retain those connections throughout, call to this invalid package is failing with the error message:
    06508, 00000, "PL/SQL: could not find program unit being called"
    We need to bounce our pro*c programs to avoid this problem. This pro*c program is multi threaded program ,which takes 5 oracle connections.
    Can anyone advice what would be the problem, which is happening only for pro*c programs? Was there any thing we have to do while connecting to the database??
    Thanks
    Giridhar

    This may be because PROC is maintaining and referring(Handle) the OLD package.
    Try the following code
    EXEC ORACLE OPTION (ORACA =YES);
    EXEC ORACLE OPTION (RELEASE_CURSOR=YES);
    Recreate the package thru PROC is another way of doing it.
    Closing the connections and re-establishing is one workaround.

  • PL/SQL Functions becoming 'invalid'

    We have created a set of functions which are used by
    applications and triggers within our system. Everything ran over
    the weekend and all triggers were operating and functions were
    performing as expected. Yesterday the it was noticed that one of
    the functions had become 'Invalid' which stopped the processing
    of the system. The function is invoked by a trigger on insert
    into a table.
    Does anyone know what would cause a function to go 'Invalid'
    like this?
    Thanks
    Jeff M.

    Hi,
    If you alter or modify the objects(DDL Operations), then the
    procedures, functions, views..etc will be invalid. And also it
    applies recursively,i.e,if these procedures and functions are
    referred in some other procedure and functions, they also will
    become invalid. So before applying a DDL operation on any object
    better find the it's references from DBA_dependencies and
    recompile them after the DDL operation.
    Regards,
    G. Rajakumar.

Maybe you are looking for

  • Select * from table not working with Oracle OBDC driver

    Hello, In our web development we have been using the MS ODBC for Oracle driver to connect to our Oracle db. We decided to try the Oracle ODBC driver because it supports the commandTimeout property in ASP which the MS driver does not. The problem I'm

  • IDOC for Equipment master

    Hi, I am new to IDOC concept and need to transfer Equipment master from a SAP system to non SAP system. please let me know the following: 1. Is there any standard message type and Idoc type available     for Equipment master ?? ( For example we have

  • WiFi 802.1X Security

    Does anyone know when the Aironet access points will be able to use any nominated VLAN as the management VLAN instead of VLAN 1? Currently we have a successful dot1X (EAP-TLS) implementation running but I am a little concerned with having to use VLAN

  • Refine edge not working PSE 11

    Hi, I'm getting very frustrated because I cannot figure out the refine edge tool in PSE 11. I have watched the tutorial by Bob Gager and I've read other suggested instructions, AND I do every single thing Bob Gager does in his video, but it's just no

  • Customise look of site collection

    Hi The requirement is to customise the look of every site collection and corresponding subsites. So SC1 will have theme1, SC2 will have theme2. Every SC has needs to have the same page layouts and same webparts. Some of the webparts need customisatio