Sayfalar

26 Eylül 2020 Cumartesi

attempt to fetch logical page (1:XXXXXX) in database XX failed. It belongs to allocation unit XXX not to XXX failed

Merhabalar VeriTabanlarında index yada Non-Cluster index bozulmalarından dolayı aşağıdaki gibi bir hata alabilirsiniz? Bu index bakımlarının zamanında yapılmaması, yanlış index oluşturulması, tabloların datalarının bulunduğu disklerin corrupt olması yada sistem disklerinin crush olması gibi birçok sebebten kaynaklı olabilir. Peki bu hatayı aldık sonra herşey bitti mi? hayır. data kaybında önce veriyi kurtarmak için birçok yöntem vardır.

Örnek olarak aşağıdaki bir hatayı ele alalım.

attempt to fetch logical page (1:438927981) in database 14 failed. It belongs to allocation unit 72060409138315264 not to 72060409197035520

öncelikle tablomuzun yedeğini alalım. ve satır satır row row tüm sağlam veriyi ayrı  bir tabloya alalım.

bunun için aşağıdaki scripti çalıştırabilirsiniz?

 CODE:

set nocount on;

DECLARE @Counter INT = 1;

DECLARE @LastRecord INT = 10000000; --your table_count


 WHILE @Counter < @LastRecord 

BEGIN 

BEGIN TRY  

    BEGIN

        insert into your_table_new SELECT * FROM your_table  WHERE your_column= @Counter --dont forget! create your_table_new before

    END 

END TRY

BEGIN CATCH    

     BEGIN

        insert into error_code select @Counter,'error_number' --dont forget the create error_code table before.

     END

 END CATCH

SET @Counter += 1;

END;


-----------------------

tablomuzun yedeği alındı. şimdi tablo üzerinde hertürlü kurtarma senaryolarımızı uygulayabiliriz.


Öncelikle tablodaki cluster mı noncluster indexlerde mi bozluma var tespit etmeye çalışıyoruz. Eğer noncluster ise işimiz kolay tablomuzu kurtarabiliriz. Ancak cluster ise fiziki olarak diskimizde arıza var demek anlamına gelir ve onarma yöntemlerinin diğer adımlarına geçerek onarma yoluna gideceğiz.


 

DBCC TRACEON(3604)

DBCC PAGE('table_name',1, 438927981,3) WITH TABLERESULTS

DBCC TRACEOFF(3604)


Metadata: IndexId 

 0 (heap) yada 1 (clustered index) ise backupdan dönmeniz gerekir.

 0 yada 1 den farklı bir değerse ise noncluster indexi rebuilt etmeniz yeterlidir.

 

 bunların hiç biri işe yaramadı diyelim. tabloyu onarmayı deneyeceğiz.

 

 DBCC CHECKTABLE(TabloAdi, REPAIR_REBUILD )

GO


bu da çzümolmazsa. Son bir seçenek Veri Kaybını da göze alarak onarma yoluna gideceğiz.


DBCC CHECKTABLE(TabloAdi, REPAIR_ALLOW_DATA_LOSS )

GO

 

 şu sitede index datalarına göz atmak için bakabilirsiniz.

 KAYNAK: https://www.mssqltips.com/sqlservertip/1578/using-dbcc-page-to-examine-sql-server-table-and-index-data/

27 Ağustos 2020 Perşembe

ASSERT: [025]: working path 'X' is not the same path as 'X'

Merhabalar Eğer loglarınızda aşağıdaki hatayı alıyorsanız muhtemel pgbackrest config dosyanız da uyuşmayan bir yer var demektir.

 ASSERT: [025]: working path 'X'  is not the same path as 'X'


primary de pgbackrest için tanımlı pgbackrest.conf dosyasında ayarlama yapıcağız. master instance da aşağıdaki path lerin doğru olduğuna emin olunuz.

checking the pgbackrest.conf of your primary instance

 [root_primary_instance]# cat /etc/pgbackrest.conf

[global]
repo1-path=/pgdata/backrest
repo1-retention-full=2
repo1-host=10.150.153.169
repo1-host-user=postgres

archive-async=y
log-level-file=detail

[global:archive-get]
process-max=8

[global:archive-push]
process-max=8

[pgtest1]
#pg1-path=/var/lib/pgsql/12/data
pg1-path=/pgdata/data
pg1-port=543


servisimizi restart edip hatanın kaybolduğunu göreceksiniz..
 
[root_primary_instance]# systemctl restart postgres-12

The transaction has already committed locally, but might not have been replicated to the standby

 Merhabalar Postgres de eğer aşağıdaki hatayı alıyorsanız;  muhtemelen bu sorun sizin Replication name'iniz yanlış olduğu anlamına geliyor.

DETAIL: The transaction has already committed locally, but might not have been replicated to the standby


 

Öncelikle check edelim.

primary DBde;
>postgres=# show synchronous_commit;
 synchronous_commit
--------------------
 on
(1 row)

senkronizasyonumuz açık görünüyor.. değilse off durumunda ise  postgres.conf dosyasından off kısmı on yapalım.

postgres=#
postgres=# select * from pg_stat_replication ;
 pid     usesysid     usename     application_name     client_addr     client_hostname     client_port     backend_start                  backend_xmin     state      sent_lsn     write_lsn     flush_lsn     replay_lsn     write_lag     flush_lag     replay_lag     sync_priority     sync_state     reply_time                    
 ------  -----------  ----------  -------------------  --------------  ------------------  --------------  -----------------------------  ---------------  ---------  -----------  ------------  ------------  -------------  ------------  ------------  -------------  ----------------  -------------  ----------------------------- 
 24330   16388        replikaci   walreceiver          10.150.153.167  (null)              42554           2020-08-27 11:43:52.374787+03  (null)           streaming  0/19010C88   0/19010C88    0/19010C88    0/19010C88     (null)        (null)        (null)         1                 sync           2020-08-27 13:43:42.137884+03 


postgres=# select application_name, sync_state from pg_stat_replication;
 application_name | sync_state
------------------+------------
 walreceiver      | async
(1 row)



postgres=# show synchronous_standby_names;
 synchronous_standby_names
---------------------------
 pgdbtest1

replication application name walreceiver  ise synchronous_standby_names inde aynı isim olması gerekir.  pgdbtest1 ismini değiştireceğiz.

Standby da 

postgres=# show synchronous_commit;
 synchronous_commit
--------------------
 local


olmasını bekleriz.

değişiklik için 

[root@pg_primary_instance]# vi postgresql.conf
#synchronous_standby_names = 'pgdbtest1'
synchronous_standby_names = 'walreceiver'

kayıt edip çıkıyoruz.
[root@pg_primary_instance]# systemctl restart postgresql-12

şimdi işlemlerinize devam edebilirsiniz.. /pgdata/log/ yada İnstance ınızı nereye kurduysanız oradan da log ları kontrol edebilirsiniz?

17 Ağustos 2019 Cumartesi

SanDisk SSD PLUS 120 GB hız sorunu ve çözümü

Merhabalar,

elinizde SanDisk SSD PLUS 120 GB ssd diskiniz var ama yazma hızı çok mu düşük.
Sorunu Diskin güncellemelerini yaparak düzeltebilirsiniz.. Bendeki SSD disk üzerine Windows kurulu ve bu işlemleri kurulu windows üzerinde yaptım.Ben Veri kaybı yaşamadım ama siz yine de önemli dosyalarını isterseniz yedekleyebilirsiniz. İşlemleri Fotoğraflarla anlatıyorum.

1. Öncelikli olarak SanDisk SSD güncellemelerini yapabilmeniz için programımızı SanDiskin kendi sitesinden indiriyoruz.
https://kb-tr.sandisk.com/app/answers/detail/a_id/15607/~/sandisk-ssd-dashboard-destek-bilgileri

2. Programı yükledikten sonra ayarlar sekmesinden Güncelleştirmeleri Denetle seçeneğine tıklayalım ve son güncelleştirmeleri alalım.(Merak etmeyin tüm bu işlemler fazla internet harcamıyor program boyutu da çok küçük)

3. Araçlar Sekmesine geçerek  Güncelleştirmeleri Denetle seçeneğine tıklayalım. Bu işlemden sonra Bilgisayarı yeniden başlatmanızı isteyecektir. Tekrar başlatıp programı tekrar açınız.
4. Son aşamada Performans ekmesine geçin ve  iyileştirme kısmından TRIM i Secin ve Trimi Şimdi çalıştır'ı tıklayınız ve işlem bu kadar..


5. Bendeki Eski ve yeni sonuclar ekrandaki gibi. Benim Bilgisayarım eski(data yolu eski teknoloji) olduğu için yazma hızı max 300Mb lara çıkabildi.Ancak siz  500Mb lara ulaşırsınız.

 


SanDisk SSD PLUS 120 GB, hız sorunu

19 Mart 2019 Salı

unix de büyük yada coklu dosyalarda ilk satırları silme

Delete first and (OR) last line on files(s)


aşağıdaki gibi verimiz olsun

K|ACTCTTT|TXEC|123|TEMPCOLUMN|COLUMN|
18494002|448|1208004|1
18493007|228|1208004|1
ASDFTT|234342
 
<><>BU komutla ilk ve son satrıları silebiliriz.
sed '$d' > file1.txt | sed "1d"
 
<><>bu komutlada coklu dosyalarda çalıştırabilirsiniz.ilk satırı siler.
  for f in  *.txt ;do sed '1d' $f > tmpfile; mv tmpfile $f;done
 
<><>Çoklu dosyalarda baştan iki satır silinecekse
 for f in  *.txt ;do sed '1,2d' $f > tmpfile; mv tmpfile $f;done
 
 
unix,aix,linux,sed,multiplefiles 

18 Mart 2019 Pazartesi

power shell yada cmd ekranında dummy file oluşturma

windowsta bazen istediğimiz kadar büyüklükte bir dosya create etmek isteriz. Bunu komutlarla cok rahat yapabiliriz.


önce istediğimiz dizine aşağıdaki komutla gidiyoruz.
C:\>cd /d Z:\

 Z:\>cd DENEMEFILE

35 bytle lık dummy adında bir dosya oluşturur.
Z:\DENEMEFILE>fsutil file createnew dummy 35