XMLquery - contours do not used throughout the code, but only in the xml request selected
HelloWe use-> database Oracle 11 g Enterprise Edition Release 11.2.0.2.0 - 64 bit
We have a part of our system of s/w works as:
Drop table xml_tbl
create table xml_tbl (
xml_msg_id integer,
xml_msg_text xmltype
);
insert into xml_tbl values(1, '<main xmlns:ns1="Abc:SET"><ns1:id>1</ns1:id></main>');
insert into xml_tbl values(1, '<main xmlns:ns1="Abc:SET"><ns1:id>1</ns1:id></main>');
insert into xml_tbl values(1, '<main xmlns:ns1="Abc:SET"><ns1:id>2</ns1:id></main>');
commit;
--Code
DECLARE
v_output CLOB;
FUNCTION fn_xmlquery (p_date IN DATE)
RETURN XMLTYPE
AS
v_xmlout XMLTYPE;
v_query CLOB
:= TO_CLOB (
'declare namespace ns1 = "Abc:SET"; fn:count($File_Data/main/ns1:id)');
BEGIN
SELECT XMLQUERY (v_query
PASSING t_tbl.xml AS "File_Data" RETURNING CONTENT)
INTO v_xmlout
FROM (SELECT XMLAGG (xml_msg_text) AS xml
FROM xml_tbl t
WHERE XMLEXISTS (
'declare namespace ns1 = "Abc:SET"; /main/ns1:id = ("1") '
PASSING xml_msg_text)) t_tbl;
RETURN (v_xmlout);
END fn_xmlquery;
BEGIN
v_output :=
XMLType.getClobVal (fn_xmlquery (TO_DATE ('20121231', 'YYYYMMDD')));
DBMS_OUTPUT.put_line (v_output);
END;
--Now if I try the outline on xml_tbl query as:
drop outline o_name;
CREATE OUTLINE o_name ON
SELECT XMLAGG (xml_msg_text) AS xml
FROM xml_tbl t
WHERE XMLEXISTS (
'declare namespace ns1 = "Abc:SET"; /main/ns1:id = ("1") '
PASSING xml_msg_text);
select * from dba_outlines;
If we execute just this request again, contour O_Name is used as can be seen in:Select * from dba_outlines;
It is used in the two schemas in DB, as we wish.
But if we execute all the code above, it takes, to make all the xquery deals.
O_Name OUTLINE is not used. Not even in the same pattern.
You can try the above, in your machine to replicate.
Please suggest how to do the work described in this case. As things do not work in our system at all because the query plan wrong by the above query on which we create the contour.
Thank you...
Published by: user8941550 on January 9, 2013 23:16
Maybe the XQuery Modules will build in a future version of the database.
So please can you suggest a better way we can use so that we can avoid the dynamic xquery thing.
Make the dynamic SQL set instead, not only the request XQuery and run it via EXECUTE IMMEDIATE or DBMS_SQL.
This way, the CBO know XQ expression to analyze the time and be able to optimize it.
I'm not a big fan of this approach, but the lack of something better.
Tags: Database
Similar Questions
-
Why xmlindex is not used in the slow queries on xml binary table eval?
I run a slow simple query on Oracle 11.2.0.1 database server that does not use a xmlindex. Instead, a full table scan against the table eval binary xml occurs. This is the query:
The predicate is not selective at all - the number of rows returned is the same as the number of rows in table (325 550 in the eval table xml documents). When different values are used, which brings the number of lines down to ~ 33%, the xmlindex still is not used - as is expected in a purely relational XML environment.select -- /*+ NO_XMLINDEX_REWRITE no_parallel(eval)*/ defid from eval, XMLTable(XMLNAMESPACES(DEFAULT 'http://www.cigna.com/acme/domains/eval/2010/03', 'http://www.cigna.com/acme/domains/derived/fact/2010/03' AS "ns7"), '$doc/eval/derivedFacts/ns7:derivedFact' passing eval.object_value as "doc" columns defid varchar2(100) path 'ns7:defId' ) eval_xml where eval_xml.defid in ('59543','55208');
My question is why would'nt the xmlindex be used somehow full scan compared to a sweep of full table that cross the xml for each record in paper table eval?
FFS suspicion would apply to a field of type xmlindex index?
Here is the definition of xmlindex:
Here is the definition of table eval:CREATE INDEX "EVAL_XMLINDEX_IX" ON "EVAL" (OBJECT_VALUE) INDEXTYPE IS "XDB"."XMLINDEX" PARAMETERS ('XMLTable eval_idx_tab XMLNamespaces(DEFAULT ''http://www.cigna.com/acme/domains/eval/2010/03'', ''http://www.cigna.com/acme/domains/derived/fact/2010/03'' AS "ns7"),''/eval'' COLUMNS defId VARCHAR2(100) path ''/derivedFacts/ns7:derivedFact/ns7:defId''');
Purified sample extract of XML:CREATE TABLE "N98991"."EVAL" OF XMLTYPE ( CONSTRAINT "EVAL_ID_PK" PRIMARY KEY ("EVAL_ID") USING INDEX PCTFREE 10 INITRANS 4 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "ACME_DATA" ENABLE ) XMLTYPE STORE AS SECUREFILE BINARY XML ( TABLESPACE "ACME_DATA" ENABLE STORAGE IN ROW CHUNK 8192 CACHE NOCOMPRESS KEEP_DUPLICATES STORAGE(INITIAL 106496 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) ) ALLOW NONSCHEMA ALLOW ANYSCHEMA VIRTUAL COLUMNS ( "EVAL_DT" AS (SYS_EXTRACT_UTC(CAST(TO_TIMESTAMP_TZ(SYS_XQ_UPKXML2SQL( SYS_XQEXVAL(XMLQUERY( 'declare default element namespace "http://www.cigna.com/acme/domains/eval/2010/03"; (::) /eval/@eval_dt' PASSING BY VALUE SYS_MAKEXML(128,"XMLDATA") RETURNING CONTENT ),0,0, 16777216,0),50,1,2),'SYYYY-MM-DD"T"HH24:MI:SS.FFTZH:TZM') AS TIMESTAMP WITH TIME ZONE))), "EVAL_CAT" AS (CAST(SYS_XQ_UPKXML2SQL(SYS_XQEXVAL(XMLQUERY( 'declare default element namespace "http://www.cigna.com/acme/domains/eval/2010/03";/eval/@category' PASSING BY VALUE SYS_MAKEXML(128,"XMLDATA") RETURNING CONTENT ),0,0, 16777216,0),50,1,2) AS VARCHAR2(50))), "ACME_MBR_ID" AS (CAST(SYS_XQ_UPKXML2SQL(SYS_XQEXVAL(XMLQUERY( 'declare default element namespace "http://www.cigna.com/acme/domains/eval/2010/03";/eval/@acmeMemberId' PASSING BY VALUE SYS_MAKEXML(128,"XMLDATA") RETURNING CONTENT ),0,0, 16777216,0),50,1,2) AS VARCHAR2(50))), "EVAL_ID" AS (CAST(SYS_XQ_UPKXML2SQL(SYS_XQEXVAL(XMLQUERY( 'declare default element namespace "http://www.cigna.com/acme/domains/eval/2010/03";/eval/@evalId' PASSING BY VALUE SYS_MAKEXML(128,"XMLDATA") RETURNING CONTENT ),0,0, 16777216,0),50,1,2) AS VARCHAR2(50))) ) PCTFREE 0 PCTUSED 80 INITRANS 4 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE ( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT ) TABLESPACE "ACME_DATA" ;
Oracle XML DB 11g Release 2 Developer's Guide is not much help...<?xml version = '1.0' encoding = 'UTF-8' standalone = 'yes'?><eval createdById="xxxx" hhhhMemberId="37e6f05a-88dc-41e9-a8df-2a2ac6d822c9" category="eeeeeeee" eval_dt="2012-02-11T23:47:02.645Z" evalId="12e007f5-b7c3-4da2-b8b8-4bf066675d1a" xmlns="http://www.xxxxx.com/vvvv/domains/eval/2010/03" xmlns:ns2="http://www.cigna.com/nnnn/domains/derived/fact/2010/03" xmlns:ns3="http://www.xxxxx.com/vvvv/domains/common/2010/03"> <derivedFacts> <ns2:derivedFact> <ns2:defId>12345</ns2:defId> <ns2:defUrn>urn:mmmmrunner:Medical:Definition:DerivedFact:52657:1</ns2:defUrn> <ns2:factSource>tttt Member</ns2:factSource> <ns2:origInferred_dt>2012-02-11T23:47:02.645Z</ns2:origInferred_dt> <ns2:factValue> <ns2:type>boolean</ns2:type> <ns2:value>true</ns2:value> </ns2:factValue> </ns2:derivedFact> <ns2:derivedFact> <ns2:defId>52600</ns2:defId> <ns2:defUrn>urn:ddddrunner:Medical:Definition:DerivedFact:52600:2</ns2:defUrn> <ns2:factSource>cccc Member</ns2:factSource> <ns2:origInferred_dt>2012-02-11T23:47:02.645Z</ns2:origInferred_dt> <ns2:factValue> <ns2:type>string</ns2:type> <ns2:value>null</ns2:value> </ns2:factValue> </ns2:derivedFact> <ns2:derivedFact> <ns2:defId>59543</ns2:defId> <ns2:defUrn>urn:ddddunner:Medical:Definition:DerivedFact:52599:1</ns2:defUrn> <ns2:factSource>dddd Member</ns2:factSource> <ns2:origInferred_dt>2012-02-11T23:47:02.645Z</ns2:origInferred_dt> <ns2:factValue> <ns2:type>string</ns2:type> <ns2:value>INT</ns2:value> </ns2:factValue> </ns2:derivedFact> ... With the repeating <ns2:derivedFact> element continuing under the <derivedFacts>
Any help is appreciated.
Kind regards
Rick BlanchardXMLIndex definition is not correct, for the following reasons:
In the COLUMNS clause, the path expression is compared to the context from the main event of XQuery item (HERE "/ eval").
If you use an initial slash as you did, this indicates that the context item is an element of "derivedFacts" (which is not correct since it is an "eval" element).
Therefore, the path points to no existing node:derivedFact XMLTYPE path ''/derivedFacts/ns7:derivedFact'' virtual
There is a mismatch between the statements of prefix ns7, probably a typing mistake?
''http://www.cigna.com/acme/domains/derived/fact/2010/03'' AS "ns7" ... ''http://www.cigna.com/acme/domains/derived/FACT/2010/03'' AS "ns7"
What "eval_xml" is referring to here?
passing eval_xml.derivedFact
The path to "defId" don't go too:
defId VARCHAR2(100) path ''/derivedFacts/ns7:derivedFact/ns7:defId''
Try this one, it should help you to:
CREATE INDEX "EVAL_XMLINDEX_IX" ON "EVAL" (OBJECT_VALUE) INDEXTYPE IS "XDB"."XMLINDEX" PARAMETERS ( 'XMLTable eval_idx_tab_I XMLNamespaces(''http://www.cigna.com/acme/domains/derived/fact/2010/03'' AS "ns7", DEFAULT ''http://www.cigna.com/acme/domains/eval/2010/03''), ''/eval'' COLUMNS eval_catt VARCHAR2(50) path ''@category'', derivedFact XMLTYPE path ''derivedFacts/ns7:derivedFact'' virtual XMLTable eval_idx_tab_II XMLNamespaces(''http://www.cigna.com/acme/domains/derived/fact/2010/03'' AS "ns7", DEFAULT ''http://www.cigna.com/acme/domains/eval/2010/03''), ''/ns7:derivedFact'' passing derivedFact COLUMNS defId VARCHAR2(100) path ''ns7:defId''' );
-
Zip code does not match with the Service request number
Hello
I can, check the State of repair of my Xbox to the t.
It keeps giving the same error (ZIP Code does not match with the Service request number).I tried to register the product.
but it seems impossible, if it has a status of repair open.a catch 22.
Hello
I suggest you go through the following link.
-
I'm not able to merge the partition not used to the local disk partition
I'm using windows xp service pack 3 and I have deleted my partitions from disk 2, but im not able to merge the partition not used to the local disk partition, what should I do?
Original title: HELP ASAP!Hi Joseph.
Suggestion of PML in the thread below, can be very useful.
-
Hello
Can I remove Logical columns at the level of the business layer that I'm not going to use the layer of presentation as the ID or foreign key columns? It will not affect the relations to the business layer?
Kind regards
Nestor
Hi Nestor,.
It won't unless they are used as keys, columns sort order, the ID column or the likes. But you can leave them in the MDB layer and expose just in the presentation layer - just in case you need it later. It is not use all the resources or generate overhead. More: Developer of the RPD should be used to work with loads of columns
-
Document windows does not use all the available on new monitor display area
Hello
I have a new monitor - a Benq BL2711.
I have set up as my secondary monitor on display in Windows 8.
I can put Photoshop (CS6) on this screen and maximize the it, but there is a vast space not used in the document window, which is not used. I want to show a lot more of my images that I can currently, but the document window will not only fill all that screen real estate. A large part of it is lost.
The panels occupy the right space to the bottom of the screen, but the window of the document (or the display area?) uses only 60% of the height of the screen.
What is a limitation or do I have to configure something? (I have reset the workspace of photography).
Thanks for any help
Nick
It is really a shot in the water, but it's the space used by the "timeline" Panel when it is open. Try to check in the menu window and close the bottle.
Other that that, there are always some good old Reset preferences. Make sure you save the custom actions/brushes/presets and so forth first!
-
A way to show items that are not used in the sequence
Hello world
is there a way to display items that are not used in the sequence.
in order not to forget the "rushes" in the Assembly?
my best,
Turn on the use Audio and video columns in the sandbox and then sort by those.
-
May not use all the available space in the data store
Hello
We have a HP DL580 G7 Server P410i raid controller with 8 x 1 TB HDD.
I create a raid 1 with 2 hard drives (1 TB) and raid 5 with 6 hard drives (5 TB) and install ESXi 5.1 in the first data store (1 to).
After installation when I tried to create the 5 TB data store, (ESXi detects and displays the space available 5 TB) it does use that almost 2.5 TB! and may not use all the space
I also installed the ESXi 5.5 but still no luck.
This Ko seems to apply to you: http://kb.vmware.com/kb/2006942
-
I want to insuscribe because I do not use of the applications. Thank you
I want to insuscribe because I do not use of the applications. Thank you
In order to cancel the order, please contact customer service
You can use: http://helpx.adobe.com/x-productkb/global/phone-support-orders.html
For more information on cancellation: cancel your creative cloud membership
-
Why can I not use hidden or display point only to store the value for insertion?
Hi, gurus:
I have a question:
I implemented a form with the region of report in a page, the update works OK, but the add function has a problem:
There is a column, offender_ID, which is a foreign key to another table, it must not be null during insertion. However, even I pass the ID of the author of the offence of master page when user click on the button create and he did watch in the form, it must be a text tabled for insert success, why can I not use hidden or display point only to store this value for insert? (If I use hidden or display single element insert will be successful, apex reports I tried to insert a null value for the offender_ID column.)
Thanks in advance.
SamHello
There is a column, offender_ID, which is a foreign key to another table, it must not be null during insertion. However, even I pass the ID of the author of the offence of master page when user click on the button create and he did watch in the form, it must be a text tabled for insert success, why can I not use hidden or display point only to store this value for insert? (If I use hidden or display single element insert will be successful, apex reports I tried to insert a null value for the offender_ID column.)
I think that both hidden and display elements have attributes that can cause problems because of different ways these function elements as the only non-display and feature no hidden items. The only items have a "Save Session State' yes/no 'control'? This can be a problem.
Would you do that? Do these regular items instead and see if you can get those working. Then, we will try to change the fields back to hidden or display only.
Howard
Congratulations. I'm glad you found the solution.
Published by: Howard (in training) April 11, 2013 10:26
-
can I install PES 11 on two laptops that are not used in the same place?
Can I install PES 11 on two laptops that are not used in the same place or at the same time?
Yes, your license entitles you to two simultaneous activations.
-
HP DVD Writer does not read or write DVD, but only the CD
My HP DVD 1135t burner does not read or write DVD but only the CD. What is the problem? Please help me.
CD/DVD players use different lasers for reading/writing DVD from the CD. All indications would point to your laser DVD as having failed. You could try to remove your drive and install it in another computer to see if the problem follows your player or your computer, but my bet is that the drive must be replaced.
HTH,
JW -
My subscription has ceased, even I made my last payment on 22.03.2016. My Plan marked as expired. The system is not providing any other solution but only update my payment information, I did. Nothing seems to happen. Online support is disabled. I have no choice but to ask here for help! I need to work, I need to work now!))
This is an open forum, not Adobe support... below to connect with Adobe personnel to help
While the forums are open 24/7 you can't contact Adobe support at any time
Chat support: Mon - Fri 05:00-19:00 (US Pacific Time)<=== note="" days="" and="">===>
Don't forget to stay signed with your Adobe ID before accessing the link below
Creative cloud support (all creative cloud customer service problems)
-
How to make a refund on an app that I bought by mistake I can not use in the United States
I have Down loaded and bought an antenna app companion that can not be used in the United States for $2.99. How can I get a refund
Purchases are considered final, but you can try the page 'report a problem' to contact iTunes Support and see if they will refund or credit you: http://reportaproblem.apple.com
Or you can try to contact iTunes support via this page: https://support.apple.com/contact or https://www.apple.com/emea/support/itunes/contact.html
-
FBI and XMLINDEX not use by the optimizer
Hello
I've created a function based index but optimizer is never using my index and found for BINARYXML FBI is not suggested rather THAN XMLINDEX is good, it seems does not work for me, but even.
I tried to use tips but doesn't help me at all. Any suggestions would be really useful.
SQL > show parameter index
VALUE OF TYPE NAME
------------------------------------ ----------- ------------------------------
optimizer_index_caching integer 0
OPTIMIZER_INDEX_COST_ADJ integer 1
optimizer_use_invisible_indexes boolean FALSE
skip_unusable_indexes Boolean TRUE
SQL >SQL > desc FXXX_SEC_POS_FB
Name Null? Type
------------------------------------------------------------------------------------- -------- ----------------------------------------------------------
RECID A NOT NULL VARCHAR2 (255)
XMLRECORD SYS. XMLTYPE BINARY STORAGESQL >
SQL * more: Production release 11.2.0.4.0 Wed Feb 11 06:34:39 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11 g Enterprise Edition Release 11.2.0.4.0 - 64 bit Production
With partitioning, OLAP, Data Mining and Real Application Testing optionsINDEX_NAME INDEX_TYPE VISIBILITY FUNCIDX_ DOMIDX_MANAGEM
------------------------------ --------------------------- --------- -------- --------------
SYS_IL0000174507C00003$ $ LOB VISIBLE
BASED ON A NORMAL VISIBLE ENABLED FUNCTION IX_FBNK_SEC_POS_FB_C2
BASED ON A NORMAL VISIBLE ENABLED FUNCTION IX_FBNK_SEC_POS_FB_C81SELECT t.RECID FROM FBNK_SEC_POS_FB WHERE SECURITY_NUMBER = t'000566-000' and xmlexists ("$xmlrecvar/row [c81/text () ="US0010001"]' by the WAY ')
XMLRECORD AS 'xmlrecvar')
The higher the SQL statement execution Plan:
Hash value of plan: 4259655978
--------------------------------------------------------------------------------------
| ID | Operation | Name | Lines | Bytes | Cost (% CPU). Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 361K | 738 M | 197K (2) | 00:39:31 |
| 1. SEMI NESTED LOOPS. | 361K | 738 M | 197K (2) | 00:39:31 |
|* 2 | TABLE ACCESS FULL | FBNK_SEC_POS_FB | 4427 | 9247K | 75786 (1) | 00:15:10 |
|* 3 | XPATH EVALUATION. | | | | |
--------------------------------------------------------------------------------------Name of the query block / Alias object (identified by the operation identity card):
-------------------------------------------------------------1 SALT$ BCF67709
2 SALT$ BCF67709 / T@SEL$1Information of predicates (identified by the operation identity card):
---------------------------------------------------2 - filter("SECURITY_NUMBER"='000566-000')
3 - filter("P".") C_01$ "= 'US0010001')Projection of the column information (identified by the operation identity card):
-----------------------------------------------------------1 (#keys = 0) "T". "RECID" [VARCHAR2, 255], "T" "." " SYS_NC00003$ '[LOB, 4000],
"SECURITY_NUMBER" [VARCHAR2, 12]
2 - « T ». "RECID" [VARCHAR2, 255], "T" "." " SYS_NC00003$ '[LOB, 4000],
"SECURITY_NUMBER" [VARCHAR2, 12]
3 VALUE (A0) [4000]Note
-----
-dynamic sample used for this survey (level = 2)
LETTER: SQL: 2:Full: SELECT t.RECID FROM FBNK_SEC_POS_FB WHERE SECURITY_NUMBER = t'000566-000' and xmlexists (' $xmlrecvar/row [c81 / text ()])(= "US0010001"]' in PASSING XMLRECORD AS 'xmlrecvar')
4096 selected records
You probably won't see the difference in approach...
I have NOT used and not STRUCTURED XML, but a STRUCTURED index rather XML index...
- Index unstructured XML when introduced in 11.1 and use an ARRAY of path. Unstructured XML indexes are mainly used for research "blurred".
- Structured XML indexes where introduced in 11.2 and make use of one or more TABLES of CONTENTS that contain, must contain content of the structured parts in the XML document
So I have not used
CREATE INDEX IX_FXXX_AAA_BBB_FB_FB ON FXXX_AAA_BBB_FB (XMLRECORD) INDEXTYPE IS XDB.XMLINDEX PARAMETERS (' PATH TABLE IX_PATH_TABLE PATHS ( INCLUDE ( /row/c2 /row/c81 ))' );
but instead I used a XML structured, based on the function XMLTABLE index
CREATE INDEX IX_FXXX_AAA_BBB_FB_FB ON FXXX_AAA_BBB_FB (XMLRECORD) INDEXTYPE IS XDB.XMLINDEX PARAMETERS (q'# GROUP SXI_GROUP XMLTABLE SXI_CONTENT_TABLE '/row' COLUMNS C2 VARCHAR2(100) PATH 'c2' , C81 VARCHAR2(100) PATH 'c81' #');
On those, I also created EXTRA build secondary indexes on the columns of the TABLE CONTENT with the name 'SXI_CONTENT_TABLE '.
create index SEC_FXXX_C2_FB on SXI_CONTENT_TABLE(C2); create index SEC_FXXX_C81_FB on SXI_CONTENT_TABLE(C81); create unique index SEC_FXXX_RIDC2C81_FB on SXI_CONTENT_TABLE(RID, C2, C81);
...
Maybe you are looking for
-
Computer hangs on the installation of the Windows updates
I was out of town for two weeks. On my return, I turned on my laptop and downloaded Wondos 27 updates and started to install. However, when he started to install the update # 26 he hung up. It was like that for three hours. I turned off the computer
-
I have a mp3 player and I could get into to get my music but now when plug the mp3 it tells me there is a code 10 and the mtp device does not work, how can it be addressed? now I can't have my music so I can transfer to another mp3.
-
I can turn on the firewall, the error is "error code 0 * 80070422"»
I'm in trouble with conect to the Internet, my firewall can not turn on although I try my best, please help me, these days will be in the darkness with me because of boredom! IE does not, CHrome does not, Opera does not work! just in trouble!
-
AIP - SSM maintenance of Configuration in Active mode Stdby
So, I'm pretty new to the AIP - SSM but not for the ASA. It seems that very few of the AIP module configuration gets copied to the AIP Stdby, nothing else that what appears in the config of the ASA (ACL, etc.). Thus, all elements of specific configur
-
How to install the nk2 files in windows 7
where to install nk2 AutoComplete addresses in Windows 7