oTokens are interest-bearing tokens. When you supply an asset to a market, you'll receive an equivalent amount of oTokens. These tokens grow in value over time as you earn interest.
dTokens are debt-bearing tokens. When you borrow an asset, you'll receive an equivalent amount of dTokens. These tokens grow in value over time as your debt increases from interest.