Enforcing Node Affinity for PL/SQL Packages???

Dear fellow dbas,
we have a random performance problem on one of our 11gR1 RAC databases due to io waits.
In fact, we tracked down the problem and noticed that sql packages are executed on node 1 causing bad times and were executed on node 2 with good results.
Now the question is how can we enforce these pl/sql packages, which are called via external batch jobs, to be executed on node 2?
Instance affinity came to my mind but I have no clue whatsoever how to apply it for packages and embedded pl/sql code.
Can you please give me an advice?
Thanks for your feedback!
Best regards,
Sebastian

You need to define a service to run preferably on node 2 with failover to node 1, and give a your batch jobs a connect string that connects to that service:
srvctl add service -d whatever -s batchserv -r node2 -a node1
and in your tnsnames.ora,
batchserv=
(description=
    (address_list=
         (failover=on)(load_balance=on)  
         (address=(node1....)(address=(node2...))
     (connect_data=(service_name=batchserv))
I've recorded many demonstrations of this sort thing,
Free Oracle Databse 12c and 11g Tutorials for Administration and Developers SkillBuilders
John Watson
Oracle Certified Master DBA

Similar Messages

  • How to generate WebServices for PL/SQL Packages

    I have the following issue trying to generate WS for a selected set of operations within a PL/SQL package
    If I use the option -sql PKG_TEST then I am getting all operations within a package.
    I just want to expose a certain number of procedures ( e.g. PROC1 and PROC2 )
    It works only if I specify
    -sql PKG_TEST(PROC1)
    when I use -sql PKG_TEST(PROC1, PROC2) it gives me errors.
    I have Oracle JDeveloper (10.1.3.2) (Build 4066) .
    I used wsa with an plsqlAssemble option
    java -jar wsa.jar -plsqlAssemble
    -appName myApp
    -packageName myPckg
    -sql PKG_TEST(PROC1)
    -dataSource jdbc/ds
    -dbConnection jdbc:oracle:thin:@zzzz:1521:mydb -dbUser user/passw
    -style rpc
    -use literal
    Thanks,
    Michael Hitrik

    Eric,
    Thanks a lot for your help.
    I was able to follow all of your recommendations
    I was able to produce the single ear file for multiple PL/SQL packages .
    Now I have the last step ( I hope :-) - WS-SECURITY
    What is your recomendation for Security - specifically for WebServices for PL/SQL Packages ?
    I would like to do the following:
    CLIENT CODE:
    * Create a XML element with user name, password, &
    * datasource as child elements.
    * Element will look like this:
    * <credetials>
    * <username>scott</username>
    * <password>tiger</password>
    * <datasource>jdbc/OracleCoreDS</datasource>
    * </credentials>
    Document doc = new XMLDocument();
    Element elAdd = doc.createElement( "credentials");
    Element elA = doc.createElement( "username");
    Element elB = doc.createElement("password");
    Element elC = doc.createElement("datasource");
    elA.appendChild(doc.createTextNode("scott"));
    elB.appendChild(doc.createTextNode("tiger"));
    elC.appendChild(doc.createTextNode("jdbc/OracleCoreDS"));;
    elAdd.appendChild(elA);
    elAdd.appendChild(elB);
    elAdd.appendChild(elC);
    doc.appendChild(elAdd);
    Element e = doc.getDocumentElement();
    // Create an intance of the proxy
    EmployeeProxy proxy = new EmployeeProxy();
    // Create a Header objecy
    Vector v = new Vector();
    v.add (e);
    Header hdr = new Header();
    hdr.setHeaderEntries(v);
    // Set the Header
    proxy._setSOAPRequestHeaders(hdr);
    SERVER CODE:
    public void processHeaders(Header header)
    throws java.io.IOException,
    oracle.xml.parser.v2.XSLException
    // Get all the Elements
    Vector entries = header.getHeaderEntries();
    Element e = (Element) entries.firstElement();
    System.out.println("Element received from SOAP header is: " );
    ((XMLElement)e).print(System.out);
    // Get independent nodes and retrieve node values.
    Node userNode;
    userNode = ((XMLNode)e).selectSingleNode("username");
    userName = ((XMLElement)userNode).getText();
    Node passwordNode;
    passwordNode = ((XMLNode)e).selectSingleNode("password");
    password = ((XMLElement)passwordNode).getText();
    Node dsNode;
    dsNode = ((XMLNode)e).selectSingleNode("datasource");
    datasourceName = ((XMLElement)dsNode).getText();
    System.out.println("User name is: " + userName);
    System.out.println("Password is: " + password);
    System.out.println("Datasource is: " + datasourceName);
    How can this be done with the generated code using wsa tool ?
    Any other suggestions ?
    Thanks,
    Michael

  • Creating Web services using JDeveloper for Pl/SQL package having ref cursor

    Hi,
    I am trying to create web services for PL/SQL package in JDeveloper. When I am trying to create this web service, the functions in the package which is returning referential cursor or record cursor are not visible. When I highlight the function and click "Why Not?", it displays the message "The following types used by the program unit do not have an XML schema mapping and/or serializer Specified: REF CURSOR". Could you please let me know, how I can create this web service?
    I am getting similar error when I am trying to create web service for a package with overloaded functions also.
    Thanks,

    Ok so I played around with this some more. I created the same process in bpel using oracle bpel designer and here are the results.
    1. Against 10g database running a synch process data is retutned without error.
    2. Against 9i database running an asynch process data is retutned without error.
    3. Against 9i database running a synch process data is retutned with error.
    I'm definilty missing something.

  • Generating Java wrappers for PL/SQL Packages in JDeveloper 3.1

    I have not been successful in using JD3.1 to generate java classes for use in calling PL/SQL packages from a Java Servlet I am developing. I have followed the directions under the 'Generating Java Code for Oracle Objects and PL/SQL Packages' help topic: I display the package in the database browser window, right click on the package, select 'Generate Java', and click 'OK' on the pop-up JPublisher window that appears. The wizard clocks out for a few moments, then the JPublisher window disappears, but the java class is not added to JDeveloper's Navigation pane for the Project and Package I specified in the wizard.
    Any idea where the generated class is going to?

    should be, but isn't... JDeveloper3.1
    (build 681) default install... Is it in
    a custom package I didn't install? Or
    am I just a dumb nut?Hmm.. I thought it was in there.. JPub is a java based tool. You can invoke it as such.
    1st, use setvars.bat from your jdeveloper/bin directory.
    2nd, run java oracle.jpub.java.Main (pass it the same arguments as you would the jpub.exe)
    Here's the output from my machine here:
    D:\JDeveloper31\bin>setvars D:\JDeveloper31
    Setting JDeveloper 1.2 runtime environment to "D:\JDeveloper31"
    Setting JDK version 1.2 in "D:\JDeveloper31\java1.2"
    D:\JDeveloper31\bin>java oracle.jpub.java.Main
    JPub: Java Object Type Publisher, version 8.1.6.0.0 Production
    (and the rest of the help)
    Take Care,
    Rob
    null

  • Function list for pl/sql package script in file editor

    Hello,
    i am editing a pl/sql package file in the editor an run this script to activate my changes. is there an possibility to see the functions and procedures list which exists in this file ?
    Regards
    Sascha

    No, you have to use the PL/SQL editor for that, so once you have your code in the DB, open it through the navigator tree.
    FWIW, there's a request to use the same editor for file based PL/SQL at the Exchange, where you can vote on (http://htmldb.oracle.com/pls/otn/f?p=42626:39:966831210668515::NO::P39_ID:3262).
    This will enable procedure breakdown, run/debug, clickable compilation errors, ...
    Regards,
    K.

  • How to implement node affinity for java type concurrent programs.

    How to run a concurrent program against a specific RAC instance with PCP/RAC setup? (Doc ID 1129203.1)
    This works for non java registered concurrent programs but not java registered with use the DBC file
    EBS RAC environment with two RAC nodes. We would like to implement node affinity to allow concurrent programs to be directed to a single RAC instance. Oracle have provided the NODE AFFINITY ability via the concurrent program definition in Session Control. This then uses the entry in the 10.1.2 tnsnames.ora to pass the request directly through to the instance as defined by Node Affinity.
    However, concurrent programs defined as type java do not access the database by the 10.1.2 tnsnames.ora but use the dbc file under $FND_SECURE. This file is configured for both self service and concurrent processing so any change to the dbc file entry will affect both self service and concurrent processing.
    How to we implement a node affinity solution for concurrent programs without affecting Self Service conncetions? We'd like the dbc file to directly connect java concurrernt programs through to one instance but the self service connections to use the SERVICE name only.
    Regards.
    philippe.

    Did you think about Online/Batch node concept ? By that way you can seggrecate application connection.

  • Generate Java option for PL SQL packages

    Hi
    I recently found out that there is a 'generate java' option in the JDeveloper IDE for PLSQL packages, which creates a Java representation of the PLSQL package.
    What is the use of doing this? can anyone share tutorials that makes use of this feature

    This link may helpful
    Oracle PL/SQL Package - DB Adapter

  • Searching for a Documentation Tool for PL SQL Packages

    Hi there!
    I've got the following problem. Our project contains of many different pl/sql packages and now we want to generate a simple documentation (e.g. the procedure signatures etc.). Is there any tool, which is able to generate such a documentation automatically, like the javadoc tool in Java???
    kind regards, Ingo

    Try one of these open source projects.
    http://oraschemadoc.sourceforge.net/
    http://sourceforge.net/projects/pldoc/
    Jens

  • How to get changes of a custom PL/SQL package updated in ISG?

    Hi All,
    I need some help on how to change a custom PL/SQL package in ISG integration repository:
    I already uploaded my custom PL/SQL package to the integration repositoy some time ago. Now I have made some changes to PL/SQL record/table types defined in the package (added some fields and removed some others). These changed record/table types are used by a procedure I already uploaded to the integration repository. When regenerating the WSDL for my PL/SQL package in integration repository I get an error that the wrapper for respective procedure can't be found. When checking up the SQL types that were automatically generated (by JPublisher) for corresponding PL/SQL types, these generated SQL types are invalid...
    So it seems that in one case JPublisher generated an empty SQL type (with no attributes). In another case JPublisher generated the SQL type with old attribute list, so it didn't adopt the changes of corresponding PL/SQL type in the package...
    Can anybody tell me how to get the changes of a cusotm PL/SQL package updated in ISG? Or is there any possibility to first remove a whole PL/SQL package from the ISG integration repository (and getting rid of all old automatically generated SQL types), so that I can newly upload my PL/SQL package afterwards?
    Thanks
    Konrad
    Edited by: Konrad on 24.10.2011 10:51

    Thanks Daniel, for your reply...
    (-> for info: I'm a colleague of Konrad...)
    Yes, we used a higher version number - and the upload of iLDT file works fine...
    But, the problem occured when generating the WSDL...
    However, I think we have found an approach of how to get the changes of a custom PL/SQL package updated correctly in ISG:
    1. Save a copy of PL/SQL package and then delete it in the database
    2. Regenerate the WSDL for PL/SQL package in ISG (seems that all atutomatically generated JPub wrappers and SQL types are also deleted)
    3. Restart all processes
    4. Create the changed version of PL/SQL package in the database again
    5. upload of iLDT
    6. Regenerate the WSDL for PL/SQL package in ISG
    Best Regards
    Carolin

  • "Node affinity" or inserting data in a given node only

    I'm using coherence as a "Integration Channel" for a few legacy applications sharing a coherence cluster between them.
    Due to this, some operations of the cluster can be only executed in a particular node. Here is the my current case as example: Every entry cache should be indexed with lucene but due to some limitations, I can only run the indexation in the node X (I'm using a file-system storage for lucene and I do not have a distributed/shared file system). So, no matter where the entry is inserted, I need to trigger an indexation in the node X. So, what I need is something like an entry processor that will be always executed in the selected node x.
    So, my questions are:
    * There is a notion of "node affinity" for remote executions? Something like a entry processor that can check the node where actually is, and if it is the correct node, execute the indexation code.
    * There is a way to add a cache entry to a particular node? If I manage to do this, what I need to do is to use a cache with a entry in the node that I need. Then an entry processor will execute the indexation code in when it find the correct cache entry. Something like the Key affinity Service of Infinispan https://docs.jboss.org/author/display/ISPN/Key+affinity+service
    Edited by: ggarciao.com on Dec 5, 2012 9:08 AM
    Edited by: ggarciao.com on Dec 5, 2012 9:09 AM
    Edited by: ggarciao.com on Dec 5, 2012 9:10 AM

    There are ways to assign key to particular partitions, it is also possible to define custom partition assignment strategy in 3.7
    You can find details in documentation http://docs.oracle.com/cd/E24290_01/coh.371/e22837/api_dataaffinity.htm
    Though I doubt this will help you to solve your classpath diversity issue.
    I would recommend different approach to classpath problem, this articale http://blog.ragozin.info/2012/03/coherence-how-to-get-rid-of-domain.html
    describe a strategy which I successfully use for cluster share between several applications.

  • SAP Restart to Delete SQL Packages

    I am starting this discussion on behalf of a client:
    Especially the "veterans" of AS/400 remember, that in the beginning of SAP on AS/400 it was often necessary to stop the SAP instance and delete the SQL packages in order to overcome database errors that usually showed up as SQL -901 errors. This way of "fixing" SQL -901 became like a habit, so that support employees often recommended to stop the SAP instance and delete SQL packages when a simple restart of the failing work process would have fixed the problem. Later we recommended to use profile parameter rdisp/wp_auto_restart to restart work processes automatically once a day (for example), and that seemed to have solved the problem. However, my client is not quite convinced that this works and does not want to "play" with the production system. They are using an ECC 6.0 system with a 10 TB database and about 4000 active users.
    Question to this group: Do you have systems with a similary size that run several weeks (or even months) without interruption for deleting SQL packages? If so, do you use profile parameter rdisp/wp_auto_restart, and what value is configured? Also "negative" answers are welcome, i.e. if you have the experience that the SQL packages must be deleted on a regular base for the sytem to work properly, please let us know, too.
    Thanks a lot for your cooperation.
    Kind regards,
    Christian Bartels.

    Hi Christian and Jim,
    Our production database is 8 TB with 3400 named users (1,000 or so concurrent).  We still are "old school" and delete the SQL packs during normal maintenance twice a month (either two or three week interval). I know we have gone longer if we were having a lot of go-lives but I don't think it has happened since we upgraded to ECC 6.0.
    We did have some SQL pack issues a while ago but it turned out to be they were reaching the maximum size for table IBSYMBOL. Since then we set the QAQQINI value "SQL_INCREASE_PKG_LIMIT = *YES " which doubled the allowable size to 1GB I believe. We still were reaching the max and we ended up inserting a profile parameter.
    "dbs/db4/dbsl_tablehint0         =           Table = 'IBSYMBOL' & nMarkers > 100 ? SingleExecutionReuse"
    Credits - Steve Tlusty of IBM came up with the fix
    During that round of fun, Steve also had us adjust the following parameters -
    rdisp/noptime                        =             605800
    rdisp/wp_auto_restart          =             604800
    Note - even though we are at 6.1.1 now, the adjustments were made on 4.7x200 while running under V5R4 so I don't know if they are still required.
    Have I rambled too long?
    Craig

  • How to Create a SQL Agent Job For A SSIS Package with Sql Server Authentication

    Hi ALl,
    I have a SSIS package which basically has a data flow task in which i pull the data from one server and copy it into another server and my source server is the one where i dont have windows authentication and i have to only use a sql server authentication
    . This package runs fine if i click the server connection properties type the password and save it.
    Now, my task is to set up a sql agent job which basically uses a proxy account and takes this package from the file system and runs it.But when i try to run this package, its failing with an error saying 
    "Login Failed For rpt5user" where rpt5user is the username for my sql server authentication of the source connection.
    Can someone please help me with any suggestions on how to do this?
    I have heard that we can achieve it by using xml config file which i have never used and i am trying to google around but for no luck.
    So, If someone can please throw any suggestions or ideas on this it would be great.
    Thanks

    You need to add password as a config item and set it from the file source or sql table
    see this as an example
    http://blogs.msdn.com/b/runeetv/archive/2009/12/22/ssis-package-using-sql-authentication-and-dontsavesensitive-as-protectionlevel.aspx
    Please Mark This As Answer if it solved your issue
    Please Mark This As Helpful if it helps to solve your issue
    Visakh
    My MSDN Page
    My Personal Blog
    My Facebook Page

  • JS Validation for Drop down List is not working in Oracle PL/SQL Package

    Hi All,
    I am facing an issue with JavaScript validation done in Oracle PL SQL package.
    System Requirement:
    There is one screen which contains two fields viz. FLD 1 & FLD 2 and one 'Submit' button.
    FLD 1 and FLD 2 fields are drop down list boxes.These are mandatory fields.
    The screen is developed in Oracle Mod PL SQL package.
    The html coding and java scripting are embedded in the respective Oracle PL SQL Package procedure which generates this screen,takes the input values provided by user,does the
    field validations and submits the form.
    Issue:
    The javascript validation for FLD 2 dropdown is working successfully.
    When the user leaves this field as blank,the embedded javascript pops up an error message 'Selection of FLD 2 is manadatory before submitting the form!'.
    As FLD 1 is also a mandatory field,the javascripting validation should pop up the similar error message 'Selection of FLD 1 is manadatory before submitting the form!'.
    But,this first field validation is not at all working.
    The system allows to submit the form even if the 'FLD 1' is left blank.
    The javascript code sysntax for validation of FLD 1 & FLD 2 drop down list boxes as follows:
    function validate_form_fields()
    if (document.forms[0].p_fld_1.selectedIndex == 0))) || (document.forms
    [0].p_fld_1.selectedIndex < 1 )
    alert("Selection of FLD 1 is manadatory before submitting the form!!!");
    return false;
    else if (document.forms[0].p_fld_2.selectedIndex == 0))) || (document.forms
    [0].p_fld_2.selectedIndex < 1 )
    alert("Selection of FLD 2 is manadatory before submitting the form!!!");
    return false;
    return true;
    I am viewing the screen from the web browser IE version 8.0.
    Your timely help will really be appreciated.
    Regards & Thanking in advance,
    Alka

    Hi,
    1. Your problem is actually related to JavaScript, not SQL and PL/SQL. So, this is the wrong forum to post. The closest to JS is the Application Express forum {forum:id=137}. Clearly state that it is not an Apex issue and that you are looking for JS help.
    2. Your JS code, the way you has posted it, is syntactically incorrect, so if you post on Apex forum put the correct code and in tags as described in the FAQ
    {quote}
    function validate_form_fields()
    if (document.forms[0].p_fld_1.selectedIndex == 0))) || (document.forms
    [0].p_fld_1.selectedIndex < 1 )
    alert("Selection of FLD 1 is manadatory before submitting the form!!!");
    return false;
    else if (document.forms[0].p_fld_2.selectedIndex == 0))) || (document.forms
    [0].p_fld_2.selectedIndex < 1 )
    alert("Selection of FLD 2 is manadatory before submitting the form!!!");
    return false;
    return true;
    {quote}
    Regards,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • Pl/sql package for use with workflow will not return a value

    hi all,
    just trying to intercept a requisition being turned into an order if it uses a certain cost code. so i have amended the workflow and created a package to check what cost centre a requisition is using. how over the workflow stops on the function that calls the package witha a status of complete as if the package is not returning any values.
    the package is as below:
    CREATE OR REPLACE PACKAGE APPS.xxhccWFcapitalcheck AS
    procedure XXHCC_CHECK_CAPITAL(itemtype in varchar2,
    itemkey in varchar2,
    actid in number,
    funcmode in varchar2,
    resultout out NOCOPY vARCHAR2);
    END xxhccWFcapitalcheck;
    CREATE OR REPLACE PACKAGE BODY APPS.xxhccWFcapitalcheck AS
    procedure XXHCC_CHECK_CAPITAL(itemtype in varchar2,
    itemkey in varchar2,
    actid in number,
    funcmode in varchar2,
    resultout out NOCOPY varchar2 ) is
    x_progress varchar2(100);
    x_resultout varchar2(30);
    l_doc_mgr_return_val VARCHAR2(1);
    l_doc_string varchar2(200);
    l_preparer_user_name varchar2(100);
    doc_manager_exception exception;
    p_test varchar2(100);
    l_req_id varchar2(30);
    CURSOR p_line_id IS
    SELECT
    codes.segment2 cost_center
    FROM
    po_requisition_headers_all headers,
    po_requisition_lines_all lines,
    po_req_distributions_all dist,
    gl_code_combinations_v codes
    WHERE
    headers.requisition_header_id = lines.requisition_header_id
    AND
    lines.requisition_line_id = dist.requisition_line_id
    AND
    dist.code_combination_id = codes.code_combination_id
    AND
    headers.segment1 = l_req_id;
    line_rec p_line_id%rowtype;
    BEGIN
    -- Do nothing in cancel or timeout mode
    --if (funcmode <> wf_engine.eng_run) then
    -- resultout := wf_engine.eng_null;
    -- return;
    -- end if;
    l_req_id := wf_engine.GetItemAttrNumber (itemtype => itemtype,
    itemkey => itemkey,
    aname => 'DOCUMENT_NUMBER');
    --FOR line_rec in p_line_id
    ---loop
    open p_line_id;
    fetch p_line_id into l_doc_string;
    close p_line_id;
    IF p_line_id= 'Q9DEF'
    dbms_output.put_line p_line_id;
    Then resultout := 'COMPLETE:F';
    return;
    p_test := 'USE DIFFERENT CODE';
    ELSE
    resultout := 'COMPLETE:T';
    return;
    END IF;
    END LOOP;
    end;
    END xxhccWFcapitalcheck;
    any help would be great!

    Hi Community,  first of all, english is not my native language and im not sure to use the correct terms for PowerCenter - so if im wrong please help me correct and make clear what we need. We have a kind of 3-steps ToDo. First step: Load data from an external source into a "local" datastore (its an oracle db on a server in our "hands")Second step: Check data against several verifications, this is done with a PL/SQL Package. The PL/SQL Package shall be called with an Interfacename who is set in the First PowerCenter Mapping. Our current thoghts are to do this via a stored procedure, which runs as "Target Post Load" and gets a variable "Interface Name".Is that possible? Im not quite sure about it. About the last part its even more unclear how we can solve it:Third part should be switch back to PowerCenter now - and the package (or to be correct a function in the package) should return a value for "okay everything fine => workflow continue" or "something happened => workflow is stopped" Im not sure how i can handle this. I hope my explanations are good enough so you can provide some help?!If there are any questions please ask!  Thank you alot, best regards, Christian

  • Syntax for calling html page in PL/SQL package

    Hi,
    I'm trying to call html page (stored on server) in my pl/sql package!
    I have already create html page in pl/sql package code and it's works fine.
    Now create better html page (interface design) and stored on server. I would like to call that stored html page in my pl/sql package.
    What is syntax for calling html page in PL/SQL or could you suggest me some literature.
    In first option I had created ces and stored it on server. Then I call it in pl/sql package like htp.p('<link rel="stylesheet" href="\download\table_style.css" type="text/css">');
    I try someting like that for calling html page but it doesn't works.
    htp.p('<link rel="form" href="\download\interface.htm" type="text/html">');
    Does anyone know syntax for calling html page in pl/sql?!?
    Thanks!

    hello
    I normally use htp.anchor(URL,linkname);
    it works
    ammar sajdi
    www.e-ammar.com/Oracle.htm

Maybe you are looking for

  • How can I turn off auto play of an swf/flv using actionscript?

    Does anyone know how to turn off autoplay, using actionscript, of swf/flv? I'm trying to showcase four videos on the same page of a website. each video is a generic media player created in flash. when i test the movie, all the videos start playing at

  • Adding nodes to specific positions of JTree

    Hi guys, I have a JTree that basically represents a file explorer with all the folders and files in a drive. I want to automatically refresh the tree if there are any new files added to that drive. What my idea was to: 1. Set a timer to check the lis

  • Error in using Array in pro*C

    My test pro*C code is as follows: long empIdArray[50]; EXEC ORACLE OPTION (SELECT_ERROR=NO); EXEC SQL SELECT emp_id INTO :empIdArray FROM emp ; /* check error*/ if ((sqlca.sqlcode != 0) && (sqlca.sqlcode != 1403) && (sqlca.sqlcode != -1405)) printf("

  • Can not login into itunes store bummer

    CAn't connect to the itunes store either, lukely i am not the only one.

  • A suitable keyboard for program development

    As a C++ programmer, I'm sick of constantly having to do battle with my Mac's appalling keyboard. Poor kinetic feedback. Poor keys (on my aluminium, flat-key model) that I have to stab really hard, no hash key, no insert key etc etc. Yes I know that