MySQL Table Recovery

MySQL’de sunucuyu bir şekilde ayağa kaldıramıyorsunuz ve hiç bir işlem yapamıyorsunuz. Elinizde sadece .frm ve .ibd dosyaları var. Bu durumda DB’nizi kurtarmak için aşağıdaki yolu deneyebilirsiniz.

  • Bilgisayarınıza MySQL Utilities uygulamasını kurun ve aşağıdaki adımları takip edin.
  • Utilities içerisindeki mysqlfrm komutu ile  tablonun DDL scriptini oluşturun

                 mysqlfrm –diagnostic C:\db\table_name.frm

  • Sonra bu scripti yeni DB’nizde çalıştırın ve tablonuzu create edin.
  • Sonra aşağdaki komut ile default oluşan ibd file silin

                alter table table_name discard tablespace

  • Sonra elinizdeki table_name.ibd dosyasını yeni databasinizin dizinine kopyalayın
  • Sonra aşağıdaki komut ile table_name.ibd dosyasındaki dataları mevcut tablespace’a aktarın

               alter table table_name import tablespace

  • Sonra select * from table_name komutu ile datalarınızı kontrol edin.

 

Adaptive Object Model

Dinamiklik gerektiren ve hızlı değişime ihtiyaç duyan uygulamaların domain modellerini yönetmek için AOM design patterni kullanılabilir. AOM classları,attributeleri,ilişkileri ve classların operasyonlarını metadata olarak saklayıp dinamik olarak kullanmayı sağlar. Kullanıcılar doğrudan metadatayı değiştirerek domain modeli değiştirebilirler. Object modeli ister XML dosyalarında ister databasede saklayabilir ve yönetebilirsiniz.

Bu tasarıma baktığımızda aslında NoSQL databaselerin temel aldığı mantığı yansıtmaktadır. Yani MongoDB gibi NoSql databaselerin temelindeki pattern AOM diyebiliriz.

AOM’u anlatan güzel bir blog girdisi gördüm. Paylaşmak istedim;

Buradan erişebilirsiniz.

Kaynak

Spring Framework ile Database Stored Procedure Çağrımı

Procedure/Fonksiyon çağrımlarını kolaylaştırabilmek için aşağıdaki gibi bir Util Class oluşturdum.

import java.sql.Types;

import java.util.Map;

import javax.sql.DataSource;

import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.StoredProcedure;

/**
 *
 * @param <T>
 * @author Dilaver Demirel
 */
public class SimpleDbProcedureCall<T> extends StoredProcedure {

    public SimpleDbProcedureCall(DataSource dataSource, String procedureName,boolean isFunction) {
        super(dataSource, procedureName);

        if(isFunction)
            declareParameter(new SqlOutParameter("return",Types.VARCHAR));

        setFunction(isFunction);        
    }

    public void addInParameter(String paramName,Integer type){
        declareParameter(new SqlParameter(paramName,type));
    }

    public void addOutParameter(String paramName,Integer type){
        declareParameter(new SqlOutParameter(paramName,type));
    }

    public T callFunction(Object... inParameters){
        compile();
        Map out = execute(inParameters);
        T returnVal = null;
        if(!out.isEmpty()){
            returnVal = (T)out.get("return");
            return returnVal;
        }else
            return null;
    }

    public Map callFunctionReturnMap(Object... inParameters){
        compile();
        return execute(inParameters);
    }
}

Örnek Kullanımı;

SimpleDbProcedureCall<String> fnc = new SimpleDbProcedureCall<String>(dataSource,"test_function",true);
fnc.addInParameter("id", Types.NUMERIC);

fnc.addOutParameter("o_val", Types.VARCHAR);

Map retVal = fnc.callFunctionReturnMap(id);

Tmp_Class tmpClass = new Tmp_Class();
tmpClass.setOut1((Integer)retVal.get("return"));
tmpClass.setOut2((String)retVal.get("o_val"));