I am using a Canon EOS 7D. But my photos have black spots in the same position. I tried sensor cleaning from a professional and the result is the same. He told me that it is due to oil spots which can't be cleaned. What should I do now?
In the image you included it's difficult to say exactly what the black spots are but more importantly where they are. We'll presume that the diagnosis is correct (oil, and uncleanable) but is it on the sensor or the low pass filter covering the sensor?
If you feel brave, stronger, cheap, or a risk taker you can look at this set of cleaning instructions from cleaning digital cameras and compare the advice with other sites to verify the suggested methods. You can also try sites like LifePixel which replace scratched low pass filters (for that camera) for U$250. Looking on the Internet for a replacement sensor (with LPF) it's going to cost under U$120 (without labor). There are videos available showing sensor replacement if you're brave and have nerves of steel. None of the above DIY is "recommended", but it's possible.
It's also possible to take a photo of a white card and use dark pixel correction to fix every photo you take, it's a question of what level of perfection you want and how much time and money you want to spend. A little use of the "Healing Tool" could fix that photo in a half minute, then it comes down to "how often do you use your camera?".
If a professional service says it can't be cleaned, your next step is to send it Canon for repair. It may be that they will need to replace the sensor, in which case the cost may exceed the cost of a replacement.
Based on several clues in the image, the photo was taken with a fairly wide aperture setting.
If this is the case, the hard outlines of the spots tend to indicate that whatever it is, it is not on the front surface of the filter stack in front of the sensor.
Normally, when we refer to "cleaning the sensor" what we are really talking about is cleaning the front of the filter stack that sits in front of the actual surface of the imaging sensor.
Because the front of the sensor stack is about 1-2 mm in front of the surface of the actual sensor, when wider apertures are used, the shadows of dust and other substances on the front of the sensor stack tend to be hazy and indistinct. To get sharp outlines a much smaller aperture needs to be used.
The example looks like whatever the substance(s) are, they are under the filter stack and directly on the surface of the sensor itself. To clean the area between the filter stack and the sensor requires a near total disassembly of the camera. The labor cost of such a cleaning is probably higher than the cost of a used 7D.
You have dirt on your sensor. In the sample image you provided you can remove it with a healing brush (available in most decent editors).