Tüm Ürünler
Search
Belge Merkezi

MaxCompute:Local backup

Son Güncelleme:Oct 04, 2026

MaxCompute, veri her değiştirildiğinde otomatik olarak yedekleme oluşturur ve bu yedeği yapılandırılabilir bir süre boyunca saklar. Veriler yanlışlıkla silinirse veya üzerine yazılırsa, saklama süresi içindeki herhangi bir önceki sürüme geri yükleyebilirsiniz.

Backup and restoration

Çalışma şekli

  • Her zaman açık -- Varsayılan olarak etkindir ve 24 saatlik bir saklama süresine sahiptir. Harici depolama alanı gerekmez ve ek maliyet oluşturmaz.

  • Sürekli -- Her değişiklik bir yedeklemeyi tetikler; böylece planlanmış aralıklar arasındaki veri değişikliklerinin hiçbiri atlanmaz.

  • Hızlı geri yükleme -- Geri yükleme işlemleri ek hesaplama kaynağı tüketmez. Tek bir komutla bir tablo, bölüm veya belirli bir sürüm geri yüklenebilir.

Sınırlamalar

  • Materialize görünümler, nesne tabloları ve harici tablolar desteklenmez.

  • Kümelendirilmiş tablolar geri yüklenemez.

  • Bir tabloda PURGE TABLE çalıştırıldıktan sonra, temizlenen veriler geri yüklenemez.

  • Silinen bir tablo veya bölüm (Delta tablolar dahil) doğrudan belirli bir Günlük Sıra Numarasına (LSN) geri yüklenemez. Önce tabloyu geri yükleyin, ardından hedef LSN'ye geri yükleyin.

Delta tablo sınırlamaları

  • Silinen bir Delta tablosu veya bölümü tamamen geri yüklenebilir ancak belirli bir küçük sürüme geri yüklenemez. Belirli bir küçük sürümü sorgulamak için zaman yolculuğu özelliğini kullanın.

  • Silinen bir tablo geri yüklendikten sonra:

    • Tabloyu silme işleminden önceki bir zamanda sorgulamak, silme işlemi hiç gerçekleşmemiş gibi veri döndürür.

    • Silme ve geri yükleme arasındaki bir zamanda sorgulamak veri döndürmez (sistem veriyi silinmiş olarak kabul eder).

    • Geri yüklemeden sonraki bir zamanda sorgulamak, ne silme ne de geri yükleme işlemi gerçekleşmemiş gibi veri döndürür. Geri yüklenen veriler artımlı veri olarak değerlendirilmez.

    • Geri yüklenmeden önce silinen bir bölümü sorgulamak hata yerine sonuç döndürmez (var olmayan bir bölümde normal sorgu yapılmasıyla aynıdır).

  • Her silme ve geri yükleme döngüsü yeni commit zaman damgaları ve sürüm numaraları oluşturur. Bölümlenmiş bir tablo geri yüklendiğinde, her bölüm için ayrı bir sürüm oluşturulur.

Saklama süresini yapılandırma

MaxCompute'ün yedek verileri kaç gün saklayacağını ayarlayın. Geçerli aralık 0--30'dur. Varsayılan değer 1'dir (24 saat). 0 olarak ayarlamak yedeklemeyi devre dışı bırakır.

-- Set the retention period to 7 days
setproject odps.timemachine.retention.days=7;
Saklama süresini yalnızca Alibaba Cloud hesapları veya proje yöneticileri değiştirebilir.

Saklama süresi değiştirildikten sonraki davranış:


Değişiklik


Etki


Süreyi uzatma


Aynı gün etkili olur


Süreyi kısaltma


MaxCompute, yeni süreyi aşan yedek verileri otomatik olarak siler

Mevcut ayarı görüntülemek için MaxCompute istemcisinde (odpscmd) setproject; komutunu çalıştırın ve odps.timemachine.retention.days değerini kontrol edin.

Yedekleme geçmişini görüntüleme

Silinen tablolar dahil tüm tabloları listeleme

SHOW HISTORY FOR tables;

İsme göre filtreleme:

SHOW HISTORY FOR tables LIKE test_restore_1;

Örnek çıktı:

Name                	Id                              	Type            	IsPartitioned 	CreateTime         	DropTime
test_restore_1      	a0b06367bd054d17a55505aa31601b89	MANAGED_TABLE   	FALSE         	2025-07-18 16:32:13
Proje üzerinde List izni gerektirir. Bkz. MaxCompute izinleri .

Bir tablonun sürüm geçmişini görüntüleme

SHOW HISTORY FOR TABLE <table_name> [LIMIT <n>] [LSN '<lsn>' | OFFSET <offset>];

Örnek:

SHOW HISTORY FOR TABLE test_restore_1;

Örnek çıktı:

ObjectType	ObjectId                        	ObjectName          	VERSION(LSN)    	Time               	Operation
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000001	2025-07-18 16:32:14	CREATE
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000002	2025-07-18 16:52:08	OVERWRITE
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000003	2025-07-18 16:52:12	OVERWRITE
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000004	2025-07-18 16:52:14	OVERWRITE
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000005	2025-07-18 16:52:17	OVERWRITE

Tablo üzerinde ShowHistory izni gerektirir. Tablo silinmişse bu komut hata döndürür. Bunun yerine SHOW HISTORY FOR tables LIKE <table_name>; komutunu kullanın.

Silinen bir tablonun sürüm geçmişini görüntüleme

SHOW HISTORY FOR tables komutundan elde edilen tablo ID'sini kullanın:

SHOW HISTORY FOR TABLE test_restore_2 ('id'='437b29466ba948b392b2090ec0a60fc2');

Proje üzerinde List izni gerektirir.

Bir bölümün sürüm geçmişini görüntüleme

-- By partition spec
SHOW HISTORY FOR TABLE test_restore_part_1 PARTITION(ds='20250701');

-- By partition ID (for dropped partitions)
SHOW HISTORY FOR TABLE test_restore_part_1 PARTITION('id'='271aebf3e17a4a8e9f6b35733bf63db4');

Tablo üzerinde ShowHistory izni gerektirir.

Birden çok bölümü aynı anda görüntülemek için:

SHOW HISTORY FOR TABLE test_restore_part_1 ('id'='fbee66b56cf544d2a9999d5d0ce5d352')
  PARTITION(ds='20250701') PARTITION(ds='20250702');

Bölümlenmemiş bir tabloyu geri yükleme

Silinen bir tabloyu geri yükleme

RESTORE TABLE <table_name> ('id'='<table_id>');
Tablo adı mevcut bir tablo ile çakışmamalıdır. Gerekirse önce mevcut tabloyu yeniden adlandırın.

Örnek:

-- Rename the conflicting table
ALTER TABLE test_restore_2 RENAME TO test_restore_2_rename;

-- Restore the dropped table
RESTORE TABLE test_restore_2 ('id'='437b29466ba948b392b2090ec0a60fc2');

İzinler:

  • Mevcut tablo: Tablo üzerinde Update izni.

  • Mevcut olmayan tablo: Proje üzerinde CreateTable izni.

Bir tabloyu belirli bir sürüme geri yükleme

RESTORE TABLE <table_name> TO LSN '<lsn>';

Örnek:

RESTORE TABLE test_restore_1 TO LSN '0000000000000004';

SELECT * FROM test_restore_1;
-- Returns:
-- +------------+
-- | colname    |
-- +------------+
-- | 2          |
-- +------------+

Bir tabloyu belirli bir sürümden yeni bir tablo olarak geri yükleme

RESTORE TABLE <table_name> TO LSN '<lsn>' AS <new_table_name>;

Bu komut, hedef tabloya bağlı olarak üç farklı davranış sergiler:


Senaryo


Davranış


Hedef tablo mevcut değil


Geri yüklenen verilerle yeni tabloyu oluşturur


Hedef tablo aynı şema ile mevcut


Hedef tablonun verilerinin üzerine yazar


Hedef tablo farklı şema ile mevcut


ODPS-0110061 hatası ile başarısız olur

Örnek -- geri yükleme ve yeniden adlandırma:

RESTORE TABLE test_restore_2 TO LSN '0000000000000003' AS test_restore_new;

SELECT * FROM test_restore_new;
-- Returns:
-- +------------+
-- | colname    |
-- +------------+
-- | 1          |
-- +------------+

Bölümlenmiş bir tabloyu geri yükleme

Silinen bölümlenmiş bir tabloyu geri yükleme

RESTORE TABLE <table_name> ('id'='<table_id>');

Silme anında mevcut olan tüm bölümler geri yüklenir.

Silinen bölümleri geri yükleme

Bir veya daha fazla silinen bölümü mevcut bir tabloya geri yükleyin:

RESTORE TABLE <table_name> PARTITION('id'='<partition_id>') [PARTITION('id'='<partition_id>')];
Tablo mevcut olmalıdır. Tablo da silindiyse önce tabloyu geri yükleyin.

Örnek:

-- View partition IDs
SHOW HISTORY FOR TABLE test_restore_part_y;

-- Restore two dropped partitions
RESTORE TABLE test_restore_part_y
  PARTITION('id'='a14d6cb4ab0c46378a6e284b257bbfaa')
  PARTITION('id'='8c85184ec0b44fba8198274401df2519');

Bölümleri belirli bir sürüme geri yükleme

RESTORE TABLE <table_name>
  PARTITION(<partition_spec>) [PARTITION(<partition_spec>)]
  TO LSN '<lsn>';

Birden çok bölümü tek bir LSN'ye geri yüklerken, bölüm için tam olarak o LSN mevcutsa bölüm belirtilen LSN'ye geri yüklenir. Aksi takdirde, en yakın önceki LSN'ye geri yüklenir.

Örnek: pt1 bölümünün LSN'leri 100, 102, 104, 106'dır. pt2 bölümünün LSN'leri 101, 103, 104, 105'tir. İkisini de LSN 102'ye geri yüklemek, pt1 bölümünü 102'ye ve pt2 bölümünü 101'e geri yükler.

RESTORE TABLE test_restore_part_y
  PARTITION(ds='20250701') PARTITION(ds='20250702')
  TO LSN '0000000000000010';

Bölümleri belirli bir sürümden yeni bir tablo olarak geri yükleme

RESTORE TABLE <table_name>
  PARTITION(<partition_spec>) [PARTITION(<partition_spec>)]
  TO LSN '<lsn>' AS <new_table_name>;

Delta tablo örnekleri

Delta tablo oluşturma, veri ekleme, silme ve geri yükleme

-- Create a Delta table
CREATE TABLE mf_dt (pk BIGINT NOT NULL PRIMARY KEY,
                    val BIGINT NOT NULL)
                    PARTITIONED BY (dd STRING, hh STRING)
                    TBLPROPERTIES ("transactional"="true");

-- Insert data
INSERT OVERWRITE TABLE mf_dt PARTITION(dd='01', hh='01')
  VALUES (1, 1), (2, 2), (3, 3);

INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01')
  VALUES (3, 30), (4, 4), (5, 5);

SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- Returns:
-- +----+-----+----+----+
-- | pk | val | dd | hh |
-- +----+-----+----+----+
-- | 1  | 1   | 01 | 01 |
-- | 4  | 4   | 01 | 01 |
-- | 5  | 5   | 01 | 01 |
-- | 2  | 2   | 01 | 01 |
-- | 3  | 30  | 01 | 01 |
-- +----+-----+----+----+

Geri yükleme için tablo ID'sini alma

DESC EXTENDED mf_dt; komutunu çalıştırın ve Extended Info bölümündeki TableID alanını bulun:

TableID:  cd607cd938dc4ca6886dd12212995604

Tabloyu silme ve geri yükleme

DROP TABLE mf_dt;

RESTORE TABLE mf_dt ('id' = 'cd607cd938dc4ca6886dd12212995604');

-- Verify the data
SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- Returns the same data as before the drop.

Bir bölümü silme ve geri yükleme

-- Get partition IDs
SHOW HISTORY FOR TABLE mf_dt;

-- Drop the partition
ALTER TABLE mf_dt DROP PARTITION (dd = '01', hh = '01');

-- Restore the partition
RESTORE TABLE mf_dt PARTITION('id' = '51d38cc9ded344cf99188cd1a806e5d2');

-- Verify the data
SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- Returns the same data as before the drop.

Geri yüklenen tabloda zaman yolculuğu

Bir Delta tablosunu geri yükledikten sonra zaman yolculuğu sorguları çalışmaya devam eder:

-- Query a specific version
SELECT * FROM mf_dt version AS OF 2 WHERE dd = '01' AND hh = '01';
-- Returns:
-- +----+-----+----+----+
-- | pk | val | dd | hh |
-- +----+-----+----+----+
-- | 1  | 1   | 01 | 01 |
-- | 3  | 3   | 01 | 01 |
-- | 2  | 2   | 01 | 01 |
-- +----+-----+----+----+

-- Query the latest version
SELECT * FROM mf_dt version AS OF get_latest_version('mf_dt')
  WHERE dd = '01' AND hh = '01';
-- Returns the current data.

Veri dosyası temizliği (Delta tablolar)

Delta tablolar, zaman yolculuğu süresi içindeki geçmiş verileri saklar ve bu durum ek depolama maliyetlerine neden olur. Sistem, aşağıdaki koşulların tümü karşılandığında gereksiz geçmiş verileri bir gün içinde otomatik olarak siler:

  • Veriler zaman yolculuğu süresinden daha eskidir. (Tablo için zaman yolculuğu devre dışı bırakıldıysa tüm geçmiş veriler bu koşulu karşılar.)

  • Veriler yaşam döngüsünü aşmış veya silinmiştir ve ayrıca yedekleme koruma süresini de aşmıştır.

"Geçmiş veri", geri dönüşüm kutusu dizinine taşınan veri dosyalarını ifade eder. Yaşam döngüsünü aşma, silme işlemi yürütme, sıkıştırma çalıştırma veya INSERT OVERWRITE gibi işlemlerin tümü veri dosyalarını geri dönüşüm kutusuna taşır.

PURGE ile zorla temizleme

Normal işlemlerde temizliğin sistem tarafından otomatik olarak yapılmasına izin verin. PURGE TABLE komutunu yalnızca acil durumlarda kullanın; örneğin, aşırı dosya sayısı disk kararlılığını bozduğunda veya geçmiş veriler beklenmedik maliyet artışlarına neden olduğunda.

PURGE TABLE <table_name>;
Uyarı

Bu komutu çalıştırdıktan sonra zaman yolculuğu sorguları geçmiş verileri döndürmeyebilir.

Örnek:

CREATE TABLE mf_ttt (pk BIGINT NOT NULL PRIMARY KEY,
                     val BIGINT NOT NULL)
                     TBLPROPERTIES ("transactional"="true");

INSERT INTO TABLE mf_ttt VALUES (1, 1), (2, 2);
INSERT INTO TABLE mf_ttt VALUES (2, 20), (3, 3);

-- Time travel returns version 2 data
SELECT * FROM mf_ttt version AS OF 2;
-- +----+-----+
-- | pk | val |
-- +----+-----+
-- | 1  | 1   |
-- | 2  | 2   |
-- +----+-----+

-- Run compaction, then time travel still works
ALTER TABLE mf_ttt compact major;
SELECT * FROM mf_ttt version AS OF 2;
-- Same result as above

-- After purge, time travel returns different data
PURGE TABLE mf_ttt;
SELECT * FROM mf_ttt version AS OF 2;
-- +----+-----+
-- | pk | val |
-- +----+-----+
-- | 1  | 1   |
-- | 3  | 3   |
-- | 2  | 20  |
-- +----+-----+

Komut referansı

Senaryo

Komut

Açıklama

Saklamayı yapılandırma

setproject odps.timemachine.retention.days=<days>;

Saklama süresini ayarlayın (0--30 gün). Varsayılan: 1.

setproject;

Saklama süresi dahil mevcut proje ayarlarını görüntüleyin.

Yedekleme geçmişini görüntüleme

SHOW HISTORY FOR tables [LIKE <name>];

Silinen tablolar dahil tüm tabloları listeler. List izni gerektirir.

SHOW HISTORY FOR TABLE <name> [LIMIT <n>] [LSN '<lsn>' | OFFSET <n>];

Bir tablonun sürüm geçmişini görüntüler. ShowHistory izni gerektirir.

SHOW HISTORY FOR TABLE <name> ('id'='<id>');

ID'sine göre silinen bir tablonun sürüm geçmişini görüntüler. List izni gerektirir.

SHOW HISTORY FOR TABLE <name> <partition_spec>;

Bir bölümün sürüm geçmişini görüntüler. ShowHistory izni gerektirir.

SHOW HISTORY FOR TABLE <name> PARTITION('id'='<id>');

ID'sine göre silinen bir bölümün sürüm geçmişini görüntüler.

Verileri geri yükleme

RESTORE TABLE <name> ('id'='<id>');

Silinen bir tabloyu veya bölümü geri yükler.

RESTORE TABLE <name> TO LSN '<lsn>';

Bir tabloyu belirli bir sürüme geri yükler.

RESTORE TABLE <name> TO LSN '<lsn>' AS <new_name>;

Bir tabloyu bir sürüme geri yükler ve yeni (veya mevcut) bir tablo olarak kaydeder.

RESTORE TABLE <name> PARTITION('id'='<id>') [...];

Bir veya daha fazla silinen bölümü geri yükler.

RESTORE TABLE <name> <partition_spec> [...] TO LSN '<lsn>';

Bölümleri belirli bir sürüme geri yükler.

RESTORE TABLE <name> <partition_spec> [...] TO LSN '<lsn>' AS <new_name>;

Bölümleri bir sürüme geri yükler ve yeni bir tablo olarak kaydeder.

Temizleme

PURGE TABLE <name>;

Geri dönüşüm kutusundaki geçmiş verileri zorla siler.

Kullanım notları

  • Tüm yedekleme ve geri yükleme komutlarına erişmek için MaxCompute istemcisinin en son sürümünü kullanın.

  • Yedekleme tabloları yalnızca veriler değiştirildiğinde oluşturulur. Değişiklik yoksa yedekleme girişi oluşmaz.

  • Saklama süresini aşan yedek veriler otomatik olarak silinir ve geri yüklenemez veya sorgulanamaz.

  • Gerekli izinler hakkında bilgi için bkz. MaxCompute izinleri.