Communitygithub.com

Crapule421/tiger-team

適用於 Oracle、PostgreSQL、SQL Server、Db2 LUW 及 MySQL/MariaDB 的 DBA 知識庫 - 涵蓋效能診斷、鎖定、高可用性/災難復原、備份/PITR、安全性/GDPR、Oracle 遷移至 PostgreSQL 的陷阱、發佈指令碼最佳實務及審查檢查清單。在診斷資料庫問題、設計高可用性/備份、準備或審查 SQL 發佈,或規劃遷移時載入此技能。

tiger-team 是什麼?

此技能為資料庫管理員 (DBA) 與開發者提供一個全面的知識庫,涵蓋多種關聯式資料庫引擎:Oracle、PostgreSQL、SQL Server、Db2 LUW 以及 MySQL/MariaDB。其核心在於提供一個快速參考指南,內容深入且實用,橫跨關鍵的 DBA 領域,包含引擎間的並行模型比較、效能診斷方法、常見鎖定陷阱、高可用性與災難復原 (HA/DR) 架構、備份與時間點復原 (PITR) 策略,以及資料安全性與法規遵循(如 GDPR)要點。注意事項中包含針對各引擎獨特行為的具體命令與範例(例如 Oracle 的 DDL_LOCK_TIMEOUT、PostgreSQL 的 pg_stat_statements、SQL Server 的 Query Store 與 Db2 的 HADR),並警示常見錯誤(如未索引的外鍵造成 TM 鎖定、MySQL 的中繼資料鎖定等待,或 Db2 的重新組織擱置狀態),確保最佳實務能因地制宜。該技能專為在熱門代理平台(如 Claude Code、Cursor 與 Codex)上使用而設計,結構化為可快速搜尋的指南。使用者可載入此技能以加速疑難排解,確保架構決策(如同步或非同步複製)符合 RPO/RTO 目標,並透過提供標準化命令與檢查點來減少 SQL 發佈與資料庫遷移期間的人為錯誤。對於在多引擎環境中工作的任何人而言,它作為一個可信任的、可執行的參考,可將深層的資料庫知識直接帶入 AI 代理的工作流程中。

相容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Crapule421/tiger-team/tree/HEAD/plugins/tiger-team/skills/dba-reference

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

DBA 參考指南

使用規則:下列命令為穩定且廣為人知的格式。不同版本與版本別(涉及授權!)的行為可能有所不同 - 若某一行標示「請根據您的版本驗證」,請在依賴該命令前,查閱該廠商針對特定發行版本的官方文件。切勿在未建立變更記錄的情況下,於生產環境中執行任何會修改資料的診斷陳述式。

1. 引擎快速比較

主題OraclePostgreSQLSQL ServerDb2 LUWMySQL / MariaDB (InnoDB)
並行模型MVCC (undo);讀取從不阻塞寫入MVCC (資料表中的行版本;VACUUM)預設使用鎖定;若啟用 RCSI/快照隔離則為 MVCC鎖定;若啟用 CUR_COMMIT 則為「目前提交」讀取MVCC (undo) + REPEATABLE READ(預設)中的 next-key/gap 鎖定
交易性 DDL否(前後隱含提交)是(除了 CREATE INDEX CONCURRENTLY、CREATE DATABASE、VACUUM 等)大部分 DDL 為是大部分 DDL 為是(請根據陳述式驗證)否(隱含提交;MySQL 8 的 DDL 僅為每個陳述式原子性)
鎖定升級從不從不是(資料列/頁面 -> 資料表,每個陳述式每個物件約 5000 個鎖定)是(LOCKLIST/MAXLOCKS)否(但有 gap 鎖定)
查詢統計AWR/ASH (Diagnostics Pack), Statspackpg_stat_statementsQuery Store, DMVsMON_GET_* 資料表函數performance_schema、sys schema、慢查詢日誌
工作階段鎖定逾時ALTER SESSION SET DDL_LOCK_TIMEOUT = 30; (DDL, 秒)SET lock_timeout = '5s';SET LOCK_TIMEOUT 5000; (毫秒)SET CURRENT LOCK TIMEOUT 30; (秒)SET SESSION lock_wait_timeout = 30; (中繼資料鎖定) + innodb_lock_wait_timeout (資料列鎖定)

2. 效能診斷

方法:(1) 定義症狀(單一查詢、單一時間區間、整個執行個體);(2) 在調整 SQL 之前,先檢視等待/時間模型;(3) 取得實際執行計畫(而非僅估計的);(4) 比較估計值與實際資料列數 - 基數估計錯誤是常見的根本原因(過時的統計資料、偏斜、相關謂詞、參數探測/繫結窺視);(5) 一次變更一項,然後進行測量。

Oracle

  • 估計計畫:EXPLAIN PLAN FOR <stmt>; 然後 SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
  • 實際計畫:使用 /*+ GATHER_PLAN_STATISTICS */ 提示執行,然後 SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('<SQL_ID>', NULL, 'ALLSTATS LAST'));
  • AWR/ASH/ADDM (@?/rdbms/admin/awrrpt.sql、ashrpt.sql、addmrpt.sql、V$ACTIVE_SESSION_HISTORY、DBA_HIST_*) 需要 Diagnostics Pack (Enterprise Edition);SQL Monitor 與 SQL Tuning Advisor 需要 Tuning Pack。請檢查 CONTROL_MANAGEMENT_PACK_ACCESS。若無授權:請使用 Statspack。
  • 即時等待:V$SESSION (event、wait_class、sql_id、blocking_session)、V$SYSTEM_EVENT、V$SQL / V$SQLSTATS。
  • 常見等待:db file sequential read (單一區塊,索引存取)、db file scattered read / direct path read (完整掃描)、log file sync (提交頻率 / 重做 I/O)、enq: TX - row lock contention (應用程式鎖定)、enq: TM - contention (通常是未索引的外鍵)、latch: cache buffers chains (熱區塊)、gc * (RAC 互連)。
  • 計畫穩定性:SQL Plan Management (基準線);SQL profile 需要 Tuning Pack。

PostgreSQL

  • EXPLAIN (ANALYZE, BUFFERS) <stmt>; - ANALYZE 會執行該陳述式:請將 DML 包裝在 BEGIN; ... ROLLBACK; 中。
  • pg_stat_statements (需要 shared_preload_libraries):按 total_exec_time 排序的熱門 SQL(欄位名稱在 PG13 中已變更為 total_exec_time、mean_exec_time)。 SELECT queryid, calls, round(total_exec_time) total_ms, round(mean_exec_time::numeric,1) mean_ms, rows, left(query,80) FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 20;
  • 即時:pg_stat_activity (state、wait_event_type、wait_event、xact_start、query);idle in transaction 的工作階段會持有鎖定並阻塞 VACUUM。
  • auto_explain 模組可將慢查詢計畫記錄於日誌中;track_io_timing = on 可啟用 I/O 時間記錄。
  • 健康狀態:pg_stat_user_tables (seq_scan、n_dead_tup、last_autovacuum、last_autoanalyze);膨脹;交易 ID 環繞:SELECT datname, age(datfrozenxid) FROM pg_database;。
  • 終止:先使用 pg_cancel_backend(pid) (查詢),然後使用 pg_terminate_backend(pid) (工作階段)。

SQL Server

  • 實際計畫:SSMS 中的「包含實際執行計畫」或 SET STATISTICS XML ON;;使用 SET STATISTICS IO, TIME ON; 檢視讀取次數/CPU。
  • Query Store (2016 以上版本;2022 版本預設為新資料庫啟用):sys.query_store_query、sys.query_store_query_text、sys.query_store_plan、sys.query_store_runtime_stats、sys.query_store_wait_stats (2017 以上版本);回歸 -> 計畫強制 EXEC sp_query_store_force_plan @query_id = <q>, @plan_id = <p>;。
  • DMVs:sys.dm_exec_requests (wait_type、blocking_session_id)、sys.dm_os_wait_stats、sys.dm_exec_query_stats + CROSS APPLY sys.dm_exec_sql_text(sql_handle) + sys.dm_exec_query_plan(plan_handle)。
  • 常見等待:PAGEIOLATCH_* (資料讀取)、LCK_M_* (阻塞)、WRITELOG (日誌 I/O / 提交率)、CXPACKET/CXCONSUMER (平行處理 - 檢查 MAXDOP/成本閾值)、SOS_SCHEDULER_YIELD (CPU)、ASYNC_NETWORK_IO (用戶端未取用結果)、RESOURCE_SEMAPHORE (記憶體授權)。
  • 參數探測:比較每個參數的計畫;選項包括 OPTION (RECOMPILE)、OPTIMIZE FOR、Query Store 提示 (2022) - 請依據情況選擇。
  • 擴充事件;system_health 工作階段會保留最近的死結圖形。

Db2 LUW

  • 解釋計畫:建立解釋資料表 (SYSPROC.SYSINSTALLOBJECTS 或 EXPLAIN.DDL)、EXPLAIN PLAN FOR <stmt>、使用 db2exfmt -d <DB> -1 -o plan.txt 格式化;快速檢視 db2expln。
  • 監控資料表函數:MON_GET_PKG_CACHE_STMT (熱門 SQL: STMT_EXEC_TIME、NUM_EXECUTIONS、ROWS_READ)、MON_GET_CONNECTION、MON_GET_ACTIVITY、MON_GET_TABLE、MON_GET_BUFFERPOOL。
  • 鎖定:SYSIBMADM.MON_LOCKWAITS、db2pd -db <DB> -wlocks、db2pd -db <DB> -locks。
  • 統計資料:RUNSTATS ON TABLE <SCHEMA>.<TABLE> WITH DISTRIBUTION AND DETAILED INDEXES ALL; - 使用 REORGCHK 評估重組需求;使用 db2advis 取得索引建議。

MySQL / MariaDB

  • EXPLAIN <stmt>;實際計畫:MySQL 8.0.18 以上版本 EXPLAIN ANALYZE <stmt>;MariaDB ANALYZE <stmt> (兩者都會執行該陳述式)。
  • 熱門 SQL:sys.statement_analysis、performance_schema.events_statements_summary_by_digest;慢查詢日誌 (slow_query_log、long_query_time) + pt-query-digest。
  • InnoDB:SHOW ENGINE INNODB STATUS\G (最新的死結、歷史清單長度)、information_schema.INNODB_TRX、sys.innodb_lock_waits;MySQL 8:performance_schema.data_locks / data_lock_waits;MariaDB:information_schema.INNODB_LOCKS / INNODB_LOCK_WAITS 以及 METADATA_LOCK_INFO 外掛程式;MySQL 中繼資料鎖定:performance_schema.metadata_locks。

3. 鎖定與並行 - 陷阱

引擎陷阱緩解措施
全部長時間交易 + DDL:DDL 會等待,且之後的每個查詢都會在其後排隊對 DDL 設定較短的鎖定逾時、使用重試迴圈、在無長時間交易時執行;執行前檢查(活躍工作階段)
Oracle未索引的外鍵 -> 當父資料列被刪除 / PK 更新時,在子資料表上產生的 TM 鎖定為 FK 欄位建立索引
Oracle在忙碌物件上的 DDL 失敗,出現 ORA-00054DDL_LOCK_TIMEOUT;線上變體(CREATE INDEX ... ONLINE、ALTER TABLE ... MOVE ONLINE 12.2 以上版本、DBMS_REDEFINITION)- 全部僅限 Enterprise Edition (SE2 不適用)
Oracle在開啟游標的迴圈內提交 -> ORA-01555 snapshot too old按鍵值/rowid 範圍進行區塊處理(DBMS_PARALLEL_EXECUTE),設定足夠大的 undo 保留空間
PostgreSQL大多數 ALTER TABLE 會取得 ACCESS EXCLUSIVE 鎖定;等待它會阻塞所有讀取SET lock_timeout;CREATE INDEX CONCURRENTLY;FK/CHECK 使用 NOT VALID 然後 VALIDATE CONSTRAINT
PostgreSQL變更資料行類型會重寫整個資料表(除了安全的案例,例如增加 varchar 長度)使用新資料行 + 回填進行擴展/收縮
PostgreSQLidle in transaction 的工作階段idle_in_transaction_session_timeout,修復應用程式
SQL Server在預設的 READ COMMITTED 隔離層級下,讀取會阻塞寫入評估 READ_COMMITTED_SNAPSHOT ON(會影響 tempdb 版本存放區;請測試)
SQL Server大型 DML 會將鎖定升級至資料表層級批次處理低於約 5000 筆資料列;謹慎使用 ALTER TABLE ... SET (LOCK_ESCALATION = ...)
SQL Server使用 NOLOCK 作為「修正」方法髒讀、遺失/重複資料列 - 在審查中拒絕
Db2LOCKTIMEOUT = -1 (永遠等待) 為預設值在發佈工作階段中設定 CURRENT LOCK TIMEOUT
Db2ALTER TABLE ... DROP COLUMN、大多數 ALTER COLUMN SET DATA TYPE、SET NOT NULL/DROP NOT NULL 會將資料列組織的資料表置於重新組織擱置 (reorg-pending) 狀態 (SQLSTATE 57007):在執行 REORG TABLE 之前,僅允許掃描、DROP/RENAME/TRUNCATE 以及大多數其他 ALTER 操作;此類操作最多 31 個工作單元後,REORG 變為強制性在時間視窗內規劃 REORG TABLE;檢查 SYSIBMADM.ADMINTABINFO 中的 REORG_PENDING / NUM_REORG_REC_ALTERS
MySQL中繼資料鎖定 (MDL) 等待:DDL 被一個開啟的交易阻塞,進而阻塞所有人在發佈工作階段中設定較低的 lock_wait_timeout;終止長時間處於閒置狀態的交易
MySQL線上 DDL 會默默地回退為資料表複製始終使用 ALGORITHM=INSTANT (或 INPLACE) 搭配 LOCK=NONE`,使其在無法使用時報錯;或使用 gh-ost / pt-online-schema-change
MySQL在 REPEATABLE READ 隔離層級下,範圍更新會產生 Gap/next-key 鎖定為謂詞建立索引;在可接受的情況下考慮使用 READ COMMITTED

死結:始終是設計問題(不一致的存取順序、缺少索引)。擷取:Oracle trace 檔案 / alert 日誌 (ORA-00060)、PostgreSQL 日誌 (log_lock_waits = on 可記錄超過 deadlock_timeout 的等待)、SQL Server system_health XE、Db2 鎖定事件監控器、MySQL innodb_print_all_deadlocks。

4. 高可用性 (HA) / 災難復原 (DR)

引擎本地 HADR / 複本關鍵操作與檢查
OracleRAC (共享儲存、主動-主動、需要額外授權)Data Guard 實體待命 (重做套用);Active Data Guard = 開啟唯讀並套用(需要額外授權)保護模式:Maximum Performance (ASYNC, 預設)、Maximum Availability (SYNC, 失敗時降級)、Maximum Protection (SYNC, 若無待命則主要停止)。Broker dgmgrl:SHOW CONFIGURATION;、VALIDATE DATABASE <stby>;、SWITCHOVER TO <stby>;、FAILOVER TO <stby>;。延遲:V$DATAGUARD_STATS。主要資料庫啟用 FORCE LOGGING。Fast-Start Failover 需要一個觀察者(理想情況下在第三個站點)。
PostgreSQLPatroni (DCS: etcd/Consul/ZooKeeper) + HAProxy/VIP串流複製 (實體, WAL);邏輯複製 (發行/訂閱, PG10 以上版本)pg_stat_replication (sent_lsn、write_lsn、flush_lsn、replay_lsn)、pg_is_in_recovery()、pg_promote() (PG12 以上版本)。同步:synchronous_standby_names + synchronous_commit。複製槽若複本離線會保留 WAL -> 磁碟空間耗盡:監控,使用 max_slot_wal_keep_size (PG13 以上版本) 設定上限。Patroni:patronictl -c <cfg> list / switchover / failover;供負載平衡器使用的 REST 健康狀態端點 (/primary、/replica)。邏輯複製不複製 DDL 或序列值(截至 PG 18 版):先在訂閱者端套用新增的結構描述變更,並在容錯移轉至訂閱者前重設序列。
SQL Server容錯移轉叢集執行個體 (共享儲存, WSFC)Always On 可用性群組 (WSFC 或 Linux 上的 Pacemaker);日誌傳送只有同步提交的複本之間才能進行自動容錯移轉。供用戶端使用的接聽程式 (MultiSubnetFailover=True)。登入、Agent 作業、連結伺服器、認證不會被複製 (包含的可用性群組,SQL Server 2022 Enterprise,有幫助)。完整的 AG 需要 Enterprise 版本;Standard Edition 上的 Basic AG (1 個資料庫,2 個複本)。檢查 sys.dm_hadr_database_replica_states。計劃性容錯移轉:在目標同步次要複本上執行 ALTER AVAILABILITY GROUP [<AG>] FAILOVER;。可讀取的次要複本有授權方面的影響。
Db2 LUWpureScale (主動-主動) 或 HADR + Pacemaker/TSA 自動化HADR (最多 3 個待命,HADR_TARGET_LIST)HADR_SYNCMODE:SYNC、NEARSYNC、ASYNC、SUPERASYNC。監控 db2pd -db <DB> -hadr 或 MON_GET_HADR。在待命端進行角色切換:TAKEOVER HADR ON DATABASE <DB> (使用 BY FORCE 進行容錯移轉)。透過 DB2_HADR_ROS 在待命端進行讀取(有限制)。
MySQL / MariaDBInnoDB Cluster (Group Replication + MySQL Router);Galera (MariaDB)非同步 / 半同步複製,基於 GTIDSHOW REPLICA STATUS (MySQL 8.0.22 以上版本;MariaDB 10.5.1 以上版本接受 REPLICA 作為 SLAVE 的同義詞;舊版本:SHOW SLAVE STATUS)。監控複製延遲與錯誤的 GTID;Galera 需要主要元件法定人數(3 個節點或仲裁者)。

設計規則:在選擇同步/非同步複製前,先定義每個應用程式的 RPO/RTO;至少每年進行一次 DR 測試並記錄結果(DORA 要求金融機構進行 ICT 持續性測試);用戶端必須能透明地重新連線(包含多主機/接聽程式/SCAN 的連線字串、重試邏輯);監控延遲並發出警報;防護腦裂(法定人數、圍籬、位於第三站點的觀察者/見證者)。

5. 備份、還原、PITR

引擎完整 / 增量PITR驗證
Oracle (RMAN)BACKUP DATABASE PLUS ARCHIVELOG; 增量等級 0/1;CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;需要 ARCHIVELOG 模式。請使用 RUN { SET UNTIL TIME "TO_DATE('2026-10-01 12:00','YYYY-MM-DD HH24:MI')"; RESTORE DATABASE; RECOVER DATABASE; } 然後 ALTER DATABASE OPEN RESETLOGS;RESTORE DATABASE VALIDATE;、CROSSCHECK BACKUP;、LIST BACKUP SUMMARY;、REPORT NEED BACKUP;、DELETE OBSOLETE;
PostgreSQLpg_basebackup -D <dir> -Ft -z -X stream -P;pgBackRest --type=full / diff / incr backup;Barman。pg_dump 僅為邏輯備份(無 PITR)需要 WAL 歸檔 (archive_mode、archive_command);還原基礎備份 + restore_command + recovery_target_time + recovery.signal (PG12 以上版本)。pgBackRest:pgbackrest --stanza=<s> --type=time "--target=2026-10-01 12:00:00+02" restorepgbackrest --stanza=<s> check、pgbackrest --stanza=<s> info;定期進行實際還原測試
SQL Server復原模式 FULL;BACKUP DATABASE [<db>] TO DISK = N'<path>' WITH CHECKSUM, COMPRESSION; 差異備份;BACKUP LOG還原完整備份 WITH NORECOVERY,然後還原差異備份與日誌備份,最後 WITH RECOVERY。RESTORE DATABASE [<db>] FROM DISK = N'<path>' WITH FILE = 1, NORECOVERY; RESTORE LOG [<db>] FROM DISK = N'<path>' WITH STOPAT = '2026-10-01 12:00:00', RECOVERY;RESTORE VERIFYONLY FROM DISK = N'<path>' WITH CHECKSUM;
Db2 LUWBACKUP DATABASE <DB> TO <path> WITH 2 BUFFERS BUFFER 1024 PARALLELISM 3 COMPRESS EXCLUDE LOGS WITHOUT PROMPTING; 增量 INCREMENTAL DELTAdb2ckbkp、db2dart / INSPECT;還原測試:db2 RESTORE DATABASE <DB> FROM <path> ... WITHOUT PROMPTINGdb2ckbkp <image>;db2dart <DB> /DB
MySQL / MariaDBPercona XtraBackup (xtrabackup --backup --target-dir=<dir>);mysqldump 僅為邏輯備份;區塊鏈備份 / MariaDB Backup需要啟用 log_bin、server_id,以及 GTID (gtid_mode=ON)。mysqlbinlog + --stop-datetime;XtraBackup 配合 --apply-log 與 --copy-backPercona XtraBackup 配合 --verify=CRC32

6. 安全性 / GDPR

原則

  • 不要以純文字形式儲存機密資料,不要在應用程式程式碼或設定檔中寫入密碼或連線字串(使用密碼管理員 / vault 來輪換機密資料)。
  • 使用最小權限原則:應用程式使用者僅應擁有必要的權限(例如,INSERT/SELECT/UPDATE/DELETE 在特定資料表或角色上,外加必要的執行權限)。
  • DDL 操作不應使用應用程式帳戶來執行(應使用特權帳戶)。
  • 加密靜態資料(TDE、檔案系統層級加密)。
  • 僅對允許存取的使用者授予檢視/資料表/列的權限,以實作行級安全性 (RLS)。
  • 稽核誰在何時存取了哪些資料:啟用稽核,特別是可識別個人身分的資料 (PII)、GDPR 相關資料。

金鑰與證書

  • 避免以純文字形式儲存密碼至少作為一個原則。使用密碼管理員 / vault 來取得/輪換機密資料。
  • 對資料庫連線使用 TLS/SSL:檢查 LISTENER 的 SSL 設定 (ssl_cert、ssl_key、ssl_ca)、pg_hba.conf (主機ssl、用戶端憑證)、ALTER DATABASE ... SET SSL = ON;... 管理員密碼/應用程式密碼應該存放在一個機密儲存庫中。
  • MySQL 的 init_connect 可用於為 PII 強制執行 SET SESSION sql_log_bin = 0;。

GDPR 特定事項

  • 個人資料應在可行情況下於生產環境外進行假名化/匿名化/遮罩。
  • 備份保留期間應符合 GDPR 的資料最小化要求。
  • 應在稽核日誌中記錄對 PII 資料的存取,並定期審查。
  • 刪除權(被遺忘權):實作級聯刪除或標記為刪除,並確保備份最終會清除該資料,或使用保留原則來刪除陳舊的備份。
  • 遷移至非歐盟地區的資料庫時,需有適當的資料保護協議,如標準契約條款 (SCCs) 或約束性企業規則 (BCRs)。

7. Oracle 遷移至 PostgreSQL 的陷阱

陷阱詳細說明解決方案
內建函數差異SYSDATE (Oracle) -> NOW(), CURRENT_TIMESTAMP (PostgreSQL);NVL(a, b) -> COALESCE(a, b);DECODE(a, b, c) -> CASE WHEN a = b THEN c ELSE ... END;層級化查詢 (CONNECT BY) -> 遞迴 CTE (WITH RECURSIVE)使用遷移工具(ora2pg、AWS DMS SCT)產生程式碼,但請手動審查其輸出。最好重寫所有查詢。
空值與排序在 Oracle 中,NULL 值在 ORDER BY ... ASC 中被視為最大值(最後排序);在 PostgreSQL 中則被視為最小值(首先排序)。使用 ORDER BY ... NULLS LAST (PostgreSQL) 來比照 Oracle 的行為。
隱含型別轉換Oracle 會自動將 VARCHAR2 轉換為 NUMBER(例如:WHERE 1 = '1');PostgreSQL 則不會。修正查詢中的資料型別;或建立自訂的隱含轉換,但這通常不是一個好主意。
序列CREATE SEQUENCE ... START WITH 100 在 PostgreSQL 中是可以的,但 CACHE 行為不同;在 Oracle 序列上使用 ALTER TABLE ... ADD GENERATED BY DEFAULT AS IDENTITY;PostgreSQL 的 identity 資料行是自動產生的。在遷移期間重設序列值以符合 Oracle 的當前值。
觸發程序與遞迴Oracle 預設允許 INSERT/UPDATE/DELETE 的觸發程序;PostgreSQL 需要 CREATE CONSTRAINT TRIGGER ... DEFERRABLE INITIALLY DEFERRED 來模擬遞迴。審查觸發程序邏輯,可能將其重寫為 from ... 更容易。
儲存程序 / PL/SQLOracle 使用 PL/SQL;PostgreSQL 使用 PL/pgSQL(類似但不相同)。FORALL 在 PostgreSQL 中不存在。BULK COLLECT 不存在。請使用 RETURN NEXT 或 RETURN QUERY 來模擬管線化函數。需要手動重寫。
Lock 語法SELECT ... FOR UPDATE 相似;但 PostgreSQL 不支援 WAIT N(它使用 NOWAIT 和佈林值超時參數)。使用 SELECT ... FOR UPDATE NOWAIT 或在應用程式層級設定 lock_timeout。
資料類型對應NUMBER (Oracle) 應對應到 NUMERIC(在 PostgreSQL 中更精確且更慢)或 INTEGER / BIGINT;VARCHAR2(n) -> VARCHAR(n);DATE (Oracle) 對應到 TIMESTAMP(0);CLOB / BLOB -> TEXT / BYTEA。為資料定義一致的資料型別對應。
索引Oracle 的索引可以是基於函數的、位元圖的;PostgreSQL 有部分索引、GiST、GIN、BRIN 索引。CREATE INDEX 語法相似,但選項不同。在遷移過程中重新建立索引。
交易控制Oracle 沒有交易界限(隱含提交)。;PostgreSQL 的每個陳述式都隱含在一個交易中。檢查應用程式的交易邏輯(例如,BEGIN / COMMIT)。

8. 發佈指令碼與審查檢查清單

發佈指令碼原則

  • 每個指令碼應是冪等的(可安全地重複執行)。
  • 使用版本控制管理指令碼(例如,存放於 git,使用 Flyway、Liquibase 或 Alembic 等工具)。
  • 在執行 DDL 時,對鎖定與效能影響保持謹慎(避免長時間交易)。
  • 在開發/測試/預發環境中測試指令碼,然後才在生產環境中執行。
  • 寫入遷移指令碼,而不是一次性修正。

審查檢查清單

  • SQL 是否使用 EXPLAIN 分析過?計畫是否看起來合理(索引掃描 vs 資料表掃描)?
  • DDL 是否可能導致長時間等待或鎖定問題?
  • 遷移指令碼是否可以安全重試(冪等)?
  • 是否已備份?
  • 是否已檢查新索引或新資料表是否有潛在的空間和 I/O 影響?
  • 新增外鍵時是否注意順序?是否已建立索引?
  • 是否有 ALTER COLUMN ... SET NOT NULL?在生產環境中,這需要檢查現有資料是否為空值。
  • DROP COLUMN / DROP TABLE 是否已在不影響應用的情況下審查其影響?
  • 是否有處理空值與預設值的 ALTER COLUMN ... SET DEFAULT?
  • 是否有 ALTER TABLE ... RENAME?影響應用程式?
  • 復原指令碼是否可用(ROLLBACK 遷移)?
  • 是否已與團隊溝通變更?

9. 進一步資訊

  • Oracle:官方文件、Ask TOM、SQL Live、Oracle Base。
  • PostgreSQL:官方文件、PostgreSQL Planet、Stack Overflow。
  • SQL Server:官方文件、SQL Shack、Brent Ozar 的簡潔指引。
  • Db2 LUW:知識中心、IBM 開發人員。
  • MySQL / MariaDB:官方文件、Percona 部落格、Planet MySQL。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Crapule421/tiger-team

Write an Architecture Decision Record (ADR) or a target-architecture note from a question or context - options, knock-out and weighted criteria, trade-offs, decision, consequences, reversibility and compliance impacts (security/accreditation, GDPR, DORA, sovereignty). Use when a structural technical choice must be made, documented or reviewed, or when a perimeter needs a documented target state.

Crapule421/tiger-team

Enterprise architecture knowledge base - design authority role, architecture principles, target vs transition architectures, macro integration patterns, non-functional requirements (availability, RPO/RTO, performance, security, operability, reversibility), cloud strategy and sovereignty (SecNumCloud, reversibility), technical debt, DORA ICT risk from an architecture view, and a cross-expert coherence checklist. Load when designing or reviewing a target architecture, arbitrating structural options, or writing ADRs; references cover TOGAF/ArchiMate, French urbanisation du SI and ADR formats.

Crapule421/tiger-team

Review a batch chain - scheduler export (VTOM, Dollar Universe, Control-M) or a textual description - for dependencies, restartability, windows and critical path, resources, calendars, monitoring and operational risks, with prioritized findings and a restartability matrix. Use before go-live, before a scheduler migration, after a batch incident, or when a chain keeps missing its window.

Crapule421/tiger-team

Fill-in Markdown templates for integration project deliverables (DAT architecture document, DEX operations manual, production release sheet, interface contract, flow matrix, RACI, RAID log, UAT sign-off) and the writing rules that apply to all of them. Load when an agent must produce, update or review a project deliverable.

相關技能