Pages

Sunday, May 5, 2013

Adding or Removing IDENTITY in existing Column SQL Server


Hi all, this is just a documented version from http://stackoverflow.com/ question and the best answers.

We can't alter the existing columns for identity.

Approach 1
We have 2 options,
1. Create a new table with identity and drop the existing table 
2. Create a new column with identity and drop the existing column 
Option 1:
you can retain the existing data values on the newly created identity column.
CREATE TABLE dbo.Tmp_Names
    (
      Id int NOT NULL
             IDENTITY(1, 1),
      Name varchar(50) NULL
    )
ON  [PRIMARY]
go
SET IDENTITY_INSERT dbo.Tmp_Names ON
go
IF EXISTS ( SELECT  *
            FROM    dbo.Names ) 
    INSERT  INTO dbo.Tmp_Names ( Id, Name )
            SELECT  Id,
                    Name
            FROM    dbo.Names TABLOCKX
go
SET IDENTITY_INSERT dbo.Tmp_Names OFF
go
DROP TABLE dbo.Names
go
Exec sp_rename 'Tmp_Names', 'Names'

Option 2:
you can’t retain the existing data values on the newly created identity column, The identity column will hold the sequence of number.
Alter Table Names Add Id_new Int Identity(1, 1)
Go
Alter Table Names Drop Column ID
Go
Exec sp_rename 'Names.Id_new', 'ID', 'Column'


Approach 2:

In SQL 2005 and above, there's a trick to solve this problem without changing the table's data pages. This is important for large tables where touching every data page can take minutes or hours. The trick also works even if the identity column is a primary key, is part of a clustered or non-clustered index, or other gotchas which can trip up the the simpler "add/remove/rename column" solution.
Here's the trick: you can use SQL Server's ALTER TABLE...SWITCH statement to change the schema of a table without changing the data, meaning you can replace a table with an IDENTITY with an identical table schema, but without an IDENTITY column. The same trick works to add IDENTITY to an existing column.
Normally, ALTER TABLE...SWITCH is used to efficiently replace a full partition in a partitioned table with a new, empty partition. But it can also be used in non-partitioned tables too.
I've used this trick to convert, in under 5 seconds, a column of a of a 2.5 billion row table from IDENTITY to a non-IDENTITY (in order to run a multi-hour query whose query plan worked better for non-IDENTITY columns), and then restored the IDENTITY setting, again in less than 5 seconds.
Here's a code sample of how it works.
 CREATE TABLE Test
 (
   id int identity(1,1),
   somecolumn varchar(10)
 );

 INSERT INTO Test VALUES ('Hello');
 INSERT INTO Test VALUES ('World');

 -- copy the table. use same schema, but no identity
 CREATE TABLE Test2
 (
   id int NOT NULL,
   somecolumn varchar(10)
 );

 ALTER TABLE Test SWITCH TO Test2;

 -- drop the original (now empty) table
 DROP TABLE Test;

 -- rename new table to old table's name
 EXEC sp_rename 'Test2','Test';

 -- see same records
 SELECT * FROM Test; 
This is obviously more involved than the solutions in other answers, but if your table is large this can be a real life-saver. There are some caveats:
you'll need to drop foreign keys before you do the switch and restore them after.
same for WITH SCHEMABINDING functions, views, etc.
new table's indexes need to match exactly (same columns, same order, etc.)
old and new tables need to be on the same file group.
only works on SQL Server 2005 or later
I previously believed that this trick only works on the Enterprise or Developer editions of SQL Server (because partitions are only supported in Enterprise and Developer versions), but Mason G. Zhwiti in his comment below says that it also works in SQL Standard Edition too. I assume this means that the restriction to Enterprise or Developer doesn't apply to ALTER TABLE...SWITCH.
There's a good article on TechNet detailing the requirements above.

Just collecting notes and sharing..
Source: stackoverflow.com


Wednesday, January 23, 2013

Bore And Stroke Pada Kendaraan Bermotor

Berhubung saya kurang mengerti tentang otomotif, jadi kepikiran buat dokumentasi'in istilah yang paling sering ditemui dalam spesifikasi kendaraan bermotor yakni BORE dan STROKE :-)

Bore dan Stroke
Bore adalah diameter silinder blok mesin, sedangkan Stroke adalah jarak pergerakan silinder dalam blok mesin (untuk lebih jelas silakan liat gambar). 


Dari penjelasan dimensi bore dan stroke, kita dapat menghitung kapasitas mesin dengan rumus volume silinder.
Kapasitas mesin (cc) = Luas Silinder x Panjang Stroke


Dengan mengenal spek bore dan stroke kita bisa mengenal karakter performance motor, apakah berkarakter overbore atau overstroke.
Overbore :
Karakter mesinnya adalah panjang bore lebih panjang daripada panjang stroke ( bore length > stroke lenth)
Power motor muncul terutama saat putaran mesin tinggi. Ini disebabkan panjang pergerakan naik turun piston lebih cepat karena jarak stroke yang pendek.

Overstroke :
Karakter mesinnya adalah panjang stroke lebih panjang atau relatif sama panjangnya dengan panjang bore (bore length =< stroke length ) maka dipastikan performance mesin dirancang untuk mengeluarkan kemampuannya di putaran mesin rendah sampai menengah.

Jadi dengan melihat spek bore dan stroke sekarang kita bisa dengan gamblang melihat karakter mesin motor tersebut.

Untuk urusan Power (biasanya satuannya PS ato HP per *rpm*):
Mesin overbore mendapat power tertinggi pada putaran tinggi, sedangkan mesin overstroke mendapat power tertinggi pada putaran yang rendah. Dengan kata lain, mesin overstroke top speed nya tidak setinggi mesin overbore

Untuk urusan Torsi (biasa satuannya Nm per *rpm*):
Mesin overbore relatif lebih rendah dibanding mesin overstroke. Karena torsi max yang bisa didapat pada putaran mesin yang rendah (rpm) maka mesin overstroke secara acceleration speed diatas mesin overbore.

Perbandingan karakter mesin tersebut terbatas pada mesin cc yang sama. Bagaimanapun juga, kompresi mesin, rangka motor, dan alat2 penunjang lainnya juga mempengaruhi realita top speed dan akselerasi motor yang bersangkutan.
Untuk hal tersebut mungkin akan didokumentasikan pada artikel selanjutnya! :)

Jika anda melihat gambar dibawah ini, sudah bisakah anda membedakan mana yg lebih unggul di top speed atau akselerasi dan mana yang overbroke dan overstroke?
:)

Just collecting notes and sharing.. Please let me know if there are wrong statements in this article or a copy-paste one.

Sumber:
http://wendakalubis.wordpress.com

Wednesday, January 16, 2013

10 Gejala Umum Infeksi HIV Yang Terabaikan

Hingga saat ini Human Immunodeficiency Virus atau yang kita kenal dengan HIV masih menjadi penyakit mematikan dan belum ditemukan obat untuk menyembuhkannya. Secara umum sulit sekali membedakan gejala infeksi virus HIV dengan penyakit lain. Bahkan pada beberapa kasus, keterlambatan diagnosa penyakit HIV bisa berujung pada kematian.

Virus HIV ditularkan melalui cairan tubuh seperti sperma, cairan vagina, atau transfusi darah. Virus ini hanya memerlukan waktu maksimal dua bulan sebelum masuk ke dalam tubuh dan menggerogoti sistem pertahanan tubuh kita.
Antara 40-90 persen orang yang terpapar virus HIV pada awalnya akan mengalami gejala seperti flu yang dikenal dengan Acute Retroviral Syndrome disingkat ARS. Namun terkadang gejala HIV tidak dapat terdeteksi bahkan hingga beberapa tahun ke depan pasca terinfeksi virus HIV.
“Karena HIV tidak dapat terdeteksi sejak dini dan apakah tubuh kita terpapar HIV atau tidak maka sangat direkomendasikan untuk melakukan tes laboratorium untuk mengetahuinya. Terutama bagi Anda yang gemar berhubungan seks dengan orang-orang yang berbeda,” ungkap Michael Horberg, MD, Direktur HIV/AIDS for Kaiser Permanente, di Oakland.
Berikut 10 gejala umum virus HIV yang patut Anda waspadai
  1. Demam
    Demam ringan adalah gejala awal yang paling umum terjadi saat seseorang terpapar virus HIV. Demam ringan ini seringkali disertai dengan sakit tenggorokan, kelelahan yang ekstrim, dan pembekakan kelenjar getah bening.
    Demam adalah reaksi dari sistem kekebalan tubuh sebagai akibat dari masuknya virus HIV ke aliran darah dengan jumlah yang berlipat ganda.
  2. Nyeri Otot
    Nyeri otot dan persendian tak hanya dialami oleh orang-orang yang mengalami gejala penyakit hepatitis dan sifilis, tapi juga dirasakan seseorang yang telah terpapar virus HIV. Gejala ini seringkali diabaikan hingga paparan virus HIV benar-benar masuk ke tingkat yang mengkhawatirkan.
  3. Ruam Kulit
    Ruam bisa berupa bercak-bercak kemerahan pada kulit atau benjolan menyerupai jerawat dalam jumlah banyak yang tak sembuh-sembuh. Gejala ini akan muncul jika paparan virus HIV telah mencapai pada tingkat yang lebih parah.
  4. Mual, Muntah, dan Diare
    Antara 30- 60 persen pengidap HIV akan mengalami gejala singkat mual, muntah, dan serangan diare. Selain sebagai gejala HIV tahap lanjut, gejala-gejala di atas juga bisa muncul sebagai efek samping dari terapi pengobatan.
  5. Berat Badan Turun Drastis
    Berat badan turun drastis merupakan gejala tahap lanjut bahwa tubuh telah terinfeksi HIV. Berat badan turun drastis bisa terjadi akibat diare atau kurangnya nutrisi tubuh akibat sering memuntahkan makanan.
  6. Batuk Kering
    Biasanya batuk kering akan terjadi setelah satu tahun terjangkit virus HIV, sekaligus menjadi tanda bahwa penyakit ini semakin memburuk. Penggunaan obat batuk sekali pun tidak dapat meredakan batuk akibat paparan virus HIV.
  7. Perubahan pada Kuku
    Tanda lain dari infeksi HIV adalah perubahan pada kuku seperti penebalan, kuku melengkung, dan perubahan warna seperti kuku menghitam atau muncul garis coklat vertikal atau horisontal dipermukaan kuku.
    “Perubahan kuku ini dapat terjadi akibat infeksi jamur seperti kandida. Mengingat penderita HIV mengalami penurunan sistem kekebalan tubuh, maka jamur tersebut bisa sangat mudah berkembang,” kata Horberg.
  8. Infeksi Jamur pada Mulut
    Infeksi jamur tak hanya menyerang permukaan kuku, tapi juga organ lain seperti mulut. Jika jamur sudah menginfeksi mulut, maka pengidap HIV akan sulit untuk mengunyah dan menelan makanan.
  9. Kebingungan dan Sulit Konsentrasi
    Masalah kognitif bisa menjadi tanda demensia terkait HIV. Selain mengalami kebingungan dan sulit berkonsentrasi, demensia terkait HIV juga dapat mempengaruhi memori dan masalah perilkau seperti mudah marah dan tersinggung. Gejala ini diiringi dengan menurunnya keampuan motoris tubuh seperti menjadi ceroboh, menurunnya kordinasi tubuh, dan bahkan hilangnya kemampuan untuk menulis.
  10. Herpes Genital
    Herpes genital yang terjadi pada penderita HIV umumnya tidak memiliki gejala yang khas. Namun luka yang muncul cenderung lebih besar dan lebih dalam. Penyakit ini lebih banyak menular melalui hubungan kontak kulit dengan penderita, terutama saat berhubungan seks. Umumnya gejalanya adalah timbul bintil-bintil di bagian luar alat kelamin yang bentuknya memerah dan membengkak.
Sumber tulisan:
http://id.she.yahoo.com

Just collecting notes and sharing..
Please let me know if there are wrong statements in this article or a copy-paste one.

Monday, October 15, 2012

Locking Table [Tablock vs Tablocks]

If you are in a transaction and you grab an exclusive lock on a table, EG:

SELECT 1 FROM TABLE WITH (TABLOCKX)

No other processes will be able to grab any locks on the table, meaning all queries attempting to talk to the table will be blocked until the transaction commits.

TABLOCK only grabs a shared lock, shared locks are released after a statement is executed if your transaction isolation is READ COMMITTED (default). If your isolation level is higher, for example:SERIALIZABLE, shared locks are held until the end of a transaction.

Shared locks are, hmmm, shared. Meaning 2 transactions can both read data from the table at the same time if they both hold a S or IS lock on the table (via TABLOCK). However, if transaction A holds a shared lock on a table, transaction B will not be able to grab an exclusive lock until all shared locks are released. Read about which locks are compatible with which at msdn.

Both hints cause the db to bypass taking more granular locks (like row or page level locks). In principle, more granular locks allow you better concurrency. So for example, one transaction could be updating row 100 in your table and another row 1000, at the same time from two transactions (it gets tricky with page locks, but lets skip that).

In general granular locks is what you want, but sometimes you may want to reduce db concurrency to increase performance of a particular operation and eliminate the chance of deadlocks.

In general you would not use TABLOCK or TABLOCKX unless you absolutely needed it for some edge case.

Quite an old article on mssqlcity attempts to explain the types of locks:
Shared locks are used for operations that do not change or update data, such as a SELECT statement.
Update locks are used when SQL Server intends to modify a page, and later promotes the update page lock to an exclusive page lock before actually making the changes.
Exclusive locks are used for the data modification operations, such as UPDATE, INSERT, or DELETE.
What it doesn't discuss are Intent (which basically is a modifier for these lock types). Intent (Shared/Exclusive) locks are locks held at a higher level than the real lock. So, for instance, if your transaction has an X lock on a row, it will also have an IX lock at the table level (which stops other transactions from attempting to obtain an X lock on the table until your transaction completes or rolls back).

The concept of "sharing" a lock is quite straightforward - multiple transactions can have a Shared lock for the same resource, whereas only a single transaction may have an Exclusive lock, and an Exclusive lock precludes any transaction from obtaining or holding a Shared lock.

Exclusive locks are always held until the end of the transaction.

all shared locks are released at the end of a statement in a read committed transaction, if you want to hold the locks you need hints or a higher isolation level. tablockx will grab an X lock.


Just collecting notes and sharing..
Source: www.stackoverflow.com

Wednesday, August 15, 2012

Makanan yang melemahkan Tulang

Ghiboo.com - Selain mengetahui makanan mana saja yang memperkuat tulang, kita juga perlu tahu makanan yang bisa merusak tulang.

Bisa saja, beberapa makanan favorit Anda justru melemahkan kekuatan tulang Anda. Yuk, cari tahu agar Anda bisa membatasi konsumsinya sebelum terlambat.

Makanan asin dengan garam tinggi

Makanan olahan atau makanan asin membuat kalsium dalam tulang menghilang. Hal ini terjadi karena garam dapat menyebabkan ekskresi kalsium yang berlebihan melalui ginjal. Sebaiknya, asupan garam tak lebih dari 1.200 mg per hari.

Makanan manis

Ternyata makanan manis tak hanya memengaruhi kesehatan gigi saja, tetapi juga menimbulkan masalah baru pada tulang Anda. Kelebihan gula dapat menghambat penyerapan kalsium dan mengikis fosfor. Jika Anda menyukai makanan manis, ganti dengan buah-buahan dan hindari makanan olahan.

Cola

Minuman bersoda mengurangi kepadatan mineral tulang yang meningkatkan risiko patah tulang. Cola mengandung asam folat yang dapat melemahkan usus dan penyerapan kalsium.

Kafein

Kafein dapat melarutkan kalsium dalam tulang dan melemahkan fungsinya. Sekitar 6 miligram kalsium akan hilang setiap kali Anda mengonsumsi 100 mg kafein. Terlebih lagi, jika ditambahkan gula yang malah memberikan efek merugikan bagi kesehatan tulang.

Alkohol

Alkohol berkontribusi pada rendahnya massa tulang, penurunan pembentukan tulang, meningkatkan risiko patah tulang dan menghambat pemulihan patah tulang.

Kacang

Hampir semua kacang-kacangan mengandung phytates. Sayangnya, hampir semua kacang-kacangan mengandung phytate. Phytate dapat mengganggu kemampuan tubuh untuk menyerap kalsium. Tapi, sebaiknya tak perlu takut dan memilih menghindari kacang. Makanan ini mengandung magnesium, serat dan nutrisi lainnya yang diperlukan tubuh. Untuk mengatasinya, pengurangan tingkat phytate dapat dilakukan dengan merendam biji kacang dalam air beberapa jam sebelum direbus.

Just collecting notes and sharing..

Wednesday, June 6, 2012

Java Notes: Comparable dan Comparator

Comparable - java.lang package

@ this.compateTo(object o)
 same -> = 0
 less than -> <0
 greater than -> >0

Comparator - java.util package

@compare(object o1, object o2)
 same -> = 0
 less than -> <0
 greater than -> >0

Both are interface.
The different is "this" reference

Comparable is used by most java class like String, Date, Array, wrapper classes, etc
Comparable implement natural ordering of object.
If any object implements Comparable and collection of that object is either List or Array can be sorted automatically.

Oject that implement Comparable in Java can be used as keys in sorted map or elements in a sorted set. Eg. TreeSet, without specifiying any Comparator


Just collecting notes & sharing..
Please let me know if there are wrong statements in this article or a copy-paste one.

Saturday, May 19, 2012

About Color Banding

Do you know about Color banding?

If you are working in design animation, video rendering, digital coloring and its friends, you must know well about this, otherwise you may unfamiliar with this. The only reason I post about this one because somehow it is interested me.

After read about the newest video encoding in 10bit depth, I accidentally know about what is the color banding is. I get this from watching my favorite anime with 10bit depth encoding. That's how I get know about color banding.

Color Banding sample


Banding happens when video is compressed or decompressed and similar colors get posterized. This undesirable, visible bands of color that can be distracting, and in some cases downright ugly. It can happen in many situation, like video, picture or games. If it is in a small area, we wont notice and nobody got annoyed. But if we see in a large area, a large screen, it will very-very disturbing our eyes.

There are quite a few ways to remove color banding. Everyone seems to have their own formula.And for those kind of matters, I dont have any knowledge to explain it in here.



Just collecting notes and sharing.. Please let me know if there are wrong statements in this article or a copy-paste one.