The visitors came out of the gate like gang-busters, piling shots on net, creating plenty of chances and throwing their bodies around with big hits.
The Flames played with pace, using speed to put the Oilers back on their heels early but a pair of powerplay markers by Connor McDavid helped Edmonton to a 3-1 lead they rode to victory.
Andrew Mangiapane and Elias Lindholm scored for the Flames, while Jacob Markstrom - starting his 300th NHL game - made 29 saves.
Mike Smith had a big night for Edmonton at the other end of the ice, stopping 45 pucks.
The dangerous Oilers powerplay got a crack less than three minutes into the tilt but it was the Flames with the best chance on that man-up when a hardworking Dillon Dube sprung Mangiapane on a partial breakaway, but Smith got his left shoulder on the offering.
Milan Lucic's tenacity created another chance when he managed to intercept a clearing attempt by Smith behind the net, feeding it out to Brett Ritchie who got off a shot as the Oilers goalie scrambled back into the net.
The Flames had another great opportunity when a deft pass deflection by Rasmus Andersson in the Flames zone led to a 2-on-1 the other way, Mangiapane's saucer pass across to Johnny Gaudreau bouncing over his stick.
The ice was slanted in favour of the visitors for much of the first half of the opening frame, as Calgary led 11-5 in shots at one point.
But it was Derek Ryan who opened the scoring on the next Oilers possession following the Mangiapane-Gaudreau rush when a puck was thrown into the slot and bounced off his chest, the former Flame able to bat the puck out of the air and past Markstrom as it fell at 13:08.
McDavid then made it 2-0 on the powerplay at 17:29 when a rebound fired out to him and he beat Markstrom.
It was a feisty first period with lots of skirmishes, Calgary going 0-for-1 on the PP while the Oilers were 1-for-3.
McDavid was tagged for a minor after holding Lucic 2:24 into the second but Calgary couldn't find twine. Lucic was then sent off for a trip with 12 seconds left in McDavid's minor and on the ensuing Oilers advantage, the captain one-timed another pass to make it a 3-0 game at 5:33.
An aggressive shift by the Flames created their first goal, hard battles - including an excellent job by Juuso Valimaki to keep the puck in the zone - led to a Dube shot, Mangiapane circling in front and kicking the puck to his stick and putting a backhand into the net at 9:19.
Moments later after the faceoff, Oilers off-season acquisition Zach Hyman had a breakaway on Markstrom who kicked out his right pad to stop his shot.
The Flames had an 18-10 lead in shots in the middle stanza, and an 18-9 edge in total scoring chances after 40 minutes.
Lindholm made it a one-goal game on the Flames fourth powerplay of the night when Tkachuk got the puck behind the net and passed out to him as he streaked through the slot and snapped it far-side. It was Lindholm's 19th goal in 29 career games against the Oilers.
Jesse Puljujarvi scored just 26 second later, though, to restore the two-goal cushion for the homeside.
McDavid rounded out the scoring with a late empty-netter.