What can become a reason of database failure?
The number one reason is operator error. The 'whops, I dropped the wrong table' moment.

Next are catastrophic hardware failures (lost, unrecoverable, disk). Non-disk failures are actually less problematic because the data can usually be retrieved by attaching the (still working) disks to a different host.

Disk I/O errors (corruption of media at rest) used to be a big issue, but nowadays all DBs have page checksum enabled by default and can catch media corruption. 

Memory and processor errors can cause corruption in-memory, before writing to disk, and thus defeat checksums, but such errors manifest all over the host process(es) and are usually detected as 'the server is crashing randomly'. Unfortunately, often times by the time action is taken the data is already randomly corrupted.

Application logical corruptions are often a big deal ("the app has written all fields with 'foo' when it should 'bar' ") but those are seldom seen as 'corruption' and can be corrected.

And then there are engine code defects. You can't really defend against them, other than keep an eye on the community pulse and be aware when issues are discovered and publicized, keep your servers patched up to date.