Nomes de tabela :
select * from user_tables
Nomes das colunas da tabela :
select * from user_tab_columns
Chaves primárias, chaves exclusivas, chaves estrangeiras :
select * from user_constraints
Mais geralmente :
select * from dictionary
para ver todas as visualizações de sistema possíveis que você pode usar.
Se você quiser que o DDL real seja usado para criar as tabelas, etc., você pode usar
dbms_metadata.get_ddl
, que retorna um CLOB. Por exemplo:
select dbms_metadata.get_ddl('TABLE','MY_TABLE') from dual;