2016-04-20 56 views
0

我有我想分析的oracle查询。表track_tableactive分区。我没有那么多关于分区的知识。我想检查此分区已创建的条件。要检查我的表是否被分区或者我没有使用下面的查询,并且它说PARTITION_NAME对于track_table表是有效的。oracle分区表上的活动状态

SELECT * FROM dba_tab_partitions WHERE table_name = 'track_table'; 

下面是我想分析查询:

select count(*) as cnt 
from track_table partition (active) 
where trg_id > 198754 
     and status not in (2); 
+0

你看不到表的定义?使用工具的模式浏览器(Toad,sqldeveloper,plsqldeveloper)查看表的DDL /脚本。有一个分区部分,你会看到分区定义。 –

+0

我无法从任何工具检查。该表驻留在远程数据库中,我没有权限在oracle sql developer或任何其他工具中查看它。它通过查询唯一可能。 – Andrew

+0

'active'是表格的一个分区。所以,你的问题是这个分区中数据的条件是什么? –

回答

1

您的分区似乎是一个列表分区。或者也许是范围,几乎肯定不是哈希。您可以在high_value列的user_tab_partitions中看到构建分区的值。

SELECT * FROM [email protected]_dblink_name WHERE table_name = 'TRACK_TABLE'; 

否则,如果您想了解更多,请参阅本discusssion:Getting schema (DDL) of a table through DB link

+0

其列表分区。但它仍然不能回答我的问题。我想知道列表分区是什么意思?哪种条件意味着什么是在track_table上进行分区的标准? – Andrew

+0

通过在互联网上搜索或查阅文档,您会发现列表分区意味着什么。你的桌子的标准是什么,这正是我所回答的。查看查询的结果,您将知道该表是如何分区的。 –

-1

试试这个。我不确定它的工作。

declare 
h  NUMBER;   
th  NUMBER;   
doc  CLOB;   
BEGIN 
h := DBMS_METADATA.OPEN(object_type => 'TABLE',network_link => 'dblink'); 
DBMS_METADATA.SET_FILTER(h,'SCHEMA','schema_name'); 
DBMS_METADATA.SET_FILTER(h,'NAME','table_name'); 
th := DBMS_METADATA.ADD_TRANSFORM(h,'DDL'); 
DBMS_METADATA.SET_TRANSFORM_PARAM(th,'SQLTERMINATOR',true); 
LOOP 
    doc := DBMS_METADATA.FETCH_CLOB(h); 
    EXIT WHEN doc IS NULL; 
    dbms_output.put_line(doc); 
    exit; 
END LOOP; 
DBMS_METADATA.CLOSE(h); 
end; 
+0

它发出一个错误PLS-00352:无法访问另一个数据库'DBLINK' PLS-00201:标识符'DBMS_METADATA @ DBLINK'必须声明 – Andrew

+0

嗨,如果你从[这里](https://社区。 oracle.com/thread/1982552?tstart=0)然后请用源代码更新答案。如果它是您的代码,请忽略我的评论。 –