Oracle 無 LIMIT,常用 ROWNUM 配合子查詢實現:
SELECT * FROM (SELECT * FROM cat ORDER BY table_type) WHERE ROWNUM <= N;SELECT * FROM (SELECT ROWNUM rn, t.* FROM cat t) WHERE rn BETWEEN N1 AND N2;SELECT * FROM (SELECT * FROM cat ORDER BY table_type DESC) WHERE ROWNUM <= N;-- Oracle 8i 以上支援
ALTER TABLE table_name MOVE TABLESPACE new_tablespace;
-- 需重建索引
ALTER INDEX index_name REBUILD;
傳統 Export/Drop/Create/Import 需更多空間與時間,且會導致 PL/SQL 物件失效需重新編譯。
sqlplus /nolog 再 CONN user/pass@sidALTER INDEX idx REBUILD; 或 COALESCESET SERVEROUTPUT ONSET TRANSACTION USE ROLLBACK SEGMENT rbs_name; 或 PL/SQL 中 DBMS_TRANSACTION.USE_ROLLBACK_SEGMENTDBA_TABLES.BLOCKS = 實際使用區塊,EMPTY_BLOCKS = 配置但無資料區塊。DBA_SEGMENTS.BLOCKS = 總配置區塊 = BLOCKS + EMPTY_BLOCKS。
DELETE FROM emp a
WHERE (emp_id, office_id, 2) IN (
SELECT emp_id, office_id, DECODE(COUNT(*),1,1,2)
FROM emp b
WHERE a.emp_id=b.emp_id AND a.office_id=b.office_id
GROUP BY emp_id, office_id
);
TRUNCATE TABLE table_name; (重置 HIGH WATER MARK、釋放空間)ALTER TABLE t DROP COLUMN col; 需 COMPATIBLE=8.1.0SELECT * FROM dba_tab_privs WHERE table_name='...';SELECT object_id FROM v$locked_object; 再查 dba_objectsps -ef | grep pmon;Windows 看服務狀態DBA_DATA_FILES.AUTOEXTENSIBLESHUTDOWN TRANSACTIONAL:等待所有交易提交後關閉CREATE GLOBAL TEMPORARY TABLE ... ON COMMIT PRESERVE/DELETE ROWSCREATE INDEX idx ON t(col) REVERSE; 適合 RAC 減少熱塊爭用ALTER ROLLBACK SEGMENT rbs SHRINK TO size;