Analyzing all tables in schema
Hello everyone,
I am used below command to analyze all tables in schema
EXEC DBMS_STATS.gather_schema_stats (ownname => 'CONTRACT', cascade =>true,estimate_percent => dbms_stats.auto_sample_size);when look at tables in dba_tables, for none of the tables LAST_ANALYZED date is changed to today. But when I did below
EXECUTE DBMS_STATS.GATHER_TABLE_STATS(ownname => 'CONTRACT', tabname => 'CONT_NAME', method_opt => 'FOR ALL COLUMNS', granularity => 'ALL', cascade => TRUE, degree => DBMS_STATS.DEFAULT_DEGREE);I am see LAST_ANALYZED changed to today in dba_tables.
If I need to change LAST_ANALYZED to all tables do I need to produce the above command for all tables? There are more then 700 tables for this application.
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for IBM/AIX RISC System/6000: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
user3636719 wrote:
EXEC DBMS_STATS.gather_schema_stats (ownname => 'CONTRACT', cascade =>true,estimate_percent => dbms_stats.auto_sample_size);
and
EXECUTE DBMS_STATS.GATHER_TABLE_STATS(ownname => 'CONTRACT', tabname => 'CONT_NAME', method_opt => 'FOR ALL COLUMNS', granularity => 'ALL', cascade => TRUE, degree => DBMS_STATS.DEFAULT_DEGREE);are fundamentally different, you cannot compare them. In gather_schema_stats, oracle used most defaults, decided none needed new stats collected, so it didn't do anything. In the second, you changed method_opt, granularity and degree etc from default values (as set in your db perhaps), so db went ahead and collected stats.
You need to look up manual and try to understand the default and non-default behavior for parameters and then make an educated decision. Changing stats randomly is not generally a great idea.
Similar Messages
-
Analyze all tables of one schema
hi,
the analyze table command is:
analyze table hr.employees compute statistics;
Now I want analyze all tables in the hr schema
how can I do it in a easy way,
thanks,
Zhiwei.the only way to disable monitoring (globally) is to set statistics_level=basic.Exactly.
SYS@db102 SQL> select table_name,monitoring from dba_tables
2 where table_name like 'TEST%';
TABLE_NAME MON
TEST_P YES
TEST_MV YES
TEST_F YES
TEST11 YES
TEST YES
TEST_TABLE YES
TEST_PART YES
TEST_LOB YES
TEST_EMP YES
TESTDECIMAL YES
TEST3 YES
TEST1_DL2 YES
TEST01 YES
13 rows selected.
SYS@db102 SQL> alter system set statistics_level=basic;
System altered.
SYS@db102 SQL> select table_name,monitoring from dba_tables
2 where table_name like 'TEST%';
TABLE_NAME MON
TEST_P NO
TEST_MV NO
TEST_F NO
TEST11 NO
TEST NO
TEST_TABLE NO
TEST_PART NO
TEST_LOB NO
TEST_EMP NO
TESTDECIMAL NO
TEST3 NO
TEST1_DL2 NO
TEST01 NO
13 rows selected.
SYS@db102 SQL> that's what I meant by "in 10g you have to do it explicitly". -
How to delete all TABLEs in Schema SYS which are created since 09:15?
Unfortunately a script created lots of tables in the wrong Tablespace (=SYSTEM) and Schema (=SYS).
How can I delete (in one DDL command) all TABLES which are created inTablespace=SYSTEM and SCHEMA=SYS
during the last 3 hours resp. since 09:15 of 25th Sep 2011 ?
Alternatively: How can I move these TABLEs to another Schema (e.g. ATEST) and Tablespace (USERS)?
Is this possible with Oracle XE or only with Oracle Enterprise?
Peteruser559463 wrote:
Unfortunately a script created lots of tables in the wrong Tablespace (=SYSTEM) and Schema (=SYS).
How can I delete (in one DDL command) all TABLES which are created inTablespace=SYSTEM and SCHEMA=SYS
during the last 3 hours resp. since 09:15 of 25th Sep 2011 ?
Alternatively: How can I move these TABLEs to another Schema (e.g. ATEST) and Tablespace (USERS)?
Is this possible with Oracle XE or only with Oracle Enterprise?
PeterYou can query dba_objects and join it with dba_tables where tablespace_name='SYSTEM' , then drop the tables result of the query; the idea is to use the following query;
SQL> select OWNER, OBJECT_NAME from dba_objects where OBJECT_TYPE='TABLE' and OWNER = 'SYS' and CREATED >= sysdate - 3 / 24;Please consider marking your questions as answered, when it is the case;
Handle: user559463
Status Level: Newbie
Registered: Feb 18, 2007
Total Posts: 583
Total Questions: 266 (186 unresolved)Edited by: orawiss on Sep 26, 2011 4:03 PM -
Fastest way to update column in all tables of schema
In our schema we have two columns ColA and ColB common in all tables in our schema.
Suppose these columns have values as below in all tables
ColA ColB
A1 B11
A12 B22
ABC DEF
Now we have to update ColA and ColB where we have alphanumeric values in all tables, some tables have few hundred records and some tables have millions of records.
Could you gurus suggest me with a fastest way to acheive this.
What we are thinking is to write a procedure where we can input multiple tables which could be updated simultaneously and make a collection within procedure with following values
ColA ColA_R ColB ColB_R
A1 aa B11 bb
A12 aaa B22 bbb
ABC No Update DEF No Update
So whenever we have value matching A1 update it with value aa if we have value matching B11 update it with value bb and so on.
Your inputs are welcome so that to acheive this in fastest manner.
Thanks,
Tony
Edited by: tony29743 on Nov 9, 2010 9:15 AMI would be tempted to do it something like this:
Create an index organized table for the cola updates (old_val, new_val) with a PK on old_val and another one for the colb Values. This could possibliy be a single table, depending on how many distinct values there were for cola and colb and if you are sure that "But if colA and colB have value A1 then it will be updated with aa".
Then do the updates as an updateable join view something like:
UPDATE (SELECT t1.cola, iot.new_val
from tab1 t1, new_values_iot iot
where t1.cola = iot.old_val)
SET cola = new_valThis would require two rounds of updates, one for cola and one for colb, but they could be parallelized somewhat by distributing the tables to be updated through several pl/sql blocks each updating a different set of tables.
You may be able to do it in a single query like:
UPDATE (SELECT t1.cola, t1.colb, iota.new_val new_vala, iotb.new_val new_valb
from tab1 t1, new_values_iot iota, new_values_iot iotb,
where t1.cola = iota.old_val and
t1.cola = iotb.old_val)
SET cola = new_vala,
colb = new_valbHowever, given that you said there were some values in both cola and colb that did not require updating, that may not work since the join will fail on one of cola or colb if that value is not in the IOT, so you will not get all of the rows updated. If, and it is a big if, either both of cola and colb or neither of cola annd colb need to be updated in a single row, it might work. So, looking at your original examples (ABC and DEF do not require updates but A1 does), if there could be as case where cola = 'A1' and colb = 'DEF' then you will have to do it in two updates per table.
John -
Datapump API: Import all tables in schema
Hi,
how can I import all tables using a wildcard in the datapump-api?
Thanks in advance,
tensai_tensai_ wrote:
Thanks for the links, but I already know them...
My problem is that I couldn't find an example which shows how to perform an import via the API which imports all tables, but nothing else.
Can someone please help me with a code-example?I'm not sure what you mean by "imports all tables, but nothing else". It could mean that you only want to import the tables, but not the data, and/or not the statistics etc.
Using the samples provided in the manuals:
DECLARE
ind NUMBER; -- Loop index
h1 NUMBER; -- Data Pump job handle
percent_done NUMBER; -- Percentage of job complete
job_state VARCHAR2(30); -- To keep track of job state
le ku$_LogEntry; -- For WIP and error messages
js ku$_JobStatus; -- The job status from get_status
jd ku$_JobDesc; -- The job description from get_status
sts ku$_Status; -- The status object returned by get_status
spos NUMBER; -- String starting position
slen NUMBER; -- String length for output
BEGIN
-- Create a (user-named) Data Pump job to do a "schema" import
h1 := DBMS_DATAPUMP.OPEN('IMPORT','SCHEMA',NULL,'EXAMPLE8');
-- Specify the single dump file for the job (using the handle just returned)
-- and directory object, which must already be defined and accessible
-- to the user running this procedure. This is the dump file created by
-- the export operation in the first example.
DBMS_DATAPUMP.ADD_FILE(h1,'example1.dmp','DATA_PUMP_DIR');
-- A metadata remap will map all schema objects from one schema to another.
DBMS_DATAPUMP.METADATA_REMAP(h1,'REMAP_SCHEMA','RANDOLF','RANDOLF2');
-- Include and exclude
dbms_datapump.metadata_filter(h1,'INCLUDE_PATH_LIST','''TABLE''');
dbms_datapump.metadata_filter(h1,'EXCLUDE_PATH_EXPR','LIKE ''TABLE/C%''');
dbms_datapump.metadata_filter(h1,'EXCLUDE_PATH_EXPR','LIKE ''TABLE/F%''');
dbms_datapump.metadata_filter(h1,'EXCLUDE_PATH_EXPR','LIKE ''TABLE/G%''');
dbms_datapump.metadata_filter(h1,'EXCLUDE_PATH_EXPR','LIKE ''TABLE/I%''');
dbms_datapump.metadata_filter(h1,'EXCLUDE_PATH_EXPR','LIKE ''TABLE/M%''');
dbms_datapump.metadata_filter(h1,'EXCLUDE_PATH_EXPR','LIKE ''TABLE/P%''');
dbms_datapump.metadata_filter(h1,'EXCLUDE_PATH_EXPR','LIKE ''TABLE/R%''');
dbms_datapump.metadata_filter(h1,'EXCLUDE_PATH_EXPR','LIKE ''TABLE/TR%''');
dbms_datapump.metadata_filter(h1,'EXCLUDE_PATH_EXPR','LIKE ''TABLE/STAT%''');
-- no data please
DBMS_DATAPUMP.DATA_FILTER(h1, 'INCLUDE_ROWS', 0);
-- If a table already exists in the destination schema, skip it (leave
-- the preexisting table alone). This is the default, but it does not hurt
-- to specify it explicitly.
DBMS_DATAPUMP.SET_PARAMETER(h1,'TABLE_EXISTS_ACTION','SKIP');
-- Start the job. An exception is returned if something is not set up properly.
DBMS_DATAPUMP.START_JOB(h1);
-- The import job should now be running. In the following loop, the job is
-- monitored until it completes. In the meantime, progress information is
-- displayed. Note: this is identical to the export example.
percent_done := 0;
job_state := 'UNDEFINED';
while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop
dbms_datapump.get_status(h1,
dbms_datapump.ku$_status_job_error +
dbms_datapump.ku$_status_job_status +
dbms_datapump.ku$_status_wip,-1,job_state,sts);
js := sts.job_status;
-- If the percentage done changed, display the new value.
if js.percent_done != percent_done
then
dbms_output.put_line('*** Job percent done = ' ||
to_char(js.percent_done));
percent_done := js.percent_done;
end if;
-- If any work-in-progress (WIP) or Error messages were received for the job,
-- display them.
if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0)
then
le := sts.wip;
else
if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
then
le := sts.error;
else
le := null;
end if;
end if;
if le is not null
then
ind := le.FIRST;
while ind is not null loop
dbms_output.put_line(le(ind).LogText);
ind := le.NEXT(ind);
end loop;
end if;
end loop;
-- Indicate that the job finished and gracefully detach from it.
dbms_output.put_line('Job has completed');
dbms_output.put_line('Final job state = ' || job_state);
dbms_datapump.detach(h1);
exception
when others then
dbms_output.put_line('Exception in Data Pump job');
dbms_datapump.get_status(h1,dbms_datapump.ku$_status_job_error,0,
job_state,sts);
if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
then
le := sts.error;
if le is not null
then
ind := le.FIRST;
while ind is not null loop
spos := 1;
slen := length(le(ind).LogText);
if slen > 255
then
slen := 255;
end if;
while slen > 0 loop
dbms_output.put_line(substr(le(ind).LogText,spos,slen));
spos := spos + 255;
slen := length(le(ind).LogText) + 1 - spos;
end loop;
ind := le.NEXT(ind);
end loop;
end if;
end if;
-- dbms_datapump.stop_job(h1);
dbms_datapump.detach(h1);
END;
/This should import nothing but the tables (excluding the data and the table statistics) from an schema export (including a remapping shown here), you can play around with the EXCLUDE_PATH_EXPR expressions. Check the serveroutput generated for possible values used in EXCLUDE_PATH_EXPR.
Use the DBMS_DATAPUMP.DATA_FILTER procedure if you want to exclude the data.
For more samples, refer to the documentation:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28319/dp_api.htm#i1006925
Regards,
Randolf
Oracle related stuff blog:
http://oracle-randolf.blogspot.com/
SQLTools++ for Oracle (Open source Oracle GUI for Windows):
http://www.sqltools-plusplus.org:7676/
http://sourceforge.net/projects/sqlt-pp/ -
Avoid trigger on all tables in schema
I need to set a CREATE TIME STAMP to the database server timestamp (not the session timestamp) in all tables in a schema for both create and update. Other than creating a trigger on all the tables in the schema is there a less tedious way to do that?
Similarly I need to to set columns such as CREATE_USER, LAST_UPDATE_USER.
Thanks in anticipation.You can easily generate the DDL to add the new columns.
As far as populating the columns your choices are either use table befire insert and update triggers to populate the columns or have the application provide the necessary information.
The basic trigger logic would be pretty well the same for all the tables so writing a little SQL or PL/SQL to generate the trigger code should be pretty straight forward.
Depending on your application, such as web based with only one Oracle user, you may need to obtain the real user via dbms_application_info set by the application server based logic.
HTH -- Mark D Powell --
Edited by: Mark D Powell on May 5, 2010 7:48 AM -
Hi,
I want to truncate all tables (300 tables) in a schema. There are some enabled constraints in this schema. I want to keep all tables attached objects (like indexes, constraints, etc). Id like to create a procedure to do this job. What's the safe and right way for this?
I am thinking as follows:
1- Retrieve all user constraints name using user_constrants view and then disable them.
2- Retrieve all user tables name using user_tables view and then Truncate them.
3- Enable all constraints that were disabled in step 1.
Is this a safe and right way?
Let me know your thought please. Thanks.The table was probably created using double qoutes.
declare
v_new_tab_name varchar2(35);
for c1 in (select table_name from user_tables) loop
begin
execute immediate ( 'truncate table '||C1.Table_Name );
exception
when others then
v_new_tab_name := '"' || C1.Table_Name|| '"' ;
execute immediate (' truncate table '||v_new_tab_name) ;
end ;
end loop;
end; -
Trigger for logging changes(DML changes) for All tables in Schema
Hi ,
Is there a way to create a schema level trigger to audit the DML changes that affect all the tables.I need the output in my log table as
1) the table name on which the DML occurred
2) type of DML
3) column names affected.
I know this can be achieved through enabling AUDIT or by creating dynamically, triggers for each tables...
Is there a way to create a single trigger to achieve this??It's not possible to create DML trigger on schema level
I think the only way is to create the triggers dynamically for each table..
Re: Schema level Database triggers by Kamran Agayev
Edited by: jeneesh on Oct 12, 2012 6:39 PM -
Export all tables in schema using exp utility
I need to export all the tables in a schema based on a where clause, how can I do this without having to identify all the tables in the tables= parameter?
You can get all the tables by doing a user-level export, i.e.
exp scott/tiger@TNS_name owner=scottwill export all Scott's tables. If you need to export only some of the tables owned by a particular user, you're stuck giving an explicit list until 10g.
Justin
Distributed Database Consulting, Inc.
http://www.ddbcinc.com/askDDBC -
Select from all tables in schema
hi, i am trying to x,y from tables in a schema, getting "missing expression" error, working with oracle 11g.
declare
v_sql varchar2(4000);
v_x number;
v_y number;
v_n number;
begin
for rec in (select table_name as table_name from all_tables where table_name like '%AM_%' ORDER BY 1) loop
v_sql := 'select a.idnumber, t.x, t.y, table(sdo_util.getvertices(a.geometry)) t FROM '||rec.table_name ||' a';
EXECUTE IMMEDIATE v_sql INTO v_n, v_x, v_y;
dbms_output.put_line(v_n||v_x||v_y);
end loop;
end;hi two rows, with idnum and geometry columns...
IDNUM
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
GD8
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(-.48230432, 51.4645609, -.47600566, 51.464582, -.47206108, 51.4645953, -.4654
6537, 51.4646174, -.46423724, 51.4646216, -.45892656, 51.4646394, -.45671873, 51
.4646468, -.45007509, 51.4646691, -.4487052, 51.4646737, -.44809122, 51.4646758,
-.44748667, 51.4646778, -.44118568, 51.4646989, -.44038184, 51.4647016, -.43534
624, 51.4647186, -.43415307, 51.4647226, -.43413338, 51.4647226, -.43410223, 51.
4647227, -.43408667, 51.4647228, -.43408688, 51.4648537, -.43408691, 51.4648694,
-.43408703, 51.4649432, -.43408705, 51.4649579, -.43408717, 51.4650319, -.4340872,
51.4650481, -.43408741, 51.465177, -.4341061, 51.4651769, -.43413411, 51.465
1768, -.43415863, 51.4651767, -.43493934, 51.4651741, -.43724392, 51.4651664, -.
4381469, 51.4651633, -.43876878, 51.4651612, -.44038073, 51.4651558, -.4409811,
51.4651538, -.44732658, 51.4651325, -.44759329, 51.4651316, -.44870078, 51.46512
79, -.45213755, 51.4651164, -.45482423, 51.4651073, -.45795448, 51.4650968, -.46
041684, 51.4650886, -.46194096, 51.4650834, -.46348669, 51.4650783, -.46492913,
51.4650734, -.46744722, 51.465065, -.47410127, 51.4650426, -.47616935, 51.465035
7, -.48152654, 51.4650177, -.48230505, 51.4650151, -.48235217, 51.4650149, -.482
35215, 51.4650018, -.48235145, 51.4645722, -.48235143, 51.4645607, -.48230432, 51.4645609))
IDNUM
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
GD4
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(-.48497261, 51.4772685, -.48209892, 51.4772786, -.48097228, 51.4772825, -.474
22571, 51.477306, -.47275437, 51.4773112, -.46898013, 51.4773243, -.46659847, 51
.4773326, -.46535204, 51.477337, -.4624971, 51.4773469, -.46135428, 51.4773509,
-.45879869, 51.4773598, -.45693251, 51.4773663, -.45570651, 51.4773706, -.453196
56, 51.4773794, -.45006644, 51.4773903, -.44747333, 51.4773993, -.44686181, 51.4774014, -.44408948,
51.4774111, -.4389499, 51.477429, -.43830451, 51.4774313, -.
4346623, 51.477444, -.43398218, 51.4774464, -.43331459, 51.4774487, -.43326608,
51.4774489, -.43326612, 51.4775874, -.43326612, 51.4776043, -.43326616, 51.47774
86, -.43326616, 51.4777641, -.43326619, 51.4779031, -.4333147, 51.4779029, -.472
655, 51.4777657, -.47413516, 51.4777605, -.48497272, 51.4777227, -.48502579, 51.
4777226, -.48502579, 51.4777106, -.48502568, 51.4772809, -.48502568, 51.4772684,
-.48497261, 51.4772685)) -
List All Tables in Schema with LONG ?
Is there a way to ID any Table in my Schema that has a LONG data type ?
Looking for Query
Thank you!or
SELECT table_name,column_name FROM user_Tab_Columns WHERE data_type='LONG'or
SELECT table_name,column_name FROM cols WHERE data_type='LONG'max -
Does improve performance to analyze all tables?
Will the SELECT, INSERT, UPDATE and DELETE commands work faster if I analyze the main tables every month?
It's unlikely that you will see month-on-month improvement. Once the tables get to a certain size the stats son't really get stale (if you add 10,000 records a month to a table with 10,000,000 rows, there's not really a lot of difference).
So the advice is to gather stats for your tables once. Then use the monitoring option for tables that you think may be volatile and refresh their stats if they have grown stale. Note that in 10g the monintoring option has been deprecated because DBMS_STATS now supports the option to explicitly refresh stale statistics.
Cheers, APC -
Need to grant DML privileges to all tables in few schemas
Hi,
I need to grant DML privileges to all tables in few schemas to a role. How can I achieve that?
I thought it's below syntax but it doesn't work. Please advice.
grant ALL ON ALL TABLES IN SCHEMA <Schema_name> TO <role_name>;Thanks,
GangadharGR wrote:
Hi,
I need to grant DML privileges to all tables in few schemas to a role. How can I achieve that?
I thought it's below syntax but it doesn't work. Please advice.
grant ALL ON ALL TABLES IN SCHEMA <Schema_name> TO <role_name>;
There is no single command to grant privileges at that level. There are either ANY privileges or privileges on an object.
You can write a bit of code to generate and execute what you want, but you would have to rerun it if any new tables were created. -
Grant select only to all tables in certain schemas
need to create an oracle database user with 'select only' right to all tables in schema OM + OE ( Order Management), Inventory(INV) and AR ( Account Receivables)
apart from above suggestion dont forget to use to accomodate other schemas OM + OE ( Order Management), Inventory(INV) and AR ( Account Receivables);
where a.owner in ('OM','OE','AR','INV');
-- Raman. -
Gather_schema_stats not picking up all tables
My Oracle version is 9.2.0.5 and OS is unix on AIX 4.3
I am trying to Analyze all tables and indexes in my current schema using :
execute dbms_stats.gather_schema_stats(ownname=>null, cascade=>true);
However, out of the 29 tables that the current user owns, only 23 tables has LAST_ANALYZED to the date when this was run. 6 of the tables don't have a LAST_ANALYZED date.
What may be the reason that those 6 tables are skipped during analyze? They definitely belong to the same user and also they are not partitioned tables. Is there any place I can check ?
ThanksYou hit Bug#2453682
As workaround use dbms_stats.gather_tables_stats on object tables
Maybe you are looking for
-
HT1657 How do I watch a rented movie in Itunes?
I have rented an SD movie in Itunes, How do I select it to watch it?
-
SAP ALV report scheduling background in excel format
Hi Gurus, We are using SAP 4.7 and using different SAP reports.Now I want to send SAP ALV report in excel format directly from SAP in background.Now we send these reports in background weekly by using autimetic scheduling but this is PDF format.Now I
-
IPhoto and Aperture... working together? Tips please?
Hi there, I'm a new Mac user. I moved over from the PC where I used Adobe Photoshop and ACDsee image viewer. I wanted to get the Aperture experience so I now have Aperture 2. The 1st part of my problem is, a lot of my photos are already "in" iPhoto '
-
Peopletools 8.49.05 HCM 9.0 and Fins 9.0 In Integration Broker, we have a service operation vendor_sync set up between fins and hcm. All Vendor transactions are showing up as moving successully from fins to hcm. All vendors, however, are not required
-
I'm having a small but annoying issue with FF10. In the past, I have watched a video on a website that I visited to get information on a diet for a family member. I have not visited that site since obtaining the information on the diet, but now, some