An oracle is any entity or device that connects a deterministic blockchain with off-chain data (and vice-versa).
Oracles are used to provide external data to the smart-contracts. They serve as a middleware between the blockchain and the external APIs.
The oracles enter every data input through an external transaction.
The oracles solve api-connectivity-problem.
However, they are prone to the single-point-of-failure problem.
[!tip] Keep in mind
Oracles and data providers are not the same thing. Confusingly, sometimes that is the case: a company that provides a data stream will themselves act as the oracle delivering that data to a user directly.