DML throw/Skip/ignore Transactions with asynchronous CDC

Hi all

We have set up CDC with LogMiner in our database and we wonder how we can take specific DML instructions in CDC. Our goal is to avoid the propagation of the changes affecting entire tables and are unrelevant to the target of data warehouses.

We tried with stop and restart both apply and capture processes (dbms_apply_adm.stop_apply, dbms_capture_adm.stop_capture) without success and neither alter the value change works.

BEGIN

DBMS_CDC_PUBLISH. () ALTER_CHANGE_SET

change_set_name = > "XXXXX."

enable_capture = > ' n ");"

END;

in the past, we used "begin dbms_apply_adm.set_parameter('XXXXXX','_ignore_transaction','1243213421')" to remove the capture of product requests, but we cannot identify the transactions unless it is saved in the file alert nor in the tables SPILL.

Do you have an idea how we can achieve it? Our goal is to avoid these changes to the change tables.

Thanks in advance for your help

Hello

I finally did with the following syntax:

BEGIN

DBMS_STREAMS_ADM. () ADD_TABLE_RULES

table-name => ' OWNER. TABLE ',

streams_type-online "capture."

streams_name-online "Nom_flux."

queue_name => ' Nom_file_d ' waiting. "

inclusion_rule => FALSE,

and_condition => ': lcr.get_tag () = HEXTORAW ("50")',

include_tagged_lcr-online TRUE

);

END;

--------

I use this for queries that I want to throw:

Start

DBMS_STREAMS. SET_TAG (tag-online HEXTORAW('50'));

commit;

DML STATEMENTS...

commit;

DBMS_STREAMS. SET_TAG (tag-online null);

end;

Tags: Database

Similar Questions

  • Unknown to the Transactions with the error.

    Hello

    I am facing problem in waiting Unknown to Transactions with the following error.
    Error code
    An invalid account is associated with the element being processed
    Explanation of the error
    An invalid account is associated with the element being processed

    Help, please.

    Thank you

    GHG.

    Hi, GHG,.

    The records are stuck because of the good DISTRIBUTION_ACCOUNT_ID in not associated with these records stuck.

    Please see the note of oracle that provide the script to update the DISTRIBUTION_ACCOUNT_ID below.

    Misc. erroneous Transactions (Doc ID 1398623.1)

    Try this script on 1 if test environment does not work then go for SR.

    Kind regards

    Ganesh

  • Transactions with IsolationLevel snapshot cannot be promoted. (VCAC5.2 + VCD5.1)

    Hi all

    I am using VCAC + VCD to deploy VAPP.

    I created VAPP and component VAPP. but when I submit my request that I got this error:

    • Error the applicant unit. Transactions with IsolationLevel snapshot cannot be promoted.

    someone you encounter this before?

    very appreciated for your reply, thank you

    I heard that maybe it's a bug in the installer to point 5.2.  There is a configuration where the deposit app.config file can use a connection string to the database while an individual model uses a different.  It is required by SQL Snapshot isolation not use DTC and thus multiple connections with different channels causes this error.

    It is a requirement that the templates that are installed matches the repository web application configuration in the web.config file.  This should be validated at run time, but it seems that our Installer does not validate this...  I suspect that this happens when the web model manager is installed with sql different information identification and then the Manager of model data.

    Check the Repository.Website\web.config on the Model vCAC Manager server/s to the path \Program files 9 x 86) \VMware\vCAC\Server\Model Manager Web\ for the parameter below...

    Make sure the server, database and the authentication setting that corresponds in the table below (case is important here too)...

    SELECT *.

    FROM [DynamicOps.RepositoryModel]. [Models]

    Data Source = localhost; Initial Catalog = vCAC; Integrated Security = True; MultipleActiveResultSets = True

    If they do not match, probably easier to manually change both to use iis authentication and restart windows, and check if the problem persists.  If this resolves the issue and you want a different configuration, laugh with the settings further and confirm the fact that it always works.

  • Import msicellaneous transaction with error of batch records

    Hi all
    When I import transactions with the element which is the batch and series controlled, it returns 'Batch record' error and the explanation of the error is "quantity batch and/or serial number is not amount of transaction", but the quantity of lot and serial number is equal to the amount of transaction. What is the problem? Can someone help me to solve it. Thank you!
    Here is the code inserted in the tables of the interface:

    DECLARE
    l_tran_rec inv.mtl_transactions_interface%ROWTYPE;
    l_lot_rec inv.mtl_transaction_lots_interface%ROWTYPE;
    l_serial_rec inv.mtl_serial_numbers_interface%ROWTYPE;
    BEGIN
    l_tran_rec.last_update_date: = SYSDATE;
    l_tran_rec.last_updated_by: = 1318;
    l_tran_rec. CREATION_DATE: = SYSDATE;
    l_tran_rec.created_by: = 1318;
    l_tran_rec.last_update_login: = - 1;
    l_tran_rec.transaction_interface_id: = 18027007;
    l_tran_rec.transaction_header_id: = 18027007;
    l_tran_rec.transaction_mode: = 3;
    l_tran_rec.process_flag: = 1;
    l_tran_rec.transaction_type_id: = 40;
    l_tran_rec.transaction_source_id: = 12831.
    l_tran_rec.transaction_action_id: = 27;
    l_tran_rec.transaction_source_type_id: = 3;
    l_tran_rec.distribution_account_id: = 12831.
    l_tran_rec.organization_id: = 204;
    l_tran_rec.inventory_item_id: = 208955;
    l_tran_rec.subinventory_code: = "FS stores."
    l_tran_rec.transaction_quantity: = 10;
    l_tran_rec.transaction_uom: = 'Ea ';
    l_tran_rec.transaction_date: = SYSDATE;
    l_tran_rec.source_code: = 'ANNOUNCEMENTS ';
    l_tran_rec.source_header_id: = 976110541;
    l_tran_rec.source_line_id: = 976110541;
    INSERT INTO inv.mtl_transactions_interface VALUES l_tran_rec;

    l_lot_rec.transaction_interface_id: = 18027007;
    l_lot_rec.last_update_date: = SYSDATE;
    l_lot_rec.last_updated_by: = 1318;
    l_lot_rec. CREATION_DATE: = SYSDATE;
    l_lot_rec.created_by: = 1318;
    l_lot_rec.last_update_login: = - 1;
    l_lot_rec.lot_number: = 'F10000. "
    l_lot_rec.transaction_quantity: = 10;
    l_lot_rec.source_code: = 'ANNOUNCEMENTS ';
    l_lot_rec.source_line_id: = 976110541;
    INSERT INTO inv.mtl_transaction_lots_interface VALUES l_lot_rec;

    l_serial_rec.transaction_interface_id: = 18027007;
    l_serial_rec.last_update_date: = SYSDATE;
    l_serial_rec.last_updated_by: = 1318;
    l_serial_rec. CREATION_DATE: = SYSDATE;
    l_serial_rec.created_by: = 1318;
    l_serial_rec.last_update_login: = - 1;
    l_serial_rec.fm_serial_number: = 'S20040 ';
    l_serial_rec.to_serial_number: = 'S20049 ';
    l_serial_rec.source_code: = 'ANNOUNCEMENTS ';
    l_serial_rec.source_line_id: = 976110541;
    INSERT INTO inv.mtl_serial_numbers_interface VALUES l_serial_rec;
    commit;
    END;

    Kind regards
    Sheng

    Thank you, Hussein. Now I have the problem. I do not insert the column serial_transaction_temp_id in mtl_transaction_lots_interface, and the value must be equal to the transaction_interface_id.

  • Problem with rollback transaction with foreign JMS provider

    Hello

    I created a small test to validate this transaction rollback works correctly with a foreign Jms provider (Sonic). My results seem to show that this isn't, but I have my installation is perhaps incorrect so any help appreciated...

    In the example below, I have an MDB that uses the movements of containers managed (Transaction required) and packaging. It receives a message & then sends another message.

    I've explicitly forced a rollback and wait for message received and sent message are ignored. However, on my Sonic queues, I see the number of messages on the output queue (where the message is sent) regularly every restitution time is more tempted, implying the sent message is not be restored.

    This is my EJB code: -.
    @MessageDriven(description = "sample mdb using weblogic resource wrappers", name = "WLPooledSonicJmsTransactionRequiredMessageDrivenBean")
    @TransactionManagement(value = TransactionManagementType.CONTAINER)
    @Resources( {
              @Resource(name = "connectionFactoryReference", mappedName = "localconnFactoryXA", type = javax.jms.ConnectionFactory.class),
              @Resource(name = "sendDestinationRef", mappedName = "local.out.queue1", type = javax.jms.Queue.class) })
    public class WLPooledSonicJmsTransactionRequiredMessageDrivenBean implements
              MessageListener {
    
         private ConnectionFactory sendingConnectionFactory;
    
         private Queue sendDestination;
    
         @Resource
         private MessageDrivenContext mdctx;
    
         @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
         public void onMessage(Message message) {
              System.out
                        .println("on message called on WLPooledSonicJmsTransactionRequiredMessageDrivenBean!!");
    
              Connection jmsConnection = null;
    
              try {
                   String deliveryCount = message
                             .getStringProperty("JMSXDeliveryCount");
                   
                   System.out.println("JMSXDeliveryCount value is: " + deliveryCount);
    
                   if (sendingConnectionFactory == null)
                        System.out.println("sendingConnectionFactory was null!!");
                   sendingConnectionFactory = (ConnectionFactory) mdctx
                             .lookup("connectionFactoryReference");
    
                   if (sendDestination == null)
                        System.out.println("sendDestination was null!!");
                   sendDestination = (javax.jms.Queue) mdctx
                             .lookup("sendDestinationRef");
    
                   jmsConnection = sendingConnectionFactory.createConnection("xxx",
                             "xxx");
                   System.out.println("Sonic version = "
                             + jmsConnection.getMetaData().getProviderVersion());
    
                   Session s = jmsConnection.createSession(false,
                             Session.AUTO_ACKNOWLEDGE);
                   System.out.println("Transaction is: "
                             + weblogic.transaction.TransactionHelper
                                       .getTransactionHelper().getTransaction());
    
    
                   MessageProducer producer = s.createProducer(null);
    
                   Message response = s.createTextMessage("My Reply");
    
                   producer.send(sendDestination, response);
                   System.out
                             .println("message sent from WLPooledSonicJmsTransactionRequiredMessageDrivenBean!");
    
                      // force a rollback for testing purposes
                   mdctx.setRollbackOnly();
    
    
              } catch (JMSException e) {
                   e.printStackTrace();
                   // reset our jndi objects
                   sendDestination = null;
                   sendingConnectionFactory = null;
                   throw new EJBException(e);
              } finally {
    
                   // Return JMS resources to the resource reference pool for later
                   // re-use.
                   // Closing a connection automatically also closes its sessions, etc.
    
                   try {
                        if (jmsConnection != null)
                             jmsConnection.close();
                   } catch (JMSException e) {
                        // reset our jndi objects but no need to tell client
                        sendDestination = null;
                        sendingConnectionFactory = null;
                   }
    
              }
    
         }
    }
    Here are the weblogic-ejb-jar, which defines the destination of reception
    <?xml version="1.0" encoding="UTF-8"?>
    <weblogic-ejb-jar xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-ejb-jar.xsd"
            xmlns="http://www.bea.com/ns/weblogic/90"
            xmlns:j2ee="http://java.sun.com/xml/ns/j2ee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <weblogic-enterprise-bean>
            <ejb-name>WLPooledSonicJmsTransactionRequiredMessageDrivenBean</ejb-name>
            <message-driven-descriptor>
                <pool>
                    <max-beans-in-free-pool>4</max-beans-in-free-pool>
                    <initial-beans-in-free-pool>1</initial-beans-in-free-pool>
                </pool>
                <destination-jndi-name>localmandytest</destination-jndi-name>
                <connection-factory-jndi-name>localconnFactoryXA</connection-factory-jndi-name>
                <jms-polling-interval-seconds>30</jms-polling-interval-seconds>
            </message-driven-descriptor>
        </weblogic-enterprise-bean>
    </weblogic-ejb-jar>
    and it has been part of the weblogic log output (this message is repeated that the container attempts to deliver the message)...
    on message called on WLPooledSonicJmsTransactionRequiredMessageDrivenBean!!
    Session transacted? = false
    message sent from WLPooledSonicJmsTransactionRequiredMessageDrivenBean!
    <07-Oct-2010 13:09:45 o'clock BST> <Info> <EJB> <BEA-010213> <Message-Driven EJB: WLPooledSonicJmsTransactionRequiredMessageDrivenBean's transaction was rolled back. The transaction details are: 
    ......
    Published by: MandyWarren on October 7, 2010 07:05 added weblogic-ejb-jar. XML

    Published by: MandyWarren on October 14, 2010 14:53 in order to take account of the last changes of the code

    Published by: MandyWarren on October 14, 2010 15:30 - code removed for only if rollback count == 1 because it does not work

    Published by: MandyWarren on October 21, 2010 22:36 deleted info specific environment

    Just a quick update...

    I raised this issue to the support of Oracle who confirmed that it was a bug see their response below...

    >
    I just got an update of JMS engineering.

    They Bug 81388508142162 is the best candidate: 8138850 is for WLS 9.2.x, while 8142162 is for WLS 10.0.x.
    The fix is included in 9.2.3 WLS and WLS 10.0.2
    >

    I upgraded to 10.0 MP2 as no new patches are now provided for 10.0 MP1 and the problem was solved.

    A big thank you to everyone for their help on this.

  • Handling error / logging with asynchronous calls

    Hello

    I want to record each error that my app can throw. I thought it would be enough to surround the launch or method the method start with a try... catch. But it does not work like the exception.
    If an error occurs during an asynchronous call, for example by clicking on a button, the exception is never caught.

    You have an idea how to solve this problem?

    Example:
    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    
    public class TestApp4 extends Application {
    
        public static void main(String[] args) {
            launch(args);
        }
    
        public void start(final Stage stage) throws Exception {
    
            try {
                final VBox root = new VBox();
    
                Button button = new Button("Click");
                button.setOnAction(new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent actionEvent) {
                        int i = 0;
                        int a = 5 / i;
                    }
                });
                root.getChildren().add(button);
                Scene scene = new Scene(root);
                stage.setScene(scene);
                stage.show();
            } catch (Exception e) {
                // do logging here
                e.printStackTrace();
            }
        }
    }

    I'm not sure how it works 100%, but I am pretty sure is that these Exceptions in EventHandlers are intercepted by JavaFX itself inside the thread of JavaFX. They must, because if they let the exception to the top bubble, the thread of FX would end (and with it, any response in the user interface). It's probably taken at the level where the events are fired somewhere (my guess is within the QuantumToolKit).

    Anyway, these exceptions are printed to System.err - if you can redirect the flow to a log file or you can have them all in one place. The error stream can be defined in your application simply by calling System.setErr ().

    Note also that exceptions that occur in a task are stored in the exception property - sometimes, they can be difficult to find because they are put there in silence - you'll need to check your tasks for exceptions and print them.

  • Problem with asynchronous call and Forget.vi and MessageBoxW (user32.dll)

    I have a problem.  I want to use the same type of structure as in "asynchronous call and Forget.vi.

    There is a picture of my (Message Box.vi) VI.

    The VI expect the 'narrow reference' I select OK or cancel.  This is not the expected behavior.  If I turn off the "narrow" reference I have the expected behavior (by renaming properly the buttons).

    What am I doing wrong with the asynchronous call?

    Looks like close reference wants the loop of the root and your dialogue it blocks until it is finished.   I assumed that Run in the user interface thread is selected in the COLD LAKE to the MessageBoxW function, try changing to run in any thread

  • Find DML in an uncertain transaction

    Hello

    Is it possible to find what a transaction uncertain, enumerated in dba_2pc_pending, is underway, I mean, the current sql statement?

    Thank you

    Igor.

    > I mean, the current sql statement?

    The current SQL statement is COMMITTED.

    The uncertain transaction may have many DML instructions (successfully) before POSTING.

    You can use the AUDIT (on every table, or specific tables).

    Check must use the option of SUCCESS WHENEVER (the DML statements are successful):

    INSERT A TABLE OF AUDIT, TABLE, DELETE TABLE BY ACCESS UPDATE EVERY TIME THAT SUCCESSFUL;

    Of course, AUDIT on all tables can greatly affect performance.

    Kind regards

    Zlatko

  • Multiples of transaction with a SNA

    Hello

    a question:
    Executing a statement that performs multiple operations, I'll have a SNA with several Transaction ID.

    How is it written for the redolog? I find 'sets' with the same SNA and the different Transaction ID?

    In the case of recocery the instruction will be "redone" ordered by RCS and within the CNS by Id of the Transaction?

    I found no Docs on that one


    Concerning
    Christian

    Rivay Shamsudeen explains the RCS in http://orainternals.wordpress.com/2012/01/19/scn-what-why-and-how/:

    YVERT (System change number) is a primary mechanism for maintaining the consistency of the data in the Oracle database. YVERT is used mainly in the following areas, of course, is not an exhaustive list:

    1. Each redo record has a SNA version of do it again in the header to repeat (and recovery records can have non-unique YVERT). Restore records in terms of both threads (as in the case of CARS), recovery will order their order to SNA, essentially maintain a strict sequential order. As explained in my book, each record redo has also several vectors of change.
    2. Each data block has also block YVERT (aka version of block). In addition, a vehicle for change in a redo record also provided block YVERT. This means that a vector of change can be applied to one and only one version of the block. Code checks if the YVERT target in a vector of change correspond with the YVERT block before applying redo record. If there is a gap, corruption errors are thrown.
    3. Coherence of reading also uses of SNA. Each query is request environment that includes a SNA at the beginning of the query. A session can see transactional changes only if the validation of this SNA transaction is less then the environment request YVERT.
    4. Engage. Each commit will generate YVERT, aka commit SCN, which marks a transaction limit. Group validations are also possible.

    ...

    Each change is incremented YVERT?

    Not necessarily. Incrementing SNA is not for each change. For example, in the script below, we'll change the table 1000 times, but the generated RCS will be very little.

  • Graphic Flash with asynchronous update

    Hi all

    I am trying to use the asynchronous update of the chart option, but it does not work in a different version of the APEX.

    In my local DB I APEX c. 4.0.1.00.03 and it works fine, charge the chart and keep updated, but in the graphical server is loaded but when it will refresh the table disappear instead, the version is 4.0.0.00.46.

    Both cards have the same configuration and the standard query:
     SELECT sum(case when COMM is null
                         then 0
                    when COMM = 0
                         then 0
                    else 1
                    end) value,
           count(*) max_value
                FROM EMP 
    Something I noticed that is different in the source code is that you have the function
     apex_RefreshFlashChart 
    and the other
     apex_RefreshChart 
    Is it really tied to the version, or did I miss something?

    Thank you
    Alan Martini.

    Hello

    It was a bug, fixed in patch 4.0.1 (bug 9868860), see http://www.oracle.com/technetwork/developer-tools/apex/application-express/401-patch-166923.html#BABJCAFA.

    This is why it doesn't work with APEX 4.0.0.

  • can you throw a hard drive with windows xp is installed on a computer dell laptop and put it in another dell laptop the drive hard all good isnot

    a laptop computer, the hard drive is not working right and the other has good hard drive, but the rest of the computer is not in good shape

    You will probably have problems with validation because activation of your OS is associated with your computer hardware.

  • YouTube videos skip and stutter with 21.0.0.213 in Firefox

    I have Adobe Flash 21.0.0.197 with Firefox 46.0 and Windows XP (32 - bit, SP3), netbook HP Mini-110.  YouTube works OK, but when I've upgraded to Adobe 21.0.0.213, the YouTube clips stutter and jump horribly.  Fortunately, I have created a system restore point and was able to return to 21.0.0.197.  Why don't the most recent Adobe Flash works with Windows XP and Firefox 46?  (When I use the browser Chrome, YouTube works well with Adobe Flash 21.0.0.216).  I want to update Adobe Flash for Firefox, but I'm afraid to uninstall Flash, then new facility, fearing that if it does not work I could lose 21.0.0.197 for good.

    Curiously, when I installed 21.0.0.213 with 45.0.2 Firefox, it crashed my YouTube ('no results found', ' year error occurred ").  With Firefox 46.0 and 21.0.0.213, I get the constant jumps or the video freezes.

    Actually, I meant turning and turn it back on.

    Chrome is actually your best choice in a perspective of security on WinXP (they have done much to consolidate some of the mitigations of abuse missing memory in WinXP itself), and it keeps Flash updated automatically.  If it works well for you, I recommend to use it as your main browser.

  • throw in the towel with yet

    I have windows vista 64 bit. Last night when I went to file-export-media I chose the H.264 format, preset - Custom Multiples was MP4 (default), the file size was 2041 MB streamline was the norm. I was able to create the video, but software Windows to burn a DVD cannot process the file.  There is nothing to click for fine to "why not".

    Once again, when exporting to the media, I chose also to other formats such as DVD Mpeg2, avi, Windows biff. and others.

    The problem could be in my video camera? It's a VIXIA HF10

    Two weeks ago I took the advice to download 'clean' now, and then I reinstalled CS4.

    I did some reading on the forum yet, and nothing helps. I have the book but nothing for troubleshooting.

    Today, that I decided to bring in a new total which was only 2 minutes.  I went on again 1st, and which is not, I thanks to the sponge.

    Just a comment...

    You wrote about problems with still for about a month, maybe more

    At any given time (as many messages I'm not 100% sure) I think I proposed...

    Even if you have a later version, it is a good book to learn yet
    KS http://www.Amazon.com/focal-Easy-Guide-Adobe-encore/DP/0240520041/ref=sr_1_1?ie=UTF8&s=Boo & qid = 1277266925

    .. .and you already told you have this book (is that correct?)

    It really SEEMS to me that you are just trying one thing after another... without sitting down with this book... page 1 and on... and read step by step instructions on how to get Premiere Pro into Encore DVD

    If Dynamic Link doesn't work for you... work differently

    Export from PrPro then open again and import these files to create and burn a DVD

    If you don't know what type of file is transcoded to export... work differently

    Export of PrPro DV AVI video and audio in a single file (= Audio video Interleave (AVI)

    After you import your AVI videos in again and use a menu template to create the navigation, you use the AUTOMATIC setting to still find a way to transcode the AVI into VOB (VOB is a form of MPEG2) and create an ISO on your hard drive, or go straight to burning a DVD

    If you cannot directly burn a DVD, you would still create an ISO and then use the FREE http://www.imgburn.com/index.php?act=download to save files or folders or ISO disk
    (send the author a PayPal donation if you like his program)

    If necessary... to create a new little Premiere Pro project and each stage of the TRIAL process

    Once you have taken many small steps to learn, you'll be ready to 'function' with a large project

    Once again... it SEEMS that you simply tried to do too many things at once, and you have confused with all the options

  • Ignoring rows with empty fields?

    I have an existing query and want to limit the results depending on whether one of the fields (which is an optional field in a form) has a value.

    I searched through a few similar topics here and came up to the top with the following:

    < name cfquery = "getsimilar" datasource = "' #datasource # ' LignesMax '5' = >"
    SELECT catshortname, soshortname, retailer_name
    The merchants
    WHERE 1 = 2
    < cfif len (trim (getsimilar.soshortname)) GT 0 >
    OR soshortname IN (< cfqueryparam cfsqltype = "CF_SQL_VARCHAR")
    list of value = "" #getsimilar.soshortname # "="yes">)"
    < / cfif >
    AND catshortname =' #getmerchant.catshortname #'
    ORDER BY retailer_name ASC
    < / cfquery >

    However, I get an error when you run this.

    The field I want to be sure has a value is "soshortname".

    Any help much appreciated!

    Why not just do:

    SELECT catshortname, soshortname, retailer_name
    The merchants
    WHERE soshortname is not null and soshortname! = ''
    AND catshortname =' #getmerchant.catshortname #'
    ORDER BY retailer_name ASC

    The reason why there are 2 check is I do not know if you store empty values null values or empty strings.

  • Skip the menu with images... is this possible?

    I just want to add icons in the jump menu (menu/list)... How do I do this? Thanks in advance...

    Unfortunately the form styles are not uniformly recognized by all browsers.  Some people resort to Ajax, DHTML, JQuery, or Flash for their Menus jump look the same in all browsers.

    Example here:

    http://Web--templates.org/menus/JavaScript-jump-menu.html

    Nancy O.
    ALT-Web Design & Publishing
    Web | Graphics | Print | Media specialists
    www.Alt-Web.com/
    www.Twitter.com/ALTWEB

Maybe you are looking for