Switch Oracle CLOB to VARCHAR2
Changing Oracle CLOBs to VARCHAR2s can result in a huge performance increase, especially if the database and app servers are not close together on the network.
1 2 namespace :db do 3 task :fix_clobs => [:environment] do |t| 4 @outfile = File.expand_path(File.join(RAILS_ROOT,"db","fix_clobs.sql")) 5 6 File.open(@outfile, "w") do |file| 7 ActiveRecord::Base.connection.tables.each do |table_name| 8 begin 9 model = eval(table_name.classify) 10 model.columns.each do |column| 11 if column.sql_type == "CLOB" 12 file.write("ALTER TABLE #{table_name} ADD #{column.name}_temp VARCHAR2(4000);\n") 13 file.write("UPDATE #{table_name} SET #{column.name}_temp = #{column.name};\n") 14 file.write("COMMIT;\n") 15 file.write("ALTER TABLE #{table_name} DROP COLUMN #{column.name};\n") 16 file.write("ALTER TABLE #{table_name} RENAME COLUMN #{column.name}_temp TO #{column.name};\n") 17 file.write("\n") 18 end 19 end 20 rescue => ex 21 puts "Failed for #{table_name} with #{ex.class}" 22 end 23 end 24 end 25 end 26 end