It's a little more complicated than that. Basically, holes occur when you have a function that's smooth and continuous but at certain points is undefined, usually because the denominator becomes zero. These can often be removed by algebraic manipulation, and then are called removable discontinuities. Though sometimes there are more complex problems that cannot be removed.
An asymptote occurs when a function approaches a specific value in such a way that as X -> +/- infinity the Y value approaches the specific value infinitely close, but never actually reaches it (you can switch the Y's and the X's here, this is the difference between a vertical and a horizontal asymptote).
The places these occur are not as simple as you described (1/x has both vertical and horizontal asymptotes and never becomes 0/0), but can often be found by examining the behavior of the function in question.